2009-10-31 19 views
5

Bugünkü sorun beni kızdırıyor çünkü bu kolay olmalı ve cevabı bulamadım:VBA Public Array: Nasıl Yapılır?

VBA'da genel bir dizi nasıl bildirilir? A, B, C harfleriyle bir dizi kullanıyorum ... çünkü Excel hücreleri ile çalışıyorum ve bunu yarattığım her işlevin içinde bildirmek istemiyorum, değil mi? Ben ilk web üzerinde bakmaya çalıştık ve ben farklı bir modülde beyan etmek zorunda olduğunu okudum, o ı ne yaptık yani:

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

Ama Visual Basic bunu sevmez ..

Peki ne yapmalıyım?

Teşekkür çok :)

Düzenleme bulunuyor: Sorun bu deneyin o

cevap

3

Declare dizi:

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 

Yöntem 2: alt için bir dizi geçirin. ParamArray kullan. ParamArray, son parametre olmalıdır.

+0

+1 Bu benim için çalıştı –

+2

Örnek 1'in ilk satırı, Access 2007'de çok can sıkıcı bir derleme hatası verir. –

0

ilan etmek daha diziye değerleri asigning hakkında fazlasıdır:

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

Maalesef kodu bulunan çevrimiçi VB oldu .NET VBA değil. Bir uygulamada subs boyunca küresel olarak

1

Yanlış türde kullanıyorsunuz. Array(...) işlevi, String değil, Variant döndürür.

Böylece, sizin modülünün bildirimi bölümünde (farklı modül olması gerekmez!), Sen, örneğin (program kodunun başlangıcına yere

Public colHeader As Variant 

ve tanımlamak Workbook_Open etkinliği)

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

Başka (basit) alternatif kullanıma hazır hale getirmeniz dizi döndüren bir işlev, örneğin oluşturmak olacaktır

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

Bu gibi bir şey küresel değişkeni ve dizi her işlev çağrısı üzerine tekrar oluşturulur dezavantajı başlatmak gerekmez bir avantaja sahiptir.

Dim savePos(2 To 8) As Integer 

Ve ilk elemanı almak örneğin, her alt gelen diyebilirsiniz: için

MsgBox (savePos(2)) 
0

, küresel iş gibi görünüyor Statik tip bilgileri tutmak.
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