Zoeken…


Syntaxis

  • Optie optionName [waarde]
  • Optie Expliciet
  • Optie Vergelijk {Text | Binair | Database}
  • Optie privémodule
  • Optie Base {0 | 1}

parameters

Optie Detail
uitdrukkelijk Vereisen variabele declaratie in de module waarin het is gespecificeerd (idealiter allemaal); met deze optie opgegeven, wordt het gebruik van een niet-aangegeven (/ verkeerd gespelde) variabele een compilatiefout.
Vergelijk tekst Maakt de stringvergelijkingen van de module niet hoofdlettergevoelig, gebaseerd op systeemlocale, waarbij prioriteit wordt gegeven aan alfabetische equivalentie (bijvoorbeeld "a" = "A").
Vergelijk Binary Standaard stringvergelijkingsmodus. Maakt de stringvergelijkingen van de module hoofdlettergevoelig, waarbij strings worden vergeleken met behulp van de binaire weergave / numerieke waarde van elk teken (bijv. ASCII).
Database vergelijken (Alleen MS-Access) Zorgt ervoor dat de stringvergelijkingen van de module werken zoals in een SQL-instructie.
Privémodule Voorkomt dat toegang tot het Public lid van de module wordt verkregen van buiten het project waarin de module zich bevindt, waardoor procedures effectief worden verborgen voor de host-applicatie (dwz niet beschikbaar voor gebruik als macro's of door de gebruiker gedefinieerde functies).
Optie Base 0 Standaardinstelling. Stelt de impliciete array ondergrens in op 0 in een module. Wanneer een array wordt gedeclareerd zonder een expliciete ondergrenswaarde, wordt 0 gebruikt.
Optie Base 1 Stelt de impliciete array ondergrens in op 1 in een module. Wanneer een array wordt gedeclareerd zonder een expliciete ondergrenswaarde, wordt 1 gebruikt.

Opmerkingen

Het is veel eenvoudiger om de grenzen van arrays te controleren door de grenzen expliciet aan te geven in plaats van de compiler terug te laten vallen op een Option Base {0|1} -verklaring. Dit kan als volgt:

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)

Optie Expliciet

Het wordt als beste praktijk beschouwd om Option Explicit altijd in VBA te gebruiken, omdat het de ontwikkelaar dwingt om al zijn variabelen vóór gebruik te declareren. Dit heeft ook andere voordelen, zoals automatisch hoofdlettergebruik voor opgegeven variabelenamen en IntelliSense.

Option Explicit

Sub OptionExplicit()
    Dim a As Integer
    a = 5
    b = 10 '// Causes compile error as 'b' is not declared
End Sub

Instelling Vereiste variabele verklaring binnen de VBE's Tools ► Opties ► Editor eigenschappenpagina zal de Option Explicit- verklaring bovenaan elk nieuw aangemaakt codeblad plaatsen.

require_variable_declaration

Dit voorkomt dwaze codeerfouten zoals spelfouten en beïnvloedt je ook om het juiste variabeletype te gebruiken in de variabele declaratie. (Nog enkele voorbeelden worden gegeven op ALTIJD Gebruik "Optie Expliciet" .)

Optie Vergelijk {Binair | Tekst | Database}

Optie Vergelijk Binair

Binary vergelijking maakt alle controles voor strijkkwartet gelijkheid binnen een module / klasse hoofdlettergevoelig. Technisch gezien worden met deze optie stringvergelijkingen uitgevoerd met behulp van de sorteervolgorde van de binaire representaties van elk karakter.

A <B <E <Z <a <b <e <z

Als er in een module geen optievergelijking is opgegeven, wordt standaard Binair gebruikt.

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

Optie Tekst vergelijken

Optie Vergelijken Tekst maakt alle stringvergelijkingen binnen een module / klasse een hoofdletterongevoelige vergelijking.

(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

Optie Database vergelijken

Optie Database vergelijken is alleen beschikbaar binnen MS Access. Hiermee wordt ingesteld dat de module / klasse de huidige database-instellingen gebruikt om te bepalen of de tekst- of binaire modus moet worden gebruikt.

Opmerking: het gebruik van deze instelling wordt afgeraden, tenzij de module wordt gebruikt voor het schrijven van aangepaste Access UDF's (door de gebruiker gedefinieerde functies) die tekstvergelijkingen op dezelfde manier moeten behandelen als SQL-query's in die database.

Optie Base {0 | 1}

Option Base wordt gebruikt om de standaard ondergrens van arrayelementen aan te geven. Het wordt op moduleniveau verklaard en is alleen geldig voor de huidige module.

Standaard (en dus als er geen Option Base is opgegeven) is de Base 0. Dit betekent dat het eerste element van een array die in de module wordt gedeclareerd, een index van 0 heeft.

Als Option Base 1 is opgegeven, heeft het eerste array-element index 1

Voorbeeld in Base 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

Hetzelfde voorbeeld met Base 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

Het tweede voorbeeld genereerde een Subscript buiten bereik (Fout 9) in de eerste lusfase omdat een poging werd gedaan om toegang te krijgen tot de index 0 van de array en deze index bestaat niet omdat de module wordt verklaard met Base 1

De juiste code met Base 1 is:

    For i = 1 To UBound(myStrings)
    
        Debug.Print myStrings(i) ' This will print "Apple", then "Orange", then "Peach"
    
    Next i

Opgemerkt moet worden dat de Split-functie altijd een array met een op nul gebaseerde elementindex maakt, ongeacht een Option Base instelling. Voorbeelden van het gebruik van de Split- functie vindt u hier

Split functie
Retourneert een op nul gebaseerde, eendimensionale array met een opgegeven aantal substrings.

In Excel Range.Formula eigenschappen Range.Value en Range.Formula voor een bereik met meerdere Range.Formula altijd een op 1 gebaseerde 2D Variant-array.

Evenzo retourneert in ADO de methode Recordset.GetRows altijd een op 1 gebaseerde 2D-array.

Een aanbevolen 'best practice' is om altijd de LBound- en UBound- functies te gebruiken om de omvang van een array te bepalen.

'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

Option Base 1 moet bovenaan elke codemodule staan waar een array wordt gemaakt of opnieuw gedimensioneerd als arrays consistent moeten worden gemaakt met een ondergrens van 1.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow