当 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
之后。这样它就会自动重新初始化。
宏完成后数组变量值能否保留?我已经声明了一个全局变量:
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
之后。这样它就会自动重新初始化。