2009-08-21 18 views
1

Hallo alle ich einen Fehleröffentlicher Dynamic Array gibt Fehler

Run-time error '9': 
Subscript out of range 

mit dem folgenden Code

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 

, wenn ich das Array DeCare ist immer

Public newarray(4) As string 

es funktioniert, aber ich möchte ein dynamisches Array deklarieren. Bitte helfen Sie. Vielen Dank.

Antwort

8

Sie können die Array-Größe zuweisen ReDim unter Verwendung:

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 

Dies wird Ihre gesamte Array neu zu definieren. Wenn Sie den Inhalt des Arrays beibehalten und nur die Größe ändern müssen, können Sie ReDim Preserve newarray(4) verwenden.

Ihr Code geht davon aus, dass Arrays 1-basiert sind. Dies kann 0 sein (festgelegt durch die Option in VB). Um sicherzustellen, dass Ihr Code funktioniert unabhängig von dieser Option sollten Sie LBound/UBound für die Grenzen Ihres Zählers verwendet werden:

int1 = LBound(newarray) 

    Do 

     newarray(int1) = int1 * 5 

     int1 = int1 + 1 


    Loop Until int1 > UBound(newarray) 
+2

Sie können die Indizes in der ReDim-Anweisung angeben wie 'ReDim newArray (1 bis 5)' –

+0

Vielen Dank! Es hilft. – Yoga