VBA
Naamgevingsconventies
Zoeken…
Variabele namen
Variabelen bevatten gegevens. Noem ze naar waar ze voor worden gebruikt, niet naar hun gegevenstype of bereik, met een zelfstandig naamwoord . Als u voel me verplicht om het nummer van uw variabelen (bijvoorbeeld thing1, thing2, thing3
), dan overwegen gebruik te maken van een geschikte datastructuur plaats (bijvoorbeeld een array, een Collection
of een Dictionary
).
Namen van variabelen die een iteratable set van waarden vertegenwoordigen - bijvoorbeeld een array, een Collection
, een Dictionary
, of een Range
van cellen, moet meervoud zijn.
Enkele veel voorkomende VBA-naamgevingsconventies zijn als volgt:
Voor variabelen op procedureniveau :
camelCase
Public Sub ExampleNaming(ByVal inputValue As Long, ByRef inputVariable As Long)
Dim procedureVariable As Long
Dim someOtherVariable As String
End Sub
Voor variabelen op moduleniveau:
PascalCase
Public GlobalVariable As Long
Private ModuleVariable As String
Voor constanten:
SHOUTY_SNAKE_CASE
wordt vaak gebruikt om constanten te onderscheiden van variabelen:
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 zorgen echter voor schonere code en zijn net zo goed, gezien IntelliSense verschillende pictogrammen gebruikt voor variabelen en constanten:
Hongaarse notatie
Noem ze naar waar ze voor worden gebruikt, niet naar hun gegevenstype of bereik.
"Hongaarse notatie maakt het gemakkelijker om te zien wat het type van een variabele is"
Als u uw code schrijft, zoals procedures die zich houden aan het beginsel van een enkele verantwoordelijkheid (zoals het hoort), moet u nooit naar een scherm vol variabele verklaringen bovenaan een procedure kijken; declareer variabelen zo dicht mogelijk bij hun eerste gebruik, en hun gegevenstype zal altijd duidelijk zichtbaar zijn als u ze met een expliciet type declareert. De sneltoets Ctrl + i van de VBE kan ook worden gebruikt om het type variabele in een knopinfo weer te geven.
Waar een variabele voor wordt gebruikt, is veel nuttiger informatie dan het gegevenstype, vooral in een taal zoals VBA die een type gelukkig en impliciet naar een ander converteert als dat nodig is.
Overweeg iFile
en strFile
in dit voorbeeld:
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
Vergelijk met:
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
wordt in het bovenste voorbeeld door ByRef
doorgegeven, maar ByRef
van het feit dat we het geluk hebben om te zien dat het expliciet als zodanig is doorgegeven, is er geen indicatie dat strData
daadwerkelijk wordt geretourneerd door de functie.
Het onderste voorbeeld noemt het outContent
; dit out
prefix is wat Hongaarse Notation werd uitgevonden voor: om hulp te verduidelijken wat een variabele wordt gebruikt voor, in dit geval om duidelijk te identificeren als een "out" parameter.
Dit is handig, omdat IntelliSense op zichzelf ByRef
niet weergeeft, zelfs wanneer de parameter expliciet door verwijzing wordt doorgegeven:
Wat leidt tot...
Hongaars goed gedaan
De Hongaarse notatie had oorspronkelijk niets te maken met variabele typen . In feite is de Hongaarse notatie goed gedaan eigenlijk nuttig. Beschouw dit kleine voorbeeld ( ByVal
en As Integer
verwijderd voor kort):
Public Sub Copy(iX1, iY1, iX2, iY2)
End Sub
Vergelijk met:
Public Sub Copy(srcColumn, srcRow, dstColumn, dstRow)
End Sub
src
en dst
zijn hier Hongaarse notatie- voorvoegsels en ze geven nuttige informatie die anders niet al kan worden afgeleid uit de parameternamen of IntelliSense die ons het aangegeven type tonen.
Natuurlijk is er een betere manier om alles over te brengen, met behulp van de juiste abstractie en echte woorden die hardop kunnen worden uitgesproken en zinvol zijn - als een gekunsteld voorbeeld:
Type Coordinate
RowIndex As Long
ColumnIndex As Long
End Type
Sub Copy(source As Coordinate, destination As Coordinate)
End Sub
Procedure namen
Procedures doen iets . Noem ze naar wat ze doen, met behulp van een werkwoord . Als het niet mogelijk is om een procedure nauwkeurig te benoemen, doet de procedure waarschijnlijk te veel dingen en moet deze worden onderverdeeld in kleinere, meer gespecialiseerde procedures.
Enkele veel voorkomende VBA-naamgevingsconventies zijn als volgt:
Voor alle procedures:
PascalCase
Public Sub DoThing()
End Sub
Private Function ReturnSomeValue() As [DataType]
End Function
Voor procedures voor evenementafhandeling:
ObjectName_EventName
Public Sub Workbook_Open()
End Sub
Public Sub Button1_Click()
End Sub
Gebeurtenishandlers worden meestal automatisch benoemd door de VBE; door ze te hernoemen zonder het object en / of de afgehandelde gebeurtenis te hernoemen, wordt de code verbroken - de code wordt uitgevoerd en gecompileerd, maar de handlerprocedure wordt verweesd en wordt nooit uitgevoerd.
Booleaanse leden
Overweeg een Booleaanse terugkeerfunctie:
Function bReadFile(ByVal strFile As String, ByRef strData As String) As Boolean
End Function
Vergelijk met:
Function CanReadFile(ByVal path As String, ByRef outContent As String) As Boolean
End Function
De Can
prefix heeft dienen hetzelfde doel als de b
prefix: het identificeert de functie return waarde als een Boolean
. Maar Can
leest beter dan b
:
If CanReadFile(path, content) Then
Vergeleken bij:
If bReadFile(strFile, strData) Then
Overweeg het gebruik van voorvoegsels zoals Can
, Is
of Has
voor Booleaanse terugkerende leden (functies en eigenschappen), maar alleen wanneer het waarde toevoegt. Dit voldoet aan de huidige Microsoft-richtlijnen voor naamgeving .