Public Dynamic Array返回错误

Yog*_*oga 1 excel vba excel-vba

大家好,我收到了一个错误

Run-time error '9':
Subscript out of range 
Run Code Online (Sandbox Code Playgroud)

使用以下代码

Public newarray() As String

Sub test1() 
    Dim int1 As Integer 
    int1 = 0
    Do 
        int1 = int1 + 1 
        newarray(int1) = int1 * 5     
    Loop Until int1 > 3
End Sub
Run Code Online (Sandbox Code Playgroud)

当我决定阵列

Public newarray(4) As string
Run Code Online (Sandbox Code Playgroud)

它工作,但我希望声明一个动态数组.请帮忙.谢谢.

awe*_*awe 8

您可以使用ReDim以下命令分配数组大小:

Public newarray() As String

Sub test1() 

    Dim int1 As Integer 
    ReDim newarray(4)

    int1 = 0

    Do 

        int1 = int1 + 1 

        newarray(int1) = int1 * 5 

    Loop Until int1 > 3

End Sub
Run Code Online (Sandbox Code Playgroud)

这将重新定义整个阵列.如果需要保留数组的内容,只需更改大小,即可使用ReDim Preserve newarray(4).

您的代码假定数组是基于1的.这可以是0(基于VB中的选项设置).无论此选项如何,为确保您的代码能够正常工作,您应该使用LBound/ UBound作为计数器的限制:

    int1 = LBound(newarray)

    Do 

        newarray(int1) = int1 * 5 

        int1 = int1 + 1 


    Loop Until int1 > UBound(newarray)
Run Code Online (Sandbox Code Playgroud)

  • 您可以在ReDim语句中指定索引,如`ReDim newarray(1 To 5)` (2认同)