VBA
VBA-Optionsschlüsselwort
Suche…
Syntax
- Option optionName [Wert]
- Option explizit
- Option Vergleichen {Text | Binär | Datenbank}
- Option Privates Modul
- Optionsbasis {0 | 1}
Parameter
Möglichkeit | Detail |
---|---|
Explizit | Fordern Sie eine Variablendeklaration in dem Modul an, in dem es angegeben ist (idealerweise alle). Wenn diese Option angegeben ist, wird die Verwendung einer nicht deklarierten (/ falsch geschriebenen) Variablen zu einem Kompilierungsfehler. |
Text vergleichen | Macht die String-Vergleiche des Moduls unabhängig von der Groß- und Kleinschreibung, basierend auf der Systemumgebung, und priorisiert die alphabetische Äquivalenz (z. B. "a" = "A"). |
Vergleichen Sie binär | Standard-Stringvergleichsmodus Die String-Vergleiche des Moduls müssen zwischen Groß- und Kleinschreibung unterschieden werden. Dabei werden Zeichenfolgen anhand des binären Repräsentations- / Zahlenwerts jedes Zeichens (z. B. ASCII) verglichen. |
Vergleichen Sie die Datenbank | (Nur MS-Access) Lässt die String-Vergleiche des Moduls wie in einer SQL-Anweisung funktionieren. |
Privatmodul | Verhindert, dass auf das Public Mitglied des Moduls von außerhalb des Projekts, in dem sich das Modul befindet, zugegriffen wird, wodurch Prozeduren effektiv von der Hostanwendung verborgen werden (dh nicht als Makros oder benutzerdefinierte Funktionen verwendet werden können). |
Optionsbasis 0 | Voreinstellung. Legt das implizite Array in einem Modul auf 0 . Wenn ein Array ohne explizit unteren Grenzwert deklariert wird, wird 0 verwendet. |
Optionsbasis 1 | Legt das implizite Array in einem Modul auf 1 . Wenn ein Array ohne explizit unteren Grenzwert deklariert wird, wird 1 verwendet. |
Bemerkungen
Es ist viel einfacher, die Grenzen von Arrays zu steuern, indem Sie die Grenzen explizit deklarieren, anstatt den Compiler auf eine Option Base {0|1}
Deklaration Option Base {0|1}
zurückgreifen zu lassen. Dies kann wie folgt gemacht werden:
Dim myStringsA(0 To 5) As String '// This has 6 elements (0 - 5)
Dim myStringsB(1 To 5) As String '// This has 5 elements (1 - 5)
Dim myStringsC(6 To 9) As String '// This has 3 elements (6 - 9)
Option explizit
Es gilt als bewährte Methode, Option Explicit
in VBA zu verwenden, da der Entwickler dazu gezwungen wird, alle Variablen vor der Verwendung zu deklarieren. Dies hat auch andere Vorteile, z. B. die automatische Aktivierung von deklarierten Variablennamen und IntelliSense.
Option Explicit
Sub OptionExplicit()
Dim a As Integer
a = 5
b = 10 '// Causes compile error as 'b' is not declared
End Sub
Wenn Sie die Option Require Variablendeklaration in den Tools der VBE ► Extras ► Editor-Eigenschaftsseite festlegen, wird die Option Explicit- Anweisung oben in jedem neu erstellten Codeblatt angezeigt.
Dadurch werden dumme Codierungsfehler wie Rechtschreibfehler vermieden und Sie können den korrekten Variablentyp in der Variablendeklaration verwenden. (Einige weitere Beispiele finden Sie unter IMMER Verwenden Sie "Option Explicit" .)
Option Compare {Binär | Text | Datenbank}
Option Compare Binary
Durch den binären Vergleich werden alle Prüfungen auf String-Gleichheit innerhalb eines Moduls / einer Klasse zwischen Groß- und Kleinschreibung unterschieden . Mit dieser Option werden Zeichenfolgenvergleiche technisch unter Verwendung der Sortierreihenfolge der binären Repräsentationen jedes Zeichens durchgeführt.
A <B <E <Z <a <b <e <z
Wenn in einem Modul kein Option Compare angegeben ist, wird standardmäßig Binary verwendet.
Option Compare Binary
Sub CompareBinary()
Dim foo As String
Dim bar As String
'// Case sensitive
foo = "abc"
bar = "ABC"
Debug.Print (foo = bar) '// Prints "False"
'// Still differentiates accented characters
foo = "ábc"
bar = "abc"
Debug.Print (foo = bar) '// Prints "False"
'// "b" (Chr 98) is greater than "a" (Chr 97)
foo = "a"
bar = "b"
Debug.Print (bar > foo) '// Prints "True"
'// "b" (Chr 98) is NOT greater than "á" (Chr 225)
foo = "á"
bar = "b"
Debug.Print (bar > foo) '// Prints "False"
End Sub
Option Text vergleichen
Die Option Text vergleichen bewirkt, dass alle Zeichenfolgenvergleiche innerhalb eines Moduls / einer Klasse einen von Groß- und Kleinschreibung abhängigen Vergleich verwenden.
(A | a) <(B | b) <(Z | z)
Option Compare Text
Sub CompareText()
Dim foo As String
Dim bar As String
'// Case insensitivity
foo = "abc"
bar = "ABC"
Debug.Print (foo = bar) '// Prints "True"
'// Still differentiates accented characters
foo = "ábc"
bar = "abc"
Debug.Print (foo = bar) '// Prints "False"
'// "b" still comes after "a" or "á"
foo = "á"
bar = "b"
Debug.Print (bar > foo) '// Prints "True"
End Sub
Option Compare Database
Die Option Compare Database ist nur in MS Access verfügbar. Hiermit wird festgelegt, dass das Modul / die Klasse die aktuellen Datenbankeinstellungen verwendet, um zu bestimmen, ob der Text- oder Binärmodus verwendet werden soll.
Hinweis: Die Verwendung dieser Einstellung wird nicht empfohlen, es sei denn, das Modul wird zum Schreiben von benutzerdefinierten Access-UDFs (benutzerdefinierte Funktionen) verwendet, die Textvergleiche auf dieselbe Weise wie SQL-Abfragen in dieser Datenbank behandeln sollen.
Optionsbasis {0 | 1}
Option Base
wird verwendet, um die voreingestellte untere Grenze von Arrayelementen zu deklarieren. Es wird auf Modulebene deklariert und gilt nur für das aktuelle Modul.
Standardmäßig (und wenn keine Optionsbasis angegeben ist) ist die Basis 0. Dies bedeutet, dass das erste Element eines im Modul deklarierten Arrays den Index 0 hat.
Wenn Option Base 1
angegeben ist, hat das erste Array-Element den Index 1
Beispiel in Basis 0:
Option Base 0
Sub BaseZero()
Dim myStrings As Variant
' Create an array out of the Variant, having 3 fruits elements
myStrings = Array("Apple", "Orange", "Peach")
Debug.Print LBound(myStrings) ' This Prints "0"
Debug.Print UBound(myStrings) ' This print "2", because we have 3 elements beginning at 0 -> 0,1,2
For i = 0 To UBound(myStrings)
Debug.Print myStrings(i) ' This will print "Apple", then "Orange", then "Peach"
Next i
End Sub
Gleiches Beispiel mit Basis 1
Option Base 1
Sub BaseOne()
Dim myStrings As Variant
' Create an array out of the Variant, having 3 fruits elements
myStrings = Array("Apple", "Orange", "Peach")
Debug.Print LBound(myStrings) ' This Prints "1"
Debug.Print UBound(myStrings) ' This print "3", because we have 3 elements beginning at 1 -> 1,2,3
For i = 0 To UBound(myStrings)
Debug.Print myStrings(i) ' This triggers an error 9 "Subscript out of range"
Next i
End Sub
Das zweite Beispiel hat in der ersten Schleifenphase ein Subscript außerhalb des Bereichs (Fehler 9) generiert, da versucht wurde, auf den Index 0 des Arrays zuzugreifen, und dieser Index ist nicht vorhanden, da das Modul mit Base 1
deklariert ist
Der korrekte Code für Base 1 lautet:
For i = 1 To UBound(myStrings)
Debug.Print myStrings(i) ' This will print "Apple", then "Orange", then "Peach"
Next i
Es sollte beachtet werden, dass die Split-Funktion unabhängig von einer Option Base
Einstellung immer ein Array mit einem nullbasierten Elementindex erstellt. Beispiele zur Verwendung der Split- Funktion finden Sie hier
- Split-Funktion
- Gibt ein nullbasiertes, eindimensionales Array mit einer angegebenen Anzahl von Teilzeichenfolgen zurück.
In Excel geben die Eigenschaften Range.Value
und Range.Formula
für einen mehrzelligen Bereich immer ein 1-basiertes 2D-Variant-Array zurück.
In ähnlicher Weise gibt die Recordset.GetRows
Methode in ADO immer ein 1-basiertes 2D-Array zurück.
Es wird empfohlen, immer die Funktionen LBound und UBound zu verwenden, um die Ausdehnungen eines Arrays zu bestimmen.
'for single dimensioned array
Debug.Print LBound(arr) & ":" & UBound(arr)
Dim i As Long
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
'for two dimensioned array
Debug.Print LBound(arr, 1) & ":" & UBound(arr, 1)
Debug.Print LBound(arr, 2) & ":" & UBound(arr, 2)
Dim i As long, j As Long
For i = LBound(arr, 1) To UBound(arr, 1)
For j = LBound(arr, 2) To UBound(arr, 2)
Debug.Print arr(i, j)
Next j
Next i
Die Option Base 1
muss an der Spitze jedes Codemoduls stehen, in dem ein Array erstellt oder neu dimensioniert wird, wenn Arrays konsistent mit einer unteren Grenze von 1 erstellt werden sollen.