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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow