Die Aufrufanweisung in VBA (Die Aufrufanweisung in VBA), Lektion, Seite 720462
https://www.purl.org/stefan_ram/pub/vba_aufrufanweisung_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
VBA-Kurs

Aufrufanweisungen in VBA 
»Call«

Wenn die Anzeige des Ergebnisses nicht gewünscht wird, kann Call statt Debug.Print verwendet werden.

Call ist ein Schlüsselwort: Es ist kein Teil der Standardbibliothek, sondern gehört zur Syntax der Programmiersprache.

Bei Schlüsselwörtern wie Call ist die Groß- und Kleinschreibung nicht signifikant (egal).

Call und Shell müssen durch Leerraum getrennt sein, damit sie als zwei verschiedene lexikalische Einheiten (Wörter) erkannt werden.

Direktbereich
Call Shell( PathName := "Calc" )
Code-Bereich

Option Explicit

Sub Main

Call Shell( PathName := "Calc" )

End Sub

Aufruf-Anweisung ohne Call

Die Aufruf-Anweisung ohne »Call« beginnt direkt mit dem Namen einer Funktion. Die Argumente dieser Hauptfunktion der Anweisung sollten bei dieser Form des Aufrufs nicht  eingeklammert werden.

Ein Aufruf erfolgt in der Regel entweder:
  ● mit  Call (oder in einem Ausdruck) und mit  Klammern oder
  ● ohne  Call und ohne  Klammern.

Code-Bereich

Option Explicit

Sub Main

Shell "Calc"

End Sub

Code-Bereich

Option Explicit

Sub Main

Shell PathName := "Calc"

End Sub

Modul1

Option Explicit

Sub Main

Debug.Print Shell( PathName := "Calc" )

End Sub

Protokoll
 4532

Wir verwenden Debug.Print, wenn wir den Wert  eines Aufrufs sehen wollen, und eine Aufruf-Anweisung (mit oder ohne CALL), wenn wir den Wert des Aufrufs nicht  sehen wollen.
Eine eventuelle Wirkung  des Aufrufs tritt in jedem Fall ein.

Da »Shell« hinter »Debug.Print« nicht am Anfang einer Anweisung steht, müssen Klammern verwendet werden.

Aufruf-Anweisung mit mehreren Argumenten

FileCopy "from", "to"
Kopiert die Datei »from« auf die Datei »to«
FileCopy ( "from" ),"to"
Das Einklammern eines Arguments ist zwar möglich, hat aber eine spezielle Bedeutung, die später erklärt werden wird. Falls nicht gerade diese spezielle Bedeutung beabsichtigt ist, sollte es daher vermieden werden.
FileCopy( "from", "to" )
Das Einklammern mehrerer Argumente ist ohne Verwendung von »CALL« nicht zulässig und führt zu einer Fehlermeldung.
Fehler beim Kompilieren:
Erwartet: =
Call FileCopy( "from" ,"to" )
Wenn beide Argumente eingeklammert werden sollen, dann ist es richtig, »CALL« zu verwenden. Aber es hätte dieselbe Bedeutung und wäre kürzer, sowohl auf »CALL« als auch auf die Klammern zu verzichten (wie beim allerersten Beispiel).
Call FileCopy(( "from" ),"to" )
Wenn beide Argumente eingeklammert sind, dann kann auch noch ein Argument einzeln eingeklammert werden. Dies hat wieder eine spezielle Bedeutung, welche später erklärt werden wird. Bis dahin sollte es vermieden werden.

Bei Aufrufen mit mehreren Argumenten erhöhen benannte Argumente die Lesbarkeit und helfen, Mißverständnisse zu vermeiden.

FileCopy Source := "C:\example.txt", Destination := "C:\example1.txt"

Call FileCopy( Source := "C:\example.txt", Destination := "C:\example2.txt" )

Obligatorischer Leerraum in Syntaxdiagrammen

Bei der Einführung in Syntaxdiagramme hatten wir erwähnt, daß Leerraum an der Stelle eines Pfeils in einem Syntaxdiagramm manchmal eingefügt werden muß. Damals konnte jedoch noch kein Beispiel dafür gegeben werden. Nun sind wir soweit, daß wir ein Beispiel dafür geben können.

Der Leerraum muß  eingefügt werden, falls der Teil links vom Pfeil mit dem Teil rechts vom Pfeil ohne Leeraum zu einer an dieser Stelle nicht gemeinten lexikalischen Einheit verbunden werden würde.

Falls ein Wort wie »SHELL« direkt hinter ein anderes Wort wie »CALL« geschrieben wird, kann es dann vorkommen, daß beide Wörter zu einer lexikalischen Einheit »CALLSHELL« verbunden werden, welche eine andere Bedeutung hat als zwei aufeinanderfolgende Wörter »CALL« und »SHELL«. Deswegen muß dann ein Leerzeichen zwischen beide Wörter eingefügt werden, um sie voneinander zu trennen.

Falls nicht die lexikalische Einheit »CALLSHELL« verwendet werden soll, so ist bei der Anwendung des folgenden Syntaxdiagramms in der Regel Leerraum für den mittleren Pfeil einzusetzen. Im Zweifelsfall kann immer Leerraum eingesetzt werden, weil dies an der Stelle eines Pfeiles stets erlaubt ist.

Syntaxdiagramm
Vorzeichenfolge
.----. .-----.
--->( CALL )--->( SHELL )--->
'----' '-----'

Eine ähnlich Situation findet man auch bei dem schon behandelten »REM« für Kommentare: Wenn diesem ein Buchstabe oder eine Ziffer folgen soll, dann muß direkt nach »REM« erst einmal Leerraum stehen.

Die allgemeine Regel besagt, daß Leerraum zwischen zwei Teilen eines Programms stehen muß, wenn der Anfang des zweiten Teils sonst noch die lexikalische Einheit am Ende des ersten Teils verlängern könnte und dies nicht gewünscht ist. Im Zweifel kann man einfach vor und nach allem, das eine einzelne lexikalische Einheit sein soll, Leerraum einfügen.

Allgemein gilt die Regel, daß ein Leerzeichen hinter einer lexikalischen Einheit nicht entfallen darf, wenn sonst zwei Zeichen aus der Gruppe der Buchstaben, Ziffern oder Grundstriche, die zuvor durch das Leerzeichen getrennt waren, direkt hintereinanderstehen würden.

Optionaler Leerraum in Syntaxdiagrammen

Syntaxdiagramm
Vorzeichenausdruck
.-. .----------.
--->( - )--->| Numerale |--->
'-' '----------'

Ein Vorzeichen vor einem Numerale muß in der Regel nicht  mit einem Leerzeichen abgetrennt werden, da es nicht mit dem Numerale zu einer lexikalischen Einheit verbunden werden kann. Es ist jedoch erlaubt  an dieser Stelle Leerraum zu verwenden, genauso wie auch direkt vor dem Vorzeichen oder direkt hinter dem Numerale Leeraum eingefügt werden darf.

Das obenstehende Syntaxdiagramm gibt den Aufbau eines Quelltexts wie »-␣␣65« wieder: Dieser besteht aus zwei lexikalischen Einheiten: Dem Operator »-« und dem Numerale »65«. Beide sind lexikalische Einheiten. Das heißt, daß vor ihnen, hinter ihnen und zwischen ihnen Leerraum eingefügt werden darf, obwohl dieser nicht ausdrücklich in Form von Kästchen im Syntaxdiagramm erscheint.

Aus Sicht der Syntax besteht der Quelltext »-␣␣65« also nur aus einer Folge zweier  lexikalischer Einheiten: dem Operator »-« und dem Numerale »65«, und nicht  aus einer Folge von fünf Schriftzeichen (Minuszeichen, Leerzeichen. Leerzeichen, Sechs, und Fünf), denn im Syntaxdiagramm erscheinen als Kästchen nur noch lexikalische Einheiten, Leerraum wird nicht mehr ausdrücklich durch Kästchen dargestellt.

Ob Leerraum obligatorisch oder optional ist, kann nicht an den Syntaxdiagrammen alleine abgelesen werden. Vielmehr muß man dazu auch die Regeln kennen, nach denen lexikalische Einheiten erkannt werden. Diese Regeln sind an dieser Stelle des Kurses aber noch gar nicht vollständig erläutert worden. Doch zum Glück kann man im Zweifel vor und nach einer lexikalischen Einheit immer Leerraum einsetzen, so daß es deswegen nicht nötig ist, jetzt schon alle Regeln vollständig zu kennen.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram720462 stefan_ram:720462 Die Aufrufanweisung in VBA Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd720462, slrprddef720462, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/vba_aufrufanweisung_de