Microsoft Lab
全部软件
Excel变量(Variables)约 3 分钟

Life of Variables 变量的存活时间

重点内容


适用版本

桌面版通用(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 变量关闭 Excel 后还会记得上次的值,实际上关闭工作簿或按 Reset 就会清空
  • 把 Static 和 EP02 的 Public(跨模块共用)搞混——Static 管的是「跨执行保留值」,Public 管的是「跨模块能不能读到」,是两个不同的概念

Sources

Blog / Website:

  1. Life of Variables
只记在你的浏览器里,换设备不会同步。