Excel精英培训网

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

[已解决]请教,静态变量的生命周期。

[复制链接]
发表于 2013-6-1 11:04 | 显示全部楼层 |阅读模式
本帖最后由 silenthunter 于 2013-6-1 11:06 编辑

Private Sub 动态静态()
Dim a As Byte
Static b As Byte
a = a + 1
b = b + 1
Debug.Print "a=" & a
Debug.Print "b=" & b
End Sub

变量声明写在过程里,所以两个变量的生命在过程结束时终止,下次运行应该是全新的变量。可是b的值却被一次次记录下来,b的生命没有因为过程结束而终止。于是b成了这个过程挥之不去的鬼魂。
请问如何清除这个b的值?虽然可以在过程最后写b=0,那静态变量还有什么意义呢?
最佳答案
2013-6-1 12:03
silenthunter 发表于 2013-6-1 11:58
你好。即是说:这些变量类型中途是无法修改的?

在各自适用的范围内是不能修改的。

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-6-1 11:35 | 显示全部楼层
看看以下解释,就应该清楚了


1、PublicPrivate一般用于定义全局变量,也可以在类中使用。
1-1、区别在于:[Public]前者定义的是公共变量,如果在一个模块当中使用,那么整个应用程序都能使用它所定义的变量,如果在类中使用,那么它就是一个共有属性。
[Private]而后者定义的是私有变量,如果在一个模块中使用,那么只有这个模块才能访问到它所定义的变量,如果在类中使用,那么它就是一个私有属性。

2、DimStatic一般在过程(Sub或者Function)内部使用,它们所定义的变量都只能在过程内部被访问。
2-1、区别在于:[Dim]前者定义的是动态变量,过程一旦结束,该变量所占有的内存就会被系统回收,而变量所储存的数据就会被破坏。
[Static]后者定义的是静态变量,这意味着在过程结束后这个变量所占有的内存不会被回收,数据当然也不会被破坏了,这样当你下次再调用该过程的时候,数据就依然存在。
相比之下,Public和Static都有保留数据不被破坏的作用,但是,前者适合于那些所有过程都可能访问到的变量,而后者则把变量的作用范围缩在最小(只在该过程内能被访问)。

回复

使用道具 举报

 楼主| 发表于 2013-6-1 11:44 | 显示全部楼层
那么的帅 发表于 2013-6-1 11:35
看看以下解释,就应该清楚了

public定义的全局变量和dim定义的模块级变量,只有关闭excel才会消失。或者有不关闭excel也能让它消失的办法,但我不知道。

请问static定义的变量,也要关闭excel才会消失吗?
回复

使用道具 举报

发表于 2013-6-1 11:48 | 显示全部楼层
silenthunter 发表于 2013-6-1 11:44
public定义的全局变量和dim定义的模块级变量,只有关闭excel才会消失。或者有不关闭excel也能让它消失的办 ...

重置变量值或者关闭EXCEL
回复

使用道具 举报

发表于 2013-6-1 11:48 | 显示全部楼层
silenthunter 发表于 2013-6-1 11:44
public定义的全局变量和dim定义的模块级变量,只有关闭excel才会消失。或者有不关闭excel也能让它消失的办 ...

如果不需要保留变量,可以定义成其他类型的变量。
回复

使用道具 举报

 楼主| 发表于 2013-6-1 11:54 | 显示全部楼层
那么的帅 发表于 2013-6-1 11:48
如果不需要保留变量,可以定义成其他类型的变量。

请问如何定义成其它类型的变量?全局、模块、静态变量看起来已经是最高级别了,重新定义变量的句子写在哪里?写什么?
回复

使用道具 举报

发表于 2013-6-1 11:56 | 显示全部楼层
silenthunter 发表于 2013-6-1 11:54
请问如何定义成其它类型的变量?全局、模块、静态变量看起来已经是最高级别了,重新定义变量的句子写在哪 ...

我说的定义其他类型变量,不是中途修改。
而是在编写代码前,就要根据变量的使用范围和需要来定义不同的类型。而不是重新定义。
回复

使用道具 举报

 楼主| 发表于 2013-6-1 11:58 | 显示全部楼层
那么的帅 发表于 2013-6-1 11:56
我说的定义其他类型变量,不是中途修改。
而是在编写代码前,就要根据变量的使用范围和需要来定义不同的 ...

你好。即是说:这些变量类型中途是无法修改的?
回复

使用道具 举报

发表于 2013-6-1 12:03 | 显示全部楼层    本楼为最佳答案   
silenthunter 发表于 2013-6-1 11:58
你好。即是说:这些变量类型中途是无法修改的?

在各自适用的范围内是不能修改的。

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 13:31 , Processed in 0.138164 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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