当 VBA 宏完成时,数组变量值能否保留

Can the array variable values persist when VBA macro finishes

宏完成后数组变量值能否保留?我已经声明了一个全局变量:

Option Explicit
Public Arr2D As Variant

Public Sub ReadDataToArr()
    Arr2D = [MyNamedRange].Value
End Sub

但是一旦宏完成,Arr2D 就会脱离上下文并且 Arr2D 变为空。我想在工作簿打开时将数据读取到所有数组变量,并在我想要的任何场合使用它们,而无需每次都声明和填充它们。

更新。为什么我觉得它是空的?为 Arr2D 变量添加监视。

当我在上述宏的调试模式下(按 F8)时,我看到了:

当我用 F8 键点击宏结束时,我看到了这个:

再次更新。我发现了一些奇怪的事情。当我 运行 上面的宏第二次处于调试模式时(在初始化值之后,并且在变量脱离上下文之后),然后立即在宏的第一行中,变量变为 "filled" 与值,并在上下文中。所以也许这就是评论中出现分歧的原因。

Option Explicit

Public test As Variant

Sub a()
    test = 5
End Sub

Sub b()
    MsgBox test
End Sub

首先 运行 a 然后 运行 b 它会按预期输出 5

变量 test 将持续存在,直到您 运行 End 或在 VBE 中按下 stop 按钮。


请注意,如果您的变量 test 已初始化,您应该在每个过程中进行测试。

例如

Option Explicit

Public Arr2D As Variant

Sub InitArr2D()
    Arr2D = [MyNamedRange].Value
End Sub

Sub ProcedureUsingArr2D()
    If Arr2D Is Nothing Then
        InitArr2D
    End If

    Debug.Print Join(WorksheetFunction.Transpose(Arr2D), ",")
End Sub

如果您不测试您的变量可能 Nothing 在发生 运行 时间错误并且您按下 End 之后。这样它就会自动重新初始化。