scratch全局变量和布局变量有什么区别_VBA中变量作用范围的详细解读

be871794eef5eaa43465ac1b026bf065.png

大家好,今天继续讲解类和类模块应用,今日讲解第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

3006c40ee1dd35282ea8c0eda05376b8.png

e6c622f60e367efc23a34e85d59b742f.png

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

e9d22d3b2522e6ae939e92e79b6360d1.png

645e9d7a25372ca32da41d7bb9d9453d.png

22c082e39f4957e2a57f2e42ae26c401.png

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

4ea8bea1250c5a339707ac9df33359a8.png

我们仅对最后一次的结果进行分析:在最后一次点击按钮时,K是过程变量为1,ZZZ的内存中存在的

已经存在数值为1再加上1为2;VVV是全局变量这是第四次执行所以是4,yyy 是模块级别变量,由于在模块1中是执行的第三次操作,所以是3。

今日内容回向:

1 DIM StaticPublicPrivate 含义是否理解?

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

eb04d60ca0f20e9fcf5efa12556429e2.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值