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:

IntelliSense verwendet verschiedene Symbole für konstantes Foo und variabler Balken


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:

IntelliSense zeigt "CanReadFile (ByVal-Pfad als String, outComment As-String) als Boolean" an, wenn die tatsächliche Signatur OutComment als explizit durch Referenz ("ByRef") angegeben angibt.

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 .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow