VBA - 公共数组错误 - 下标超出范围

时间:2015-05-25 17:22:04

标签: arrays vba excel-vba excel

我想声明一个公共数组,创建它然后在另一个sub中使用它。 这是我写的内容的简要说明:

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 个答案:

答案 0 :(得分:2)

array1()中的变量Sub Create_Array作用于该过程 - 基本上它是一个只能在该过程中访问的局部变量,并且它碰巧与其他地方声明的另一个公共字段具有相同的名称,因此发生的事情是Show_Some_Index正在处理一个尚未初始化的数组。

Dim用于声明变量。如果您要重新定义范围内的数组,请使用ReDim关键字。

更好的方法是使用返回数组的函数,而不是依赖于全局变量。

答案 1 :(得分:2)

  

我想声明一个公共数组,创建它然后在另一个sub中使用它。

在这种情况下,从代码中删除Dim语句。除了Mat解释之外,还有另一种使代码工作的方法

方式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

第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

初始化后,您应该可以在其他程序中使用它。