当VBA宏完成时,数组变量值是否仍然存在

问题描述 投票:0回答:1

当宏完成时,数组变量值是否仍然存在?我已经声明了一个全局变量:

Option Explicit
Public Arr2D As Variant

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

但是一旦宏完成,那么Arr2D就会脱离背景而Arr2D会变空。我想在工作簿打开时读取所有数组变量的数据,并在我想要的任何场合使用它们,而不是每次都声明和填充它们。

更新。为什么我认为它是空的?添加一个关于Arr2D变量的监视。

当我在上面的宏的调试模式(击中F8)时,我看到:enter image description here

当我带着F8击中宏端时,我看到了:enter image description here

再次更新。我注意到一些奇怪的东西。当我在调试模式下第二次运行上面的宏时(在初始化值之后,在变量离开上下文之后),然后立即在宏的第一行,变量变为“填充”值,并在上下文中。所以也许这就是为什么在评论中引起分歧的原因。

arrays excel vba variable-declaration
1个回答
2
投票
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。这样它就会自动重新初始化。

© www.soinside.com 2019 - 2024. All rights reserved.