2009-10-31 236 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