VBA
Regeln der Namensgebung
Suche…
Variablennamen
Variablen enthalten Daten. Benennen Sie sie nach dem Verwendungszweck, nicht nach ihrem Datentyp oder Gültigkeitsbereich, und verwenden Sie dabei ein Nomen . Wenn Sie sich gezwungen fühlen, Ihre Variablen zu nummerieren (z. B. thing1, thing2, thing3
), sollten Sie stattdessen eine geeignete Datenstruktur (z. B. ein Array, eine Collection
oder ein Dictionary
) verwenden.
Namen von Variablen, die einen iterierbaren Satz von Werten darstellen - z. B. ein Array, eine Collection
, ein Dictionary
oder ein Range
von Zellen - sollten Plural sein.
Einige gängige VBA-Namenskonventionen gelten daher:
Für Variablen auf Prozedurebene :
camelCase
Public Sub ExampleNaming(ByVal inputValue As Long, ByRef inputVariable As Long)
Dim procedureVariable As Long
Dim someOtherVariable As String
End Sub
Für Variablen auf Modulebene:
PascalCase
Public GlobalVariable As Long
Private ModuleVariable As String
Für Konstanten:
SHOUTY_SNAKE_CASE
wird häufig verwendet, um Konstanten von Variablen zu unterscheiden:
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
PascalCase
Namen machen jedoch saubereren Code und sind genauso gut, da IntelliSense unterschiedliche Symbole für Variablen und Konstanten verwendet:
Ungarische Notation
Benennen Sie sie nach dem Verwendungszweck, nicht nach ihrem Datentyp oder Bereich.
"Ungarische Notation macht es einfacher, den Typ einer Variablen zu erkennen"
Wenn Sie Ihren Code schreiben, z. B. wenn Prozeduren dem Prinzip der einheitlichen Verantwortung entsprechen (wie es sollte), sollten Sie niemals einen Bildschirm mit Variablendeklarationen oben in einer Prozedur betrachten. Deklarieren Sie Variablen so nahe wie möglich an ihrer ersten Verwendung. Der Datentyp ist immer sichtbar, wenn Sie sie mit einem expliziten Typ deklarieren. Mit der Tastenkombination Strg + i der VBE können Sie auch den Typ einer Variablen in einer QuickInfo anzeigen.
Wofür eine Variable verwendet wird, sind viel mehr nützliche Informationen als ihr Datentyp, insbesondere in einer Sprache wie VBA, die einen Typ nach Bedarf glücklich und implizit in eine andere konvertiert.
Betrachten iFile
in diesem Beispiel iFile
und strFile
:
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
Vergleichen mit:
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
geleitet wird ByRef
im oberen Beispiel, aber neben der Tatsache , dass wir das Glück zu sehen sind , dass sie ausdrücklich als solche übergeben wird , gibt es keinen Hinweis darauf , dass strData
tatsächlich von der Funktion zurückgegeben wird.
Das untere Beispiel nennt es outContent
. Dieses out
Präfix ist das, wofür die Ungarische Notation erfunden wurde: um zu klären, wofür eine Variable verwendet wird , in diesem Fall, um sie eindeutig als "Out" -Parameter zu identifizieren.
Dies ist nützlich, da IntelliSense selbst keine ByRef
, selbst wenn der Parameter explizit als Referenz übergeben wird:
Was dazu führt...
Ungarisch richtig gemacht
Die ungarische Notation hatte ursprünglich nichts mit Variablentypen zu tun . In der Tat ist die Ungarische Notation richtig gemacht . Betrachten Sie dieses kleine Beispiel ( ByVal
und As Integer
wurden aus Gründen der Übersichtlichkeit entfernt):
Public Sub Copy(iX1, iY1, iX2, iY2)
End Sub
Vergleichen mit:
Public Sub Copy(srcColumn, srcRow, dstColumn, dstRow)
End Sub
src
und dst
sind hier die Präfixe dst
die ungarische Notation und vermitteln nützliche Informationen, die ansonsten nicht bereits aus den Parameternamen oder IntelliSense abgeleitet werden können, die den deklarierten Typ dst
.
Natürlich gibt es eine bessere Möglichkeit, alles zu vermitteln, indem die richtige Abstraktion und echte Wörter verwendet werden, die laut und sinnvoll ausgesprochen werden können - als ein erfundenes Beispiel:
Type Coordinate
RowIndex As Long
ColumnIndex As Long
End Type
Sub Copy(source As Coordinate, destination As Coordinate)
End Sub
Prozedurnamen
Prozeduren machen etwas . Benennen Sie sie nach dem, was sie tun, und verwenden Sie ein Verb . Wenn eine genaue Benennung einer Prozedur nicht möglich ist, führt die Prozedur wahrscheinlich zu viele Dinge aus und muss in kleinere, speziellere Prozeduren unterteilt werden.
Einige gängige VBA-Namenskonventionen gelten daher:
Für alle Verfahren:
PascalCase
Public Sub DoThing()
End Sub
Private Function ReturnSomeValue() As [DataType]
End Function
Für Event-Handler-Prozeduren:
ObjectName_EventName
Public Sub Workbook_Open()
End Sub
Public Sub Button1_Click()
End Sub
Event-Handler werden normalerweise automatisch von der VBE benannt. Wenn Sie sie umbenennen, ohne das Objekt und / oder das behandelte Ereignis umzubenennen, wird der Code beschädigt. Der Code wird ausgeführt und kompiliert. Die Prozedur wird jedoch verwaist und wird niemals ausgeführt.
Boolesche Mitglieder
Betrachten Sie eine Boolesche Rückkehrfunktion:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
End Function
Vergleichen mit:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
End Function
Der Can
- Präfix den gleichen Zweck wie die nicht dienen b
Präfix: Sie identifiziert die Rückgabewert der Funktion als Boolean
. Can
besser lesen als b
:
If CanReadFile(path, content) Then
Verglichen mit:
If bReadFile(strFile, strData) Then
Erwägen Sie die Verwendung von Präfixen wie Can
, Is
oder Has
vor Boolean-wiederkehrenden Elementen (Funktionen und Eigenschaften), jedoch nur, wenn dies einen Mehrwert ergibt. Dies entspricht den aktuellen Benennungsrichtlinien von Microsoft .