VBA
Conventions de nommage
Recherche…
Noms variables
Les variables contiennent des données. Nommez-les après ce qu'ils ont utilisé, pas après leur type de données ou leur étendue, en utilisant un nom . Si vous vous sentez obligé de numéroter vos variables (par exemple, thing1, thing2, thing3
), envisagez plutôt d'utiliser une structure de données appropriée (par exemple, un tableau, une Collection
ou un Dictionary
).
Les noms des variables qui représentent un ensemble de valeurs itérables - par exemple, un tableau, une Collection
, un Dictionary
ou une Range
de cellules, doivent être au pluriel.
Certaines conventions de nommage VBA courantes vont donc:
Pour les variables de niveau procédure :
camelCase
Public Sub ExampleNaming(ByVal inputValue As Long, ByRef inputVariable As Long)
Dim procedureVariable As Long
Dim someOtherVariable As String
End Sub
Pour les variables de niveau module:
PascalCase
Public GlobalVariable As Long
Private ModuleVariable As String
Pour les constantes:
SHOUTY_SNAKE_CASE
est couramment utilisé pour différencier les constantes des variables:
Public Const GLOBAL_CONSTANT As String = "Project Version #1.000.000.001"
Private Const MODULE_CONSTANT As String = "Something relevant to this Module"
Public Sub SomeProcedure()
Const PROCEDURE_CONSTANT As Long = 10
End Sub
Cependant, les noms PascalCase
font un code plus propre et sont tout aussi bons, étant donné qu'IntelliSense utilise des icônes différentes pour les variables et les constantes:
Notation hongroise
Nommez-les après leur utilisation, et non après leur type de données ou leur étendue.
"La notation hongroise permet de voir plus facilement le type d'une variable"
Si vous écrivez votre code tel que les procédures respectent le principe de la responsabilité unique (comme il se doit), vous ne devriez jamais regarder un écran de déclarations de variables en tête de procédure; déclare les variables aussi proches que possible de leur première utilisation et leur type de données sera toujours visible si vous les déclarez avec un type explicite. Le raccourci Ctrl + i du VBE peut également être utilisé pour afficher le type d'une variable dans une info-bulle.
A quoi sert une variable est beaucoup plus d'informations utiles que son type de données, en particulier dans un langage tel que VBA qui convertit joyeusement et implicitement un type en un autre si nécessaire.
Considérez iFile
et strFile
dans cet exemple:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
Dim bRetVal As Boolean
Dim iFile As Integer
On Error GoTo CleanFail
iFile = FreeFile
Open strFile For Input As #iFile
Input #iFile, strData
bRetVal = True
CleanExit:
Close #iFile
bReadFile = bRetVal
Exit Function
CleanFail:
bRetVal = False
Resume CleanExit
End Function
Comparer aux:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
On Error GoTo CleanFail
Dim handle As Integer
handle = FreeFile
Open path For Input As #handle
Input #handle, outContent
Dim result As Boolean
result = True
CleanExit:
Close #handle
CanReadFile = result
Exit Function
CleanFail:
result = False
Resume CleanExit
End Function
strData
est passé ByRef
dans le premier exemple, mais à part le fait que nous avons la chance de voir qu'il est explicitement passé en tant que tel, rien n'indique que strData
soit réellement renvoyé par la fonction.
L'exemple inférieur le nomme outContent
; ce préfixe out
est ce que la notation hongroise a été inventée pour: aider à clarifier à quoi sert une variable , dans ce cas-ci pour l'identifier clairement comme un paramètre "out".
Ceci est utile, car IntelliSense en lui-même n'affiche pas ByRef
, même si le paramètre est explicitement passé par référence:
Qui conduit à...
Hongrois Fait Bien
La notation hongroise n'avait à l'origine rien à voir avec les types de variables . En fait, la notation hongroise faite correctement est réellement utile. Considérez ce petit exemple ( ByVal
et As Integer
supprimés pour des raisons de brièveté):
Public Sub Copy(iX1, iY1, iX2, iY2)
End Sub
Comparer aux:
Public Sub Copy(srcColumn, srcRow, dstColumn, dstRow)
End Sub
src
et dst
sont les préfixes de notation hongrois ici, et ils transmettent des informations utiles qui ne peuvent pas déjà être déduites des noms de paramètres ou d'IntelliSense, nous indiquant le type déclaré.
Bien sûr, il existe un meilleur moyen de tout transmettre, en utilisant une abstraction correcte et des mots réels qui peuvent être prononcés à haute voix et qui ont du sens - comme un exemple artificiel:
Type Coordinate
RowIndex As Long
ColumnIndex As Long
End Type
Sub Copy(source As Coordinate, destination As Coordinate)
End Sub
Noms de procédure
Les procédures font quelque chose . Nommez-les après ce qu'ils font, en utilisant un verbe . S'il est impossible de nommer avec précision une procédure, il est probable que la procédure fait trop de choses et doit être divisée en procédures plus petites et plus spécialisées.
Certaines conventions de nommage VBA courantes vont donc:
Pour toutes les procédures:
PascalCase
Public Sub DoThing()
End Sub
Private Function ReturnSomeValue() As [DataType]
End Function
Pour les procédures de gestionnaire d'événement:
ObjectName_EventName
Public Sub Workbook_Open()
End Sub
Public Sub Button1_Click()
End Sub
Les gestionnaires d'événements sont généralement nommés automatiquement par le VBE; les renommer sans renommer l'objet et / ou l'événement manipulé cassera le code - le code s'exécutera et se compilera, mais la procédure du gestionnaire sera orpheline et ne sera jamais exécutée.
Membres booléens
Considérons une fonction booléenne:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
End Function
Comparer aux:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
End Function
Le Can
préfixe ne sert le même but que le b
préfixe: il identifie la valeur de retour de la fonction comme Boolean
. Mais Can
lit mieux que b
:
If CanReadFile(path, content) Then
Par rapport à:
If bReadFile(strFile, strData) Then
Envisagez d'utiliser des préfixes tels que Can
, Is
ou Has
devant les membres renvoyant des booléens (fonctions et propriétés), mais uniquement lorsque cela ajoute de la valeur. Cela est conforme aux directives de dénomination actuelles de Microsoft .