代码之家  ›  专栏  ›  技术社区  ›  Julien

VBA公共数组:如何使用?

  •  8
  • Julien  · 技术社区  · 15 年前

    如何在VBA中声明公共数组?我使用的是一个带有字母A,B,C,。。。因为我使用的是Excel单元格,我不想在我创建的每个函数中都声明它,对吗? 我试着先在网上查看,我读到你必须在不同的模块中声明它,所以我就是这么做的:

    Public colHeader As String
    colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
    

    但是Visual Basic不喜欢它。。。

    编辑:问题更多的是向数组赋值,而不是声明数组

    6 回复  |  直到 13 年前
        1
  •  10
  •   Rody Oldenhuis    12 年前

    在应用程序中的子节点中将数组声明为全局数组:

    Public GlobalArray(10) as String
    GlobalArray = Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L')
    
    Sub DisplayArray()
        Dim i As Integer
    
        For i = 0 to UBound(GlobalArray, 1)
            MsgBox GlobalArray(i)
    
        Next i
    End Sub
    

    Sub DisplayArray(Name As String, ParamArray Arr() As Variant)
        Dim i As Integer
    
        For i = 0 To UBound(Arr())
            MsgBox Name & ": " & Arr(i)
        Next i
    End Sub
    

    ParamArray必须是最后一个参数。

        2
  •  7
  •   Heinzi    15 年前

    你用错了类型。这个 Array(...) 函数返回一个 Variant ,而不是 String

    因此,在模块的声明部分(不需要是不同的模块!),您可以定义

    Public colHeader As Variant
    

    Workbook_Open 事件)使用

    colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
    

    另一个(简单的)替代方法是创建一个返回数组的函数,例如

    Public Function GetHeaders() As Variant
        GetHeaders = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
    End Function
    

    这样做的优点是不需要初始化全局变量,缺点是每次函数调用时都会再次创建数组。

        3
  •  1
  •   sskerui    4 年前
    Option Explicit
    
    Public colHeader
    
    Sub test()
    
        ReDim colHeader(11)
        colHeader = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
    End Sub
    
    Sub verify_test()
    
        Dim i As Integer
        For i = LBound(colHeader) To UBound(colHeader)
            MsgBox "colHeader( " & i & " ) = " & colHeader(i)
        Next
    End Sub
    
        4
  •  0
  •   Chris Van Opstal    15 年前

    Dim colHeader(12)
    colHeader = ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
    

    不幸的是,在线找到的代码是VB.NET而不是VBA。

        5
  •  0
  •   Jaanus    12 年前

    这对我来说很有效,似乎是全球性的:

    Dim savePos(2 To 8) As Integer
    

    从每个子元素调用它,例如获取第一个元素:

    MsgBox (savePos(2))
    
        6
  •  0
  •   user28864    12 年前
    Option Explicit
         Public myarray (1 To 10)
         Public Count As Integer
         myarray(1) = "A"
         myarray(2) = "B"
         myarray(3) = "C"
         myarray(4) = "D"
         myarray(5) = "E"
         myarray(6) = "F"
         myarray(7) = "G"
         myarray(8) = "H"
         myarray(9) = "I"
         myarray(10) = "J"
    Private Function unwrapArray()
         For Count = 1 to UBound(myarray)
           MsgBox "Letters of the Alphabet : " & myarray(Count)
         Next 
    End Function
    
        7
  •  0
  •   Juan Joya    6 年前

    所以我放了一个特殊的子元素来声明全局变量和数组,比如:

    Global example(10) As Variant
    
    Sub set_values()
    
    example(1) = 1
    example(2) = 1
    example(3) = 1
    example(4) = 1
    example(5) = 1
    example(6) = 1
    example(7) = 1
    example(8) = 1
    example(9) = 1
    example(10) = 1
    
    End Sub
    

    call set_values
    
    Msgbox example(5)
    

    也许这不是最正确的方法,但我希望它对你有用