【分享成果,随喜正能量】好的东西大都是时间的沉淀,这就是经验的价值。尽所能做好现在的事,瞄准方向,专注当下,一步一个脚印,你只需要下定决心,开始学习。相信这样达到的未来,是扎实可靠的。

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

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

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

变量的用法和意义(变量的作用范围)(1)

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

大家好,今天继续讲解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

变量的用法和意义(变量的作用范围)(2)

变量的用法和意义(变量的作用范围)(3)

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

变量的用法和意义(变量的作用范围)(4)

变量的用法和意义(变量的作用范围)(5)

变量的用法和意义(变量的作用范围)(6)

此时我们再次点击一下第一个按钮看看执行结果:

变量的用法和意义(变量的作用范围)(7)

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

今日内容回向:

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

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

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

变量的用法和意义(变量的作用范围)(8)

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

① 7→1→3→2→6→5或者7→4→3→2→6→5。

② 7→8

各套教程内容简介:

第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解

第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程

第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)

第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解

第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解

第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用

第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解

第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用

,