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.
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.