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.

required_variable_declaration

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow