代码之家  ›  专栏  ›  技术社区  ›  Przemyslaw Remin

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

  •  0
  • Przemyslaw Remin  · 技术社区  · 5 年前

    当宏完成时,数组变量值能否保持不变?我声明了一个全局变量:

    Option Explicit
    Public Arr2D As Variant
    
    Public Sub ReadDataToArr()
        Arr2D = [MyNamedRange].Value
    End Sub
    

    但是一旦宏完成 Arr2D 变得脱离上下文并且 arr2d gets empty.我希望在工作簿打开时读取所有数组变量的数据,并在任何我想要的场合使用它们,而不必每次都声明和填充它们。

    更新 。为什么我认为它是空的?为 arr2d variable添加手表。

    当我处于上面宏的调试模式时(按F8键),我会看到: enter image description here

    当我用F8键点击宏的末尾时,我会看到: enter image description here

    再次更新。 我注意到一些对我来说很奇怪的事情。当我在调试模式下第二次运行上述宏时(初始化值后,变量脱离上下文后),然后在宏的第一行中,变量立即变为“填充”值,并在上下文中。所以也许这就是为什么在评论中产生分歧的原因。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Pᴇʜ    5 年前
    Option Explicit
    
    Public test As Variant
    
    Sub a()
        test = 5
    End Sub
    
    Sub b()
        MsgBox test
    End Sub
    
    首次运行 a 然后运行 b 它将输出 5 如预期。

    变量< test 会一直坚持到你跑 End 或按 stop vbe中的按钮。


    请注意,如果变量 test was initialized,则应在每个过程中进行测试。

    例如

    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 之后。这样它就会自动重新初始化。