Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 9541|回复: 5

[已解决]静态变量和全局变量的问题。

[复制链接]
发表于 2014-3-23 00:55 | 显示全部楼层 |阅读模式
本帖最后由 lan8930 于 2014-3-23 01:01 编辑

求助:我想在一个sheet被激活的时候,记下它的最后一行的行号。然后在另一个事件中调用。
以下代码为何不起作用?


Public lastrow  '定义lastrow为全局变量

Private Sub Worksheet_Activate()
Static lastrow%                            ‘定义lastrow的值为静态变量
lastrow = [A10000].End(xlUp).Row
MsgBox lastrow
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox lastrow
End Sub

激活sheet,执行第一个事件,跳出对话框显示最后一行的行号13。


选择的单元格变化,执行第二个事件,跳出的对话框是空白。而不是最后一行的行号。WHY?
这个static和public用错了?该怎么改?求教

另外,问一下,同时选择了一片单元格。target的最左上角和最右下角的单元格地址咋写?


最佳答案
2014-3-23 01:10
本帖最后由 那么的帅 于 2014-3-23 01:15 编辑

问题1 定义变量
Public lastrow  '定义lastrow为全局变量
定义的变量要放在 模块1,才会在不同工作表中使用
如果定义在当前工作表,只适用于 当前工作表
如果定义在当前工作表的某个事件里,也只适用于 当前工作表的某个事件

主要问题在于,lastrow变量 在你的代码中定义了2次
如果在当前工作表所有事件中使用,只能在最上面定义一次,否则,如果在某个事件中再定义一次,其他事件中因为没有定义,所以该变量会自动返回 空。
问题2
  1.     A1 = Target(1).Address    '选取区域的左上角单元格地址
  2.     A2 = Target(Target.Count).Address    '选取区域右下角单元格地址
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-3-23 01:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 那么的帅 于 2014-3-23 01:15 编辑

问题1 定义变量
Public lastrow  '定义lastrow为全局变量
定义的变量要放在 模块1,才会在不同工作表中使用
如果定义在当前工作表,只适用于 当前工作表
如果定义在当前工作表的某个事件里,也只适用于 当前工作表的某个事件

主要问题在于,lastrow变量 在你的代码中定义了2次
如果在当前工作表所有事件中使用,只能在最上面定义一次,否则,如果在某个事件中再定义一次,其他事件中因为没有定义,所以该变量会自动返回 空。
问题2
  1.     A1 = Target(1).Address    '选取区域的左上角单元格地址
  2.     A2 = Target(Target.Count).Address    '选取区域右下角单元格地址
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-3-23 01:16 | 显示全部楼层
本帖最后由 lan8930 于 2014-3-23 01:20 编辑
那么的帅 发表于 2014-3-23 01:10
问题1 定义变量
Public lastrow  '定义lastrow为全局变量
定义的变量要放在 模块1,才会在不同工作表中使 ...


我只要用在当前工作表就行。问题是现在也不起作用呀,求解

另外,target(1).address,为啥说跳错了...我肯定我的代码没写错,后面没空格啥的。

QQ图片20140323011844.jpg
回复

使用道具 举报

发表于 2014-3-23 01:17 | 显示全部楼层
lan8930 发表于 2014-3-23 01:16
我只要用在当前工作表就行。问题是现在也不起作用呀,求解

Static lastrow%   这句代码去掉
回复

使用道具 举报

 楼主| 发表于 2014-3-23 01:22 | 显示全部楼层
那么的帅 发表于 2014-3-23 01:17
Static lastrow%   这句代码去掉

谢谢,这个问题解决了。可为啥我的target(1).address跳错?
回复

使用道具 举报

发表于 2014-3-23 01:44 | 显示全部楼层
lan8930 发表于 2014-3-23 01:22
谢谢,这个问题解决了。可为啥我的target(1).address跳错?

Target 变量 在 工作表事件里 使用
如果在模块里使用,需要先定义Target变量,或者使用 下面的代码
  1. A1 = Selection(1).Address '选取区域的左上角单元格地址
  2. A2 = Selection(Selection.Count).Address
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-19 21:44 , Processed in 0.274786 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表