2015-10-05 63 views
2

沒有其他答案似乎適用於我,因此我正在訴諸一個所有人都認爲遇到問題的問題。簡單的東西,除VBA之外的任何其他語言。我只想初始化一個全局的字符串數組,並在我的主分支中使用它。在Visual Basic編輯器中聲明全局數組

下面是test1的,我只是想從一個公共函數返回它:

Public Function effthis1() As String() 
    ReDim effthis1(0 To 10) 
    myStr = "a b c d e f g h i j k" 
    strsplit = Split(myStr) 

    j = LBound(effthis) 
    For Each word In strsplit 
     effthis1(j) = word 
     j = j + 1 
    Next 

End Function 

Sub test1() 
    testStr = effthis1(4) 
    MsgBox testStr 
End Sub 

下面是測試2,我用的是被主要子內調用子嘗試:

Public effthis2() As String 

Sub declareMyArray() 

effthis2(0) = "a" 
effthis2(1) = "b" 
effthis2(2) = "c" 
effthis2(3) = "d" 
effthis2(4) = "e" 
effthis2(5) = "f" 
effthis2(6) = "g" 
effthis2(7) = "h" 
effthis2(8) = "i" 
effthis2(9) = "j" 
effthis2(10) = "k" 

End Sub 

Sub test2() 
    declareMyArray 
    MsgBox effthis2(4) 
End Sub 

MSDN是根本沒有幫助。由於提前,喬治

+0

必須在第一個子或函數之前在頂部聲明它 – psychicebola

回答

1

在第二例子中,你必須分配給它之前的陣列的大小分配,因此它更改爲:

ReDim effthis2(10) 

effthis2(0) = "a" 
effthis2(1) = "b" 
... 

(A公共陣列還必須是一個模塊內)

+0

在子test2()行上產生編譯錯誤,指出未定義子或函數。 –

+1

我複製/粘貼示例2到一個新模塊中,添加'ReDim effthis2(10)'作爲'declareMyArray'的第一行運行'test2'並且它工作正常。 –

+1

我把這一切都回來了,工作真棒! –

2

在第一個示例中,您必須聲明該變量,那麼無需運行循環就可以獲取該字符串。

Public Function effthis1(j As Integer) As String 
    Dim strsplit() As String 
    myStr = "a b c d e f g h i j k" 
    strsplit = Split(myStr) 

    effthis1 = strsplit(j) 

End Function 

Sub test1() 
    testStr = effthis1(4) 
    MsgBox testStr 
End Sub 

編輯:

每您的評論則teststr一定是你加載整個數組的數組,其中:如果你想在任何子使用的變量或函數你

Public Function effthis1() As String() 

    myStr = "a b c d e f g h i j k" 
    effthis1 = Split(myStr) 

End Function 

Sub test1() 

    teststr = effthis1 
    MsgBox teststr(4) 
End Sub 
+0

用我的示例代碼,我打算msgbox使用公共數組的第4個索引,而不是將其用作額外的輸入參數。雖然,你的代碼是一個方便的解決方法,我將來會記錄和使用。謝謝! –