2009-08-21 6 views
1

Bonjour à tous j'obtiens une erreurDynamic Array publique renvoie l'erreur

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

avec le code suivant

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 

quand je DeCare le tableau

Public newarray(4) As string 

cela fonctionne, mais je souhaite déclarer un tableau dynamique. S'il vous plaît aider. Je vous remercie.

Répondre

8

Vous pouvez affecter la taille du tableau à l'aide 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 

Cela va redéfinir votre tableau entier. Si vous avez besoin de conserver le contenu de la matrice, et juste changer la taille, vous pouvez utiliser ReDim Preserve newarray(4).

Votre code suppose que les baies sont basées sur 1. Cela peut être basé sur 0 (défini par l'option dans VB). Pour être sûr que votre code fonctionne indépendamment de cette option, vous devez utiliser LBound/UBound pour les limites de votre compteur:

int1 = LBound(newarray) 

    Do 

     newarray(int1) = int1 * 5 

     int1 = int1 + 1 


    Loop Until int1 > UBound(newarray) 
+2

Vous pouvez spécifier les indices dans l'instruction ReDim comme 'ReDim newArray (1 à 5)' –

+0

Je vous remercie! Ça aide. – Yoga