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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow