2015-05-25 72 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 

一旦你初始化它,你应该能够在其他程序中使用它。