EP03. “Life of Variables 变量的存活时间”
🔒 登录后可标记已读- 用
Dim声明的变量,程序(Sub)跑完就会被销毁,下次再执行又是从头开始 - 这篇讲怎么用
Static关键字,让变量的值在两次执行之间被保留下来 - 前置知识:EP02 的变量作用域概念
- 学完能做出「每按一次按钮,数字累加 1」这类需要记住上次结果的效果
重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
问题:用 Dim 每次都会重置
Sub Increment()
Dim x As Integer
x = x + 1
MsgBox x
End Sub
在工作表上加一个按钮绑定这段代码,每次点击都会弹出 1——因为 Dim 声明的变量在 Sub 跑完就被销毁了,下次执行时 VBA 会重新建立变量 x,从 0 开始再加 1。
解法:把 Dim 换成 Static
Sub Increment()
Static x As Integer
x = x + 1
MsgBox x
End Sub
改成 Static 之后,每次点击按钮,x 会记得上一次的值,弹出的数字变成 1、2、3……依序累加。
📌 Static 变量会在按下 Reset(停止)按钮,或关闭工作簿时被销毁——不是永久保存,只是「跨程序执行之间」保留。
方法怎么选
| 关键字 | 变量值会不会保留 | 适合场景 |
|---|---|---|
Dim | 每次执行都重置 | 不需要记住上次结果的一般变量 |
Static | 保留到下次执行(关闭工作簿或按 Reset 才清空) | 需要累加、计数这类记住上次结果的场景 |
学完你会
- ✅ 分清楚
Dim和Static声明的变量,值会不会保留到下一次执行 - ✅ 用
Static做出「每按一次按钮,数字累加 1」这类效果 - ✅ 知道
Static变量什么时候会被清空(Reset 或关闭工作簿)
常见错误
- 用
Dim却期待变量的值能保留到下一次执行,结果每次都被重置成初始值 - 以为
Static变量关闭 Excel 后还会记得上次的值,实际上关闭工作簿或按 Reset 就会清空 - 把
Static和 EP02 的Public(跨模块共用)搞混——Static管的是「跨执行保留值」,Public管的是「跨模块能不能读到」,是两个不同的概念
Sources
Blog / Website: