Suche…
Syntax
- IdentifierName [ Argumente ]
- Call IdentifierName [ (Argumente) ]
- [Let | Set] expression = IdentifierName [ (Argumente) ]
- [Let | Set] IdentifierName [ (Argumente) ] = Ausdruck
Parameter
Parameter | Info |
---|---|
IdentifierName | Der Name der aufzurufenden Prozedur. |
Argumente | Eine durch Kommas getrennte Liste von Argumenten, die an die Prozedur übergeben werden sollen. |
Bemerkungen
Die ersten beiden Syntaxarten dienen zum Aufrufen von Sub
Prozeduren. Beachten Sie, dass die erste Syntax keine Klammern enthält.
Siehe das ist verwirrend. Warum nicht immer immer Klammern verwenden? Eine ausführliche Erklärung der Unterschiede zwischen den ersten beiden Syntaxen.
Die dritte Syntax dient zum Aufrufen von Function
und Property Get
Prozeduren. Wenn es Parameter gibt, sind die Klammern immer obligatorisch. Das Let
Schlüsselwort ist optional, wenn ein Wert zugewiesen wird , das Set
Schlüsselwort ist jedoch erforderlich, wenn eine Referenz zugewiesen wird.
Die vierte Syntax dient zum Aufrufen von Property Let
und Property Set
Prozeduren. Der expression
auf der rechten Seite der Zuweisung wird an den Werteparameter der Eigenschaft übergeben.
Implizite Aufrufsyntax
ProcedureName
ProcedureName argument1, argument2
Rufen Sie eine Prozedur mit ihrem Namen ohne Klammern auf.
Randfall
Das Schlüsselwort Call
wird nur in einem Randfall benötigt:
Call DoSomething : DoSomethingElse
DoSomething
und DoSomethingElse
sind Prozeduren, die aufgerufen werden. Wenn der Call
Stichwort entfernt wurde, dann DoSomething
würde als Zeilenmarke analysiert werden , anstatt ein Prozeduraufruf, der den Code brechen würde:
DoSomething: DoSomethingElse 'only DoSomethingElse will run
Rückgabewerte
Um das Ergebnis eines Prozeduraufrufs abzurufen (z. B. Function
oder Property Get
Prozeduren), setzen Sie den Aufruf auf die rechte Seite einer Zuweisung:
result = ProcedureName
result = ProcedureName(argument1, argument2)
Bei Parametern müssen Klammern vorhanden sein. Wenn die Prozedur keine Parameter hat, sind die Klammern überflüssig.
Das ist verwirrend. Warum nicht immer immer Klammern verwenden?
In Klammern werden die Argumente von Funktionsaufrufen eingeschlossen . Die Verwendung für Prozeduraufrufe kann unerwartete Probleme verursachen.
Weil sie Fehler einführen können, sowohl zur Laufzeit durch Übergeben eines möglicherweise unbeabsichtigten Werts an die Prozedur, als auch zur Kompilierzeit, indem sie einfach eine ungültige Syntax sind.
Laufzeit
Redundante Klammern können Fehler verursachen. Bei einer Prozedur, die eine Objektreferenz als Parameter verwendet ...
Sub DoSomething(ByRef target As Range)
End Sub
... und mit Klammern aufgerufen:
DoSomething (Application.ActiveCell) 'raises an error at runtime
Dies führt zu einem Laufzeitfehler "Object Required" # 424. Andere Fehler sind unter anderen Umständen möglich: Hier wird die Application.ActiveCell
Range
Objektreferenz ausgewertet und als Wert übergeben, unabhängig von der Signatur der Prozedur, die angibt, dass das target
ByRef
. Der tatsächliche Wert, der von ByVal
an DoSomething
im obigen Snippet übergeben wurde, lautet Application.ActiveCell.Value
.
Klammern zwingen VBA, den Wert des Klammerausdrucks auszuwerten, und übergeben das Ergebnis ByVal
an die aufgerufene Prozedur. Wenn der Typ des ausgewerteten Ergebnisses nicht mit dem erwarteten Typ der Prozedur übereinstimmt und nicht implizit konvertiert werden kann, wird ein Laufzeitfehler ausgelöst.
Kompilierzeit
Dieser Code kann nicht kompiliert werden:
MsgBox ("Invalid Code!", vbCritical)
Der Ausdruck ("Invalid Code!", vbCritical)
kann nicht als Wert ausgewertet werden.
Das würde kompilieren und funktionieren:
MsgBox ("Invalid Code!"), (vbCritical)
Würde aber auf jeden Fall dumm aussehen. Vermeiden Sie redundante Klammern.
Explizite Aufrufsyntax
Call ProcedureName
Call ProcedureName(argument1, argument2)
Die explizite Aufrufsyntax erfordert das Schlüsselwort Call
und Klammern um die Argumentliste. Klammern sind redundant, wenn keine Parameter vorhanden sind. Diese Syntax wurde überholt, als die modernere implizite Aufrufsyntax zu VB hinzugefügt wurde.
Optionale Argumente
Einige Verfahren haben optionale Argumente. Optionale Argumente kommen immer nach erforderlichen Argumenten, aber die Prozedur kann ohne sie aufgerufen werden.
Wenn die Funktion ProcedureName
über zwei erforderliche Argumente ( argument1
, argument2
) und ein optionales Argument, optArgument3
, optArgument3
, könnte dies auf vier Arten aufgerufen werden:
' 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")
Die Struktur des Funktions-Headers, der hier aufgerufen wird, würde ungefähr so aussehen:
Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String) As String
Das Optional
Schlüsselwort gibt an, dass dieses Argument weggelassen werden kann. Wie bereits erwähnt, müssen optionale Argumente, die in die Kopfzeile eingefügt werden , am Ende nach den erforderlichen Argumenten angezeigt werden.
Sie können auch einen Standardwert für das Argument angeben, falls kein Wert an die Funktion übergeben wird:
Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String = "C") As String
Wenn in dieser Funktion das Argument für c
nicht angegeben wird, ist der Wert standardmäßig "C"
. Wenn ein Wert angegeben wird, wird der Standardwert überschrieben.