龙空技术网

第二讲:变量的作用范围(域)的详细解读

VBA语言専攻 125

前言:

当前各位老铁们对“变量的作用域”大概比较关注,各位老铁们都想要了解一些“变量的作用域”的相关文章。那么小编同时在网络上汇集了一些关于“变量的作用域””的相关资讯,希望咱们能喜欢,小伙伴们快快来学习一下吧!

【分享成果,随喜正能量】得到需要的,是福;过多的贪求,反累。人生的需求如同吃饭,只能吃两碗的饭量,如果贪图饭菜的美味多吃两碗,不但不能正常享受多吃的好处,相反,倒会因为胃承受不了而带来痛苦。可见,非分的贪婪,得到未必就是享受。只会徒增烦恼与业力。。

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。

类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入,有必要理解这些抽象的理论知识。对象,类,过程,方法,属性,事件,接口,接口如何实现等等。掌握了这些理论,不仅对于VBA这种寄生语言的实质有所深入的理解,也对自然界的很多事物将同样有所感悟。目前,这套教程程序文件已经通过32位,64位两种office系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:第二讲:变量的作用范围(域)的详细解读

第二讲 变量的作用范围(域)的详细解读

大家好,今天继续讲解VBA中类的解读及应用,今日讲解第2讲:变量的作用范围(域)的详细解读。当你深入地学习VBA后,会发现VBA涉及到的内容非常之多,我们这讲讲解的是变量,在简单的VBA代码中你或许可以不必考虑变量的作用范围,但如果你做一个大型的程序,需要涉及到各个知识点的时候,就必须要考虑变量的作用范围了。

变量,因为声明的位置和方式不同,有着不同的作用范围,或者叫作用域。作用域是指变量在多大范围内能被代码识别。根据作用的范围不同,可以划分为过程级、模块级和全局变量。

1 过程级变量

在过程中声明,过程指的是一个Sub或Function,也包括后面提到的属性过程。通常用Dim或Static进行变量声明。

1) Dim声明的变量,只在该过程执行时存在,过程结束,变量的值也就消失了。

2) Static声明的变量称为静态变量,这个值在整个程序运行期间都存在。

理解其中的含义:

① [Dim] 是动态变量,过程一旦结束,该变量所占有的内存就会被系统回收,而变量所储存的数据就会被破坏。

② [Static] 是静态变量,这意味着在过程结束后这个变量所占有的内存不会被回收,数据当然也不会被破坏了,这样当你下次再调用该过程的时候,数据就依然存在。

2 模块级变量

对命名变量的整个模块所有过程都有效,对其它模块不可用。可以在模块顶部声明。

声明模块级变量用Private关键字和直接使用Dim没有区别。但推荐使用Private进行声明,这样可以与后面的全局变量区分开来。

3 全局变量

是对整个VBA工程的所有过程都有效的变量,使用Public关键字在标准模块的顶部来声明。

理解Public和Private的含义:

① [Public] 是公共变量,如果在一个模块当中使用,那么整个应用程序都能使用它所定义的变量,如果在类中使用,那么它就是一个共有属性。

② [Private] 是私有变量,如果在一个模块中使用,那么只有这个模块才能访问到它所定义的变量,如果在类中使用,那么它就是一个私有属性。

本讲用到的测试代码:

Sub mynzclass2_1() '第2讲变量的作用范围

Dim K As Integer

Static ZZZ As Integer

K = K + 1

ZZZ = ZZZ + 1

VVV = VVV + 1

YYY = YYY + 1

MsgBox "过程变量K值为: " & K & Chr(10) & "过程级别静态变量ZZZ值为:" & ZZZ & Chr(10) & "全局变量VVV值为:" & VVV & Chr(10) & "模块变量YYY值为:" & YYY

End Sub

Sub mynzclass2_2() '第2讲变量的作用范围

Dim K As Integer

Static ZZZ As Integer

K = K + 1

ZZZ = ZZZ + 1

VVV = VVV + 1

YYY = YYY + 1

MsgBox "过程变量K值为: " & K & Chr(10) & "过程级别静态变量ZZZ值为:" & ZZZ & Chr(10) & "全局变量VVV值为:" & VVV & Chr(10) & "模块变量YYY值为:" & YYY

End Sub

Sub mynzclass2_3() '第2讲 变量的作用范围

Dim K As Integer

Static ZZZ As Integer

K = K + 1

ZZZ = ZZZ + 1

VVV = VVV + 1

YYY = YYY + 1

MsgBox "过程变量K值为: " & K & Chr(10) & "过程级别静态变量ZZZ值为:" & ZZZ & Chr(10) & "全局变量VVV值为:" & VVV & Chr(10) & "模块变量YYY值为:" & YYY

End Sub

代码截图:在两个模块中我分别加入了过程Sub mynzclass2_1() Sub mynzclass2_2() Sub mynzclass2_3();同时在模块1的开始定义了全局变量VVV和模块变量YYY

这讲的内容比较有意思,下面我们看代码的运行:在工作表中,我分别给出了执行上述三个过程的按钮,我们每个按钮都执行一次看看结果:

我们仅对最后一次的结果进行分析:在最后一次点击按钮时,K是过程变量,为1;ZZZ已经在内存中存在,已经存在数值为1再加上1为2;VVV是全局变量,这是第四次执行所以是4;yyy 是模块级别变量,由于在模块1中是执行的第三次操作,所以是3。读者可以试着自己分析一下上述的结果。

今日内容回向:

1 DIM 、Static、Public、Private 含义是否理解?

2 上面再次点击第三个按钮的结果,请分析。

本讲内容参考程序文件:VBA-CLASS(1-28).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

【分享成果,随喜正能量】不要和别人攀比,学会不贪婪,不奢求,平和宁静,知足常乐。报一颗平常心,做自己能掌控的事,赚自己认知范围内的钱。不要报有天上会掉馅饼的想法,这是赌博人生,活在幻想世界里的人,终其一生只会碌碌无为,福慧没能积攒,修行没有进步,生死之轮又如何能解脱。。

标签: #变量的作用域 #静态变量的作用域 #变量包含哪两个方面的内容 #变量包含哪两个方面的内容和内容