2015-05-25 69 views
2

我想聲明一個公共數組,創建它,然後在另一個子組中使用它。 這是我寫的exapmle:VBA - 公共數組錯誤 - 下標超出範圍

Public array1() As String 

Sub Create_Array() 

Dim array1(1 To 4) As String 

array1(1) = "1" 
array1(2) = "2" 
array1(3) = "A" 
array1(4) = "B" 

End Sub 

Sub Show_Some_Index() 

Dim a As String 
a = array1(1) 
MsgBox (a) 

End Sub 

我得到錯誤9: 「下標超出範圍」。 找不到答案,我做錯了什麼?

回答

2

Sub Create_Array可變array1()的作用域是該程序 - 基本上它是一個局部變量就是這樣的過程中永遠只能訪問,碰巧有相同的名稱作爲另一個公共領域宣佈的其他地方,所以發生了什麼是Show_Some_Index工作關閉尚未初始化的數組。

Dim用於聲明變量。如果您的意思是重新定義範圍內的數組,請使用關鍵字ReDim


一個更好的方法是使用一個返回數組的函數,而不是依賴於全局變量。

+0

++解釋錯誤原因:) –

2

我想聲明一個公共數組,創建它,然後在另一個子組中使用它。

在這種情況下,請從您的代碼中刪除Dim聲明。而且什麼墊解釋說,這裏是另一種方式讓你的代碼工作

WAY 1

Public array1(1 To 4) As String 

Sub Create_Array() 
    array1(1) = "1" 
    array1(2) = "2" 
    array1(3) = "A" 
    array1(4) = "B" 

    Show_Some_Index 
End Sub 

Sub Show_Some_Index() 
    Dim a As String 
    a = array1(1) 
    MsgBox (a) 
End Sub 

WAY 2

Public array1(1 To 4) As String 

Sub Create_Array() 
    array1(1) = "1" 
    array1(2) = "2" 
    array1(3) = "A" 
    array1(4) = "B" 
End Sub 

Sub Show_Some_Index() 
    Create_Array 

    Dim a As String 
    a = array1(1) 
    MsgBox (a) 
End Sub 

一旦你初始化它,你應該能夠在其他程序中使用它。