Arrays - Grenzen
Unterstelle niemals untere Array Grenzen
Datenfeld Operationen sind ein weiteres Spektrum, Fehlern durch „implizites Verhalten“ die Türen zu öffnen. Nachfolgende werden einige implizite Verhaltensweisen dargestellt, die vermieden werden sollten.
Aufgrund der Standardgrenze für die untere Array Grenze (=0) läuft man Gefahr, diese untere Grenze grundsätzlich als gesetzt anzunehmen. Bereits eine globale Abweichung dieser Grenze durch eine Option Base Anweisung führt hier bereits zu potentiellen Fehlern.
Daher sollte man grundsätzlich die untere Grenze explizit setzen, worauf dann auch eine Option Base Anweisung keinen Einfluss mehr nimmt.
Option Explicit Sub CountDown() Dim i As Integer Dim sNums(10) As String sNums(10) = "Zehn" sNums(9) = "Neun" sNums(8) = "Acht" sNums(7) = "Sieben" sNums(6) = "Sechs" sNums(5) = "Fünf" sNums(4) = "Vier" sNums(3) = "Drei" sNums(2) = "Zwei" sNums(1) = "Eins" sNums(0) = "Null" '// Countdown von 10 bis 0 For i = UBound(sNums) To _ LBound(sNums) Step -1 Debug.Print sNums(i) Next End Sub
Dieses Beispiel funktioniert, da implizit die untere Array-Grenze auf 0 gesetzt wird.
Option Explicit Option Base 1 Sub CountDown() Dim i As Integer Dim sNums(10) As String sNums(10) = "Zehn" sNums(9) = "Neun" sNums(8) = "Acht" sNums(7) = "Sieben" sNums(6) = "Sechs" sNums(5) = "Fünf" sNums(4) = "Vier" sNums(3) = "Drei" sNums(2) = "Zwei" sNums(1) = "Eins" sNums(0) = "Null" '// Countdown von 10 bis 0 For i = UBound(sNums) To _ LBound(sNums) Step -1 Debug.Print sNums(i) Next End Sub
Dieses Beispiel führt zu einem Fehler, da die Anweisung Option Base 1 alle unteren Arraygrenzen grundsätzlich auf 1 stellt, sofern diese nicht explizit gesetzt werden.
Aus diesem Grund sollten untere Arraygrenzen grundsätzlich deklariert werden:
Dim sNums(0 To 10) As String