Recherche…


Syntaxe

  • Option optionName [valeur]
  • Option explicite
  • Option Comparer {Texte | Binaire | Base de données}
  • Module privé d'option
  • Option Base {0 | 1}

Paramètres

Option Détail
Explicite Exiger une déclaration de variable dans le module dans lequel il est spécifié (idéalement, tous); Avec cette option spécifiée, l'utilisation d'une variable non déclarée (/ mal orthographiée) devient une erreur de compilation.
Comparer le texte Rend les comparaisons de chaînes du module insensibles à la casse, en fonction des paramètres régionaux du système, en hiérarchisant les équivalences alphabétiques (par exemple, "a" = "A").
Comparer les binaires Mode de comparaison de chaîne par défaut. Rend les comparaisons de chaînes du module sensibles à la casse, en comparant les chaînes à l'aide de la représentation numérique / valeur numérique de chaque caractère (par exemple, ASCII).
Comparer la base de données (MS-Access uniquement) Permet aux comparaisons de chaînes du module de fonctionner comme elles le feraient dans une instruction SQL.
Module privé Empêche l'accès au membre Public du module en dehors du projet dans lequel le module réside, masquant efficacement les procédures de l'application hôte (c'est-à-dire non disponibles pour être utilisées comme macros ou fonctions définies par l'utilisateur).
Option Base 0 Paramètres par défaut. Définit le tableau implicite inférieur lié à 0 dans un module. Lorsqu'un tableau est déclaré sans valeur de limite inférieure explicite, 0 sera utilisé.
Option Base 1 Définit la limite inférieure du tableau implicite à 1 dans un module. Lorsqu'un tableau est déclaré sans valeur de limite inférieure explicite, 1 sera utilisé.

Remarques

Il est beaucoup plus facile de contrôler les limites des tableaux en déclarant explicitement les limites plutôt que de laisser le compilateur se rabattre sur une déclaration Option Base {0|1} . Cela peut être fait comme ça:

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 explicite

Il est recommandé de toujours utiliser Option Explicit dans VBA, car cela oblige le développeur à déclarer toutes ses variables avant utilisation. Cela présente également d'autres avantages, tels que la mise en majuscules automatique pour les noms de variables déclarés et IntelliSense.

Option Explicit

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

Si vous définissez Exiger une déclaration de variable dans la page Outils ► Options ► Éditeur de VBE, l'instruction Option Explicit apparaîtra en haut de chaque nouvelle feuille de code.

require_variable_declaration

Cela évitera les erreurs de codage idiotes comme les fautes d'orthographe et vous incitera à utiliser le type de variable correct dans la déclaration de variable. (Quelques exemples supplémentaires sont donnés à TOUJOURS utiliser "Option Explicit" .)

Option Comparer {Binary | Texte | Base de données}

Option Comparer les binaires

La comparaison binaire rend toutes les vérifications d'égalité de chaîne dans un module / classe sensibles à la casse . Techniquement, avec cette option, les comparaisons de chaînes sont effectuées en utilisant l'ordre de tri des représentations binaires de chaque caractère.

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

Si aucune comparaison d'options n'est spécifiée dans un module, Binary est utilisé par défaut.

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 Comparer du texte

Option Compare Text fait que toutes les comparaisons de chaînes dans un module / une classe utilisent une comparaison insensible à la casse .

(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 Comparer la base de données

Option Compare Database est uniquement disponible dans MS Access. Il définit le module / classe pour utiliser les paramètres de base de données en cours pour déterminer s'il faut utiliser le mode texte ou binaire.

Remarque: L'utilisation de ce paramètre est déconseillée, sauf si le module est utilisé pour écrire des UDF (fonctions définies par l'utilisateur) Access personnalisées devant traiter les comparaisons de texte de la même manière que les requêtes SQL dans cette base de données.

Option Base {0 | 1}

Option Base est utilisée pour déclarer la limite inférieure par défaut des éléments du tableau . Il est déclaré au niveau du module et n'est valide que pour le module actuel.

Par défaut (et donc si aucune Base Option n'est spécifiée), la Base est 0. Ce qui signifie que le premier élément de tout tableau déclaré dans le module a un index de 0.

Si Option Base 1 est spécifié, le premier élément du tableau a l'index 1

Exemple en 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

Même exemple avec 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

Le deuxième exemple a généré un indice hors plage (erreur 9) au premier stade de la boucle car une tentative d'accès à l'index 0 du tableau a été effectuée et cet index n'existe pas lorsque le module est déclaré avec Base 1

Le code correct avec Base 1 est:

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

Il convient de noter que la fonction Split crée toujours un tableau avec un index d'élément de base zéro, quel que soit le paramètre Option Base . Vous trouverez ici des exemples d'utilisation de la fonction Split .

Fonction Split
Retourne un tableau à une dimension, basé sur zéro, contenant un nombre spécifié de sous-chaînes.

Dans Excel, les propriétés Range.Value et Range.Formula d'une plage à plusieurs cellules renvoient toujours un tableau à variantes 2D basé sur 1.

De même, dans ADO, la méthode Recordset.GetRows renvoie toujours un tableau 2D basé sur 1.

L'une des meilleures pratiques recommandées consiste à toujours utiliser les fonctions LBound et UBound pour déterminer les étendues d'un tableau.

'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

L' Option Base 1 doit être située en haut de chaque module de code où un tableau est créé ou redimensionné si les tableaux doivent être créés systématiquement avec une limite inférieure de 1.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow