2009-10-31 12 views
5

Das heutige Problem macht mich wütend, denn das sollte einfach sein und ich kann die Antwort nicht finden:VBA Public Array: wie?

Wie deklariert man ein öffentliches Array in VBA? Ich verwende ein Array mit den Buchstaben A, B, C, ..., weil ich mit Excel-Zellen arbeite, und ich will es nicht in jeder Funktion erklären, die ich erstelle, oder? Ich habe versucht, zuerst im Web zu sehen und ich las, dass Sie es in einem anderen Modul zu erklären haben, so dass das, was ich getan habe:

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

Aber Visual Basic nicht mag es .. .

Also was soll ich tun?

Dank viel :) ist

Edit: das Problem mehr über ist es, Werte zu dem Array zuweist, als es diese

Antwort

3

Deklarieren Array als global über subs in einer Anwendung:

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 

Methode 2: Übergeben ein Array sub. Verwenden Sie 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 muss der letzte Parameter sein.

+0

+1 für statische Information beibehalten. –

+2

Erste Zeile von Beispiel 1 gibt einen sehr ärgerlichen Kompilierungsfehler in Access 2007. –

0

versuchen zu erklären:

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

Leider war der Code gefunden Online-VB .NET nicht VBA.

1

Sie verwenden den falschen Typ. Die Array(...)-Funktion gibt eine Variant, nicht eine String zurück.

Somit wird in dem Deklarationsbereich Ihres Moduls (es muss nicht ein anderes Modul sein!), Sie

Public colHeader As Variant 

und irgendwo am Anfang des Programmcodes definieren (zum Beispiel in der Workbook_Open Ereignis) Sie initialisieren es mit

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

eine weitere (einfache) Alternative wäre, eine Funktion zu erstellen, die das Array zurückgibt, zB so etwas wie

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

Dies hat den Vorteil, dass Sie nicht über die globale Variable initialisieren müssen, und den Nachteil, dass das Array erstellt wird wieder an jedem Funktionsaufruf.

0

Das ist für mich gearbeitet, scheint als global zu arbeiten: es von jedem Unter nennen kann

Dim savePos(2 To 8) As Integer 

Und , zum Beispiel erstes Element erhalten:

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