VBA公共阵列:如何?

时间:2009-10-31 12:45:31

标签: arrays vba

所以今天的问题让我生气,因为这应该很容易,我找不到答案:

如何在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不喜欢它......

那我该怎么办?

非常感谢:)

编辑:问题更多的是将值赋予数组而不是声明它

7 个答案:

答案 0 :(得分:7)

将数组声明为应用程序中的subs的全局:

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

方法2:将数组传递给sub。使用ParamArray。

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必须是最后一个参数。

答案 1 :(得分:4)

您使用的是错误的类型。 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

这样做的好处是您不需要初始化全局变量以及在每次函数调用时再次创建数组的缺点。

答案 2 :(得分:0)

试试这个:

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

不幸的是,网上找到的代码是VB.NET而不是VBA。

答案 3 :(得分:0)

这对我有用,似乎是全球性的:

Dim savePos(2 To 8) As Integer

并且可以从每个sub调用它,例如获取第一个元素:

MsgBox (savePos(2))

答案 4 :(得分:0)

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

答案 5 :(得分:0)

好吧,基本上我发现您可以声明该数组,但是当您设置它时,vba会显示一个错误。

所以我放了一个特殊的sub来声明全局变量和数组,例如:

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

每当我想使用数组时,我都会先调用sub,以防万一

call set_values

Msgbox example(5)

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

答案 6 :(得分:0)

'^'