2009-10-31 231 views
5

所以今天的问题是让我疯了,因为这应该是很容易,我无法找到答案:VBA Public Array:如何?

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

那我该怎么办?

感谢的很多:)

编辑:这个问题更多的是asigning值的阵列,而不是将它声明

回答

3

申报阵列横跨潜艇全球在一个应用程序:

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:传递数组子。使用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必须是最后一个参数。

+0

+1保持静态类型信息。 – 2009-10-31 21:46:00

+2

示例1的第一行给出了Access 2007中非常烦人的编译错误。 – 2012-05-16 14:34:56

0

试试这个:

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

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

1

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

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

0

这个工作对我来说,似乎工作作为全球:

Dim savePos(2 To 8) As Integer 

而且从各个子可以调用它,例如获得第一个元素:

MsgBox (savePos(2)) 
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