VBA-Programmierung in Microsoft Excel

Tutorial: Excel-Beispiele

VBA-Begriff: Sub-Anweisung

Deklariert den Namen, die Argumente und den Code für den Rumpf einer Sub-Prozedur.

Syntax

[Private | Public] [Static] Sub Name [(ArgListe)]
[Anweisungen]
[Exit Sub]
[Anweisungen]

End Sub

Die Syntax der Sub-Anweisung besteht aus folgenden Teilen:

Teil Beschreibung
Public Optional. Auf die Sub-Prozedur kann von allen anderen Prozeduren in allen Modulen zugegriffen werden. Bei Verwendung in einem Modul (mit einer Option Private-Anweisung) kann auf die Prozedur nur innerhalb des Projekts zugegriffen werden.
Private Optional. Auf die Sub-Prozedur kann nur durch andere Prozeduren aus dem Modul zugegriffen werden, in dem sie deklariert wurde.
Static Optional. Die lokalen Variablen der Sub-Prozedur bleiben zwischen Aufrufen erhalten. Das Attribut Static wirkt sich nicht auf Variablen aus, die außerhalb der Sub-Prozedur deklariert wurden, auch wenn sie in der Prozedur verwendet werden.
Name Erforderlich. Name der Sub-Prozedur gemäß den Standardkonventionen für Namen von Variablen.
ArgListe Optional. Variablenliste mit den Argumenten, die an die Sub-Prozedur beim Aufruf übergeben werden. Mehrere Variablen werden durch Kommas getrennt.
Anweisungen Optional. Eine beliebige Gruppe auszuführender Anweisungen im Rumpf der Sub-Prozedur.

Das Argument ArgListe verwendet die folgende Syntax und die folgenden Teile:

[Optional] [ByVal | ByRef] [ParamArray] VarName[( )] [As Typ] [= Standardwert]

Teil Beschreibung
Optional Optional. Schlüsselwort, das angibt, daß ein Argument nicht erforderlich ist. Alle im Anschluß an Optional in ArgListe angegebenen Argumente müssen auch optional sein und mit dem Schlüsselwort Optional deklariert werden. Optional kann nicht verwendet werden, wenn ParamArray verwendet wird.
ByVal Optional. Das Argument wird als Wert übergeben.
ByRef Optional. Das Argument wird als Referenz übergeben. ByRef ist der Standard in Visual Basic.
ParamArray Optional. Ist nur als letztes Argument in ArgListe zulässig und gibt an, daß das letzte Element ein als Optional deklariertes Datenfeld mit Variant-Elementen ist. Das Schlüsselwort ParamArray erlaubt die Angabe einer variablen Anzahl von Argumenten und darf nicht in Kombination mit den Schlüsselwörtern ByVal, ByRef oder Optional verwendet werden.
VarName Erforderlich. Name der Variablen, die das Argument darstellt, gemäß den Standardkonventionen für Namen von Variablen.
Typ Optional. Datentyp des an die Prozedur zu übergebenden Arguments. Zulässige Typen sind: Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (zur Zeit nicht unterstützt), Date, String (nur Zeichenfolgen variabler Länge), Object, Variant. Ist der Parameter nicht Optional, kann ein benutzerdefinierter Typ oder ein Objekttyp angegeben werden.
Standardwert Optional. Eine beliebige Konstante oder ein Konstantenausdruck. Nur gültig, wenn der Parameter Optional entspricht. Ist der Typ Object, so kann der explizite Standardwert nur Nothing sein.

Bemerkungen

Sub-Prozeduren sind standardmäßig öffentlich, wenn sie nicht explizit mit Public oder Private festgelegt werden. Wird Static nicht angegeben, so bleiben die Werte lokaler Variablen zwischen den Aufrufen nicht erhalten.

Vorsicht   Sub-Prozeduren können rekursiv sein (d.h., sie rufen sich selbst auf, um eine bestimmte Operation durchzuführen). Rekursionen können jedoch zu Stapelüberläufen führen. Vermeiden Sie daher das Schlüsselwort Static in rekursiven Sub-Prozeduren.

Der gesamte ausführbare Code muß sich in Prozeduren befinden. Innerhalb einer Sub-, Function- oder Property-Prozedur kann keine weitere Sub-Prozedur definiert werden.

Das Schlüsselwort Exit Sub führt zum unmittelbaren Verlassen einer Sub-Prozedur. Die Programmausführung wird mit der Anweisung fortgesetzt, die auf die Anweisung folgt, die die Sub-Prozedur aufgerufen hat. Exit Sub-Anweisungen können beliebig oft an beliebigen Stellen innerhalb einer Sub-Prozedur verwendet werden.

Wie bei einer Function-Prozedur handelt es sich bei der Sub-Prozedur um eine eigenständige Prozedur, die Argumente erhalten, eine Reihe von Anweisungen ausführen und die Werte der übergebenen Argumente ändern kann. Im Gegensatz zu einer Function-Prozedur, die einen Wert zurückgibt, kann eine Sub-Prozedur aber nicht in einem Ausdruck verwendet werden.

Der Aufruf einer Sub-Prozedur erfolgt durch Angabe des Prozedurnamens gefolgt von der Argumentliste. In der Beschreibung der Call-Anweisung finden Sie weitere Informationen zum Aufrufen von Sub-Prozeduren.

Variablen in Sub-Prozeduren können entweder explizit deklariert oder ohne Deklaration verwendet werden. Explizit (über Dim oder eine entsprechende Anweisung) in einer Prozedur deklarierte Variablen sind innerhalb dieser Prozedur immer lokal. Variablen, die in einer Prozedur verwendet, aber nicht dort deklariert werden, sind auch lokal, sofern sie nicht bereits explizit auf einer höheren Ebene außerhalb der Prozedur deklariert wurden.

Vorsicht   Eine Prozedur kann eine nicht explizit in der Prozedur deklarierte Variable zwar verwenden, aber es kann zu Namenskonflikten kommen, falls ein anderes auf Modulebene definiertes Element denselben Namen hat. Verwendet Ihre Prozedur eine nichtdeklarierte Variable mit einem Namen, der dem Namen einer anderen Prozedur, Konstanten oder Variablen entspricht, so wird die Variable als Verweis auf den Namen interpretiert, der auf Modulebene definiert wurde. Deklarieren Sie Variablen explizit, um derartige Konflikte zu vermeiden. Mit der Anweisung Option Explicit können Sie die explizite Deklaration von Variablen erzwingen.

Anmerkung   Eine Sub-Prozedur können Sie nicht mit GoSub, GoTo oder Return aufrufen oder verlassen.