Zoeken…
Syntaxis
- IdentifierName [ argumenten ]
- Call IdentifierName [ (argumenten) ]
- [Let | Set] expression = IdentifierName [ (argumenten) ]
- [Let | Set] IdentifierName [ (argumenten) ] = expressie
parameters
Parameter | info |
---|---|
IdentifierName | De naam van de te bellen procedure. |
argumenten | Een door komma's gescheiden lijst met argumenten die aan de procedure moeten worden doorgegeven. |
Opmerkingen
De eerste twee syntaxis zijn voor het aanroepen van Sub
procedures; merk op dat de eerste syntaxis geen haakjes bevat.
Zie Dit is verwarrend. Waarom niet gewoon altijd haakjes gebruiken? voor een grondige uitleg van de verschillen tussen de eerste twee syntaxis.
De derde syntaxis is voor het aanroepen van Function
en Property Get
procedures; als er parameters zijn, zijn de haakjes altijd verplicht. Het trefwoord Let
is optioneel bij het toewijzen van een waarde , maar het trefwoord Set
is vereist bij het toewijzen van een referentie .
Vierde syntaxis is voor het aanroepen van de procedures Property Let
en Property Set
; de expression
aan de rechterkant van de toewijzing wordt doorgegeven aan de waardeparameter van de eigenschap.
Impliciete oproepsyntaxis
ProcedureName
ProcedureName argument1, argument2
Noem een procedure met de naam zonder haakjes.
Edge case
Het sleutelwoord Call
is slechts in één edge-geval vereist:
Call DoSomething : DoSomethingElse
DoSomething
en DoSomethingElse
worden procedures genoemd. Als de Call
zoekwoord is verwijderd, dan DoSomething
zou worden verwerkt als een lijn label in plaats van een procedure call, waarvoor de code zou breken:
DoSomething: DoSomethingElse 'only DoSomethingElse will run
Retourwaarden
Om het resultaat van een procedureoproep op te halen (bijv. Function
of Property Get
procedures), plaatst u de oproep aan de rechterkant van een toewijzing:
result = ProcedureName
result = ProcedureName(argument1, argument2)
Haakjes moeten aanwezig zijn als er parameters zijn. Als de procedure geen parameters heeft, zijn de haakjes overbodig.
Dit is verwarrend. Waarom niet gewoon altijd haakjes gebruiken?
Haakjes worden gebruikt om de argumenten van functieaanroepen in te sluiten. Het gebruik ervan voor procedureaanroepen kan onverwachte problemen veroorzaken.
Omdat ze bugs kunnen introduceren, zowel tijdens runtime door een mogelijk onbedoelde waarde aan de procedure door te geven, als tijdens het compileren door gewoon een ongeldige syntaxis te zijn.
Run-time
Redundante haakjes kunnen bugs introduceren. Gegeven een procedure die een objectverwijzing als parameter neemt ...
Sub DoSomething(ByRef target As Range)
End Sub
... en genoemd tussen haakjes:
DoSomething (Application.ActiveCell) 'raises an error at runtime
Dit veroorzaakt een "Object vereist" runtime-fout # 424. Andere fouten zijn mogelijk in andere omstandigheden: hier wordt de Application.ActiveCell
Range
objectreferentie geëvalueerd en doorgegeven door waarde, ongeacht de handtekening van de procedure die ByRef
dat target
door ByRef
zou worden doorgegeven. De werkelijke waarde die ByVal
in het bovenstaande fragment aan DoSomething
doorgegeven, is Application.ActiveCell.Value
.
Haakjes dwingen VBA om de waarde van de uitdrukking tussen haakjes te evalueren en geven het resultaat ByVal
aan de aangeroepen procedure. Wanneer het type van het geëvalueerde resultaat niet overeenkomt met het verwachte type van de procedure en niet impliciet kan worden geconverteerd, wordt een runtime-fout gegenereerd.
Compile-time
Deze code kan niet worden gecompileerd:
MsgBox ("Invalid Code!", vbCritical)
Omdat de uitdrukking ("Invalid Code!", vbCritical)
niet naar een waarde kan worden geëvalueerd .
Dit zou compileren en werken:
MsgBox ("Invalid Code!"), (vbCritical)
Maar zou er zeker dom uitzien. Vermijd overbodige haakjes.
Expliciete oproepsyntaxis
Call ProcedureName
Call ProcedureName(argument1, argument2)
De expliciete syntaxis van de Call
vereist het sleutelwoord Call
en haakjes rond de lijst met argumenten; haakjes zijn overbodig als er geen parameters zijn. Deze syntaxis was verouderd toen de modernere impliciete syntaxis van oproepen werd toegevoegd aan VB.
Optionele argumenten
Sommige procedures hebben optionele argumenten. Optionele argumenten komen altijd na vereiste argumenten, maar de procedure kan zonder deze worden aangeroepen.
Als de functie ProcedureName
bijvoorbeeld twee vereiste argumenten ( argument1
, argument2
) en één optioneel argument, optArgument3
, zou hebben, zou dit op ten minste vier manieren kunnen worden aangeroepen:
' Without optional argument
result = ProcedureName("A", "B")
' With optional argument
result = ProcedureName("A", "B", "C")
' Using named arguments (allows a different order)
result = ProcedureName(optArgument3:="C", argument1:="A", argument2:="B")
' Mixing named and unnamed arguments
result = ProcedureName("A", "B", optArgument3:="C")
De structuur van de functiekoptekst die hier wordt aangeroepen, ziet er ongeveer zo uit:
Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String) As String
Het Optional
sleutelwoord geeft aan dat dit argument kan worden weggelaten. Elke optionele argumenten geïntroduceerd in de hoofding moeten verschijnen aan het einde, na eventuele vereiste argumenten - zoals eerder vermeld.
U kunt ook een standaardwaarde opgeven voor het argument in het geval dat een waarde niet wordt doorgegeven aan de functie:
Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String = "C") As String
Als in deze functie het argument voor c
niet wordt opgegeven, wordt de waarde standaard ingesteld op "C"
. Als een waarde wordt opgegeven, wordt de standaardwaarde overschreven.