Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 公共动态数组返回错误_Vba_Excel - Fatal编程技术网

Vba 公共动态数组返回错误

Vba 公共动态数组返回错误,vba,excel,Vba,Excel,大家好,我有个错误 Run-time error '9': Subscript out of range 使用以下代码 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-time error '9':
Subscript out of range 
使用以下代码

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
当我对数组进行去计数时

Public newarray(4) As string

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

您可以使用
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
这将重新定义整个阵列。如果需要保留数组的内容,只需更改大小,可以使用
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)

您可以使用
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
这将重新定义整个阵列。如果需要保留数组的内容,只需更改大小,可以使用
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)

您可以在ReDim语句中指定索引,如
ReDim newarray(1到5)
您可以在ReDim语句中指定索引,如
ReDim newarray(1到5)