龙空技术网

VBA中变量的作用范围

VBA语言専攻 109

前言:

现时大家对“静态变量的作用域”都比较注意,咱们都需要剖析一些“静态变量的作用域”的相关内容。那么小编在网络上搜集了一些对于“静态变量的作用域””的相关资讯,希望小伙伴们能喜欢,朋友们快快来学习一下吧!

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

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

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

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

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

理解其中的含义:

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

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

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

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

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

理解其中的含义:

① [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 上面再次点击第三个按钮的结果,请分析。

标签: #静态变量的作用域