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.