2016-10-03 2 views
0

Ich arbeite in der VBA-Zuweisung und muss ein Array erstellen, das die Werte 16 bis 9 in umgekehrter Reihenfolge automatisch auffüllt. Dies ist mein aktueller Code:Problem mit verschachteltem For/Next-Loop und Füllfeld

nTeams = 16      ' variable to enable other size brackets 

ReDim arrBracket(nTeams/2) '<< ReDim array to appropriate size 


'***** Fill the array where element 1 of the array holds the value of the 
'  lowest seed (e.g. if 16 teams, element 1 has a value of 16) 

' vvv your For/Next loop below 
Dim nTeams2 As Integer ' Place holder for For/Next loop 

For i = 1 To (nTeams/2) 
    For nTeams2 = nTeams To (nTeams/2) Step -1 
     arrBracket(i) = nTeams2 
    Next nTeams2 
Next i 

Das Problem ist, dass es nur noch wird das Array mit der Nummer 8 für jede der 8 Füllelemente, anstatt 16, 15, 14, 13, usw.

Hier ist die Schleife mein Professor enthalten, die Arbeit zu überprüfen:

For i = LBound(arrBracket()) To UBound(arrBracket()) ' loops through the array 
    Debug.Print i & " vs " & arrBracket(i)    ' sends array info to immediate window 
Next i 
+0

Sie müssen die innere Schleife nicht verwenden. Was passiert, ist, dass Sie der gleichen Position im Array mehrmals verschiedene Werte zuweisen. Der letzte ist immer 8. – mathiasfk

Antwort

0

Sie brauchen keine verschachtelten Schleifen für diese Option setzen. Sie können das nur mit innerer for-Schleife tun. Bitte schön.

nTeams = 16      ' variable to enable other size brackets 

ReDim arrBracket(nTeams/2) '<< ReDim array to appropriate size 

Dim i As Integer 
Dim nTeams2 As Long 

i = 0 
For nTeams2 = nTeams To (nTeams/2) Step -1 
    arrBracket(i) = nTeams2 
    i = i + 1 
Next nTeams2 
+1

Ändern Sie Ihre Zeile von "i = 1" zu "i = 0", sonst wird Ihr Code "Index außerhalb des Bereichs" erhalten, da Sie zu arrBracket (9) kommen, das nicht existiert –

+0

Du hast recht. Vielen Dank. –

Verwandte Themen