【原创】VBA学习笔记(302)VBA的变量的作用范围 与 生命周期

1变量的声明范围(作用范围)

1.1 全局变量 /跨模块级变量(模块外)

  • public

1.2 模块级变量(模块内,过程外)

  • public
  • dim
  • private

1.2.1 模块级变量

  • 模块级变量,模块里的各个程序都可以访问和修改
  • 看例子,因为声明a为模块级变量,先运行前面的sub,对后面的sub实际有影响
Dim a

Sub ponymatest1()
    a = 101
End Sub

Sub ponymatest2()
    a = 102
End Sub

Sub ponymatest3()
    Debug.Print a
End Sub

1.3 过程级变量(过程内)

  • dim 
  • static

2 变量的生命周期 (受 声明 作用域的影响)

2.1 全局变量  / 跨模块级变量

  • public 定义的变量,随便可能在模块内一直生效,或跨模块都生效
  • 生命周期:当前模块所属的工作簿EXCEL关闭,变量就释放清除

2.2 模块级变量

  • 声明为模块级变量的变量在模块内,一直都生效
  • 生命周期: 当前模块所属的工作簿EXCEL关闭,变量就释放清除

2.3 过程级变量

  • 过程级变量的生命周期只在本过程内
  • 这个过程开始时创建
  • 这个过程结束时变量就被释放了

2.4 static 静态变量(特殊在于:作用域是过程级变量-不会被外面的程序访问,但是生命周期是模块级)

  • static 静态变量,当前模块所属的工作簿关闭后(关闭工程),就释放
  • 每次更新的值也可以被保留

2.5 static变量和 模块级变量的区别

  • 模块级变量和static变量,都是一直在工作簿关闭前都生效。都大于一个sub的生命周期
  • 差别在于,模块级变量,会被多个sub影响
  • 而static变量,虽然生命周期长,但仍然只是一个 过程级变量

Public x
Dim y
Private z

Sub test108()

For i = 1 To 3
    Debug.Print "第" & i & "次"
    test1008
    test1009
    test1010
    Debug.Print
Next
End Sub

Sub test1008()

Dim a As Byte
Static b As Byte

'别在测试时重新赋值,至少赋值也不应该在这个sub内,而应该有个专门赋初值的地方
'a = 1
'b = 1
'x = 1
'y = 1
'z = 1


a = a + 1
b = b + 1
x = x + 1
y = y + 1
z = z + 1

Debug.Print " a= " & a;
Debug.Print " b= " & b;
Debug.Print " x= " & x;
Debug.Print " y= " & y;
Debug.Print " z= " & z

End Sub


Sub test1009()
a = a + 1
b = b + 1
x = x + 1
y = y + 1
z = z + 1

Debug.Print " a= " & a;
Debug.Print " b= " & b;
Debug.Print " x= " & x;
Debug.Print " y= " & y;
Debug.Print " z= " & z
End Sub


Sub test1010()
a = a + 1
b = b + 1
x = x + 1
y = y + 1
z = z + 1

Debug.Print " a= " & a;
Debug.Print " b= " & b;
Debug.Print " x= " & x;
Debug.Print " y= " & y;
Debug.Print " z= " & z
End Sub
  • 可以多运行test108几次
  • 并尝试运行后关闭这个代码所属的EXCEL,再打开看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值