Sub-Anweisung

Deklariert den Namen, die Argumente und den Code, die den Text einer Sub-Prozedur bilden.

Syntax

[ Privat | Öffentlich | Freund ] [ Statisch ] Untername [ ( arglist ) ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub

Die Sub-Anweisungssyntax weist folgende drei Teile auf:

Teil Beschreibung
Public Optional. Gibt an, dass auf die Sub-Prozedur von allen anderen Prozeduren in allen Modulen zugegriffen werden kann. Bei Verwendung in einem Modul mit einer Option Private-Anweisung ist die Prozedur nicht außerhalb des Projekts verfügbar.
Private Optional. Gibt an, dass auf die Sub-Prozedur nur von anderen Prozeduren im Modul zugegriffen kann, wenn dies deklariert ist.
Friend Optional. Wird nur in einem Klassenmodul verwendet. Gibt an, dass die Sub-Prozedur im gesamten Projekt sichtbar ist, jedoch nicht sichtbar ist für einen Controller einer Instanz eines Objekts.
Static Optional. Gibt an, dass die lokalen Variablen der Sub-Prozedur zwischen den Aufrufen beibehalten werden. Das Static-Attribut wirkt sich auch dann nicht auf Variablen aus, die außerhalb der Sub deklariert werden, wenn sie in der Prozedur verwendet werden.
name Erforderlich. Name für die Sub-Prozedur; folgt der Standardbenennungskonvention für Variablen.
arglist Optional. Eine Liste mit Variablen, die die Argumente darstellen, die beim Aufruf an die Sub-Prozedur weitergegeben werden. Mehrere Variablen werden durch Komma getrennt angegeben.
statements Optional. Eine beliebige Gruppe von Anweisungen, die in der Sub-Prozedur ausgeführt werden.

Das arglist-Argument weist die folgende Syntax und folgende Teile auf:

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ] [ =defaultvalue ]

Teil Beschreibung
Optional Optional. Keyword gibt an, dass ein Argument nicht erforderlich ist. Wenn verwendet, müssen alle nachfolgenden Argumente in arglist optional sein und mithilfe des Schlüsselworts Optional deklariert werden. Optional kann nicht für Argumente verwendet werden, wenn ParamArray verwendet wird.
ByVal Optional. Gibt an, dass das Argument nach Wert übergeben wird.
ByRef Optional. Gibt an, dass das Argument nach Verweis übergeben wird. ByRef ist die Standardeinstellung in VBA im Gegensatz zu Visual Basic .NET.
ParamArray Optional. Wird nur als letztes Argument in arglist verwendet, um anzugeben, dass das letzte Argument ein optionalesArray von Variant-Elementen ist. Mit dem Schlüsselwort ParamArray können Sie eine beliebige Anzahl von Argumenten bereitstellen. ParamArray kann nicht mit ByVal, ByRef oder Optional verwendet werden.
varname Erforderlich. Name der Variable, die das Argument darstellt; folgt den Standardbenennungskonventionen für Variablen.
type Optional. Datentyp des Arguments, das an die Prozedur weitergegeben wird. KannByte, Boolean, Integer, Long, Currency, Single, Double, Decimal (derzeit nicht unterstützt), Date, String (nur Variablenlänge), Object, Variant oder ein spezifischer Objekttyp. Wenn der Parameter nicht Optional lautet, kann auch ein benutzerdefinierter Typ angegeben werden.
defaultvalue Optional. Eine Konstante oder ein konstanter Ausdruck. Nur gültig für Optional-Parameter. Wenn der Typ Object ist, kann ein expliziter Standardwert nur Nothing lauten.

Hinweise

Wenn nicht explizit mitPublic, Private oder Friend angegeben, lautet die Standardeinstellung für alle Sub-Prozeduren „Public“.

Wenn Static nicht verwendet wird, wird der Wert der lokalen Variablen zwischen Aufrufen nicht beibehalten.

Das Schlüsselwort Friend kann nur in Klassenmodulen verwendet werden. Auf Friend-Prozeduren kann jedoch durch Prozeduren in jedem beliebigen Modul eines Projekts zugegriffen werden. Eine Friend-Prozedur wird weder in der Typbibliothek ihrer übergeordneten Klasse angezeigt noch kann eine Friend-Prozedur spät gebunden werden.

Sub-Prozeduren können rekursiv sein; d. h. sie können sich selbst aufrufen, um eine bestimmte Aufgabe durchzuführen. Rekursion kann jedoch zum Stapelüberlauf führen. Das Schlüsselwort Static wird in der Regel nicht mit rekursiven Sub-Prozeduren verwendet.

Der gesamte ausführbare Code muss in Prozeduren enthalten sein. Sie können eine Sub-Prozedur nicht innerhalb einer anderen Sub-, Function- oder Property-Prozedur definieren.

Die Schlüsselwörter Exit Sub können zu einer sofortigen Beendigung einer Sub-Prozedur führen. Das Programm wird weiterhin mit der Anweisung ausgeführt, die auf die Anweisung folgt, die die Sub-Prozedur aufgerufen hat. Eine beliebige Anzahl von Exit Sub-Anweisungen kann an beliebiger Stelle in einer Sub-Prozedur vorkommen.

Wie eine Function-Prozedur ist auch eine Sub-Prozedur eine separate Prozedur, die Argumente verwendet, eine Reihe von Anweisungen ausführen und die Werte der zugehörigen Argumente ändern kann. Aber im Gegensatz zu einer Function-Prozedur, die einen Wert zurückgibt, kann eineSub-Prozedur nicht in einem Ausdruck verwendet werden.

Sie rufen eine Sub-Prozedur mithilfe des Prozedurnamens gefolgt von der Argumentliste auf. Detaillierte Informationen zum Aufrufen von Sub-Prozeduren finden Sie in der Call-Anweisung.

In Sub-Prozeduren verwendete Variablen können in zwei Kategorien unterteilt werden: solche, die explizit in der Prozedur deklariert sind, und solche, bei denen dies nicht der Fall ist. Explizit in einer Prozedur deklarierte Variablen (unter Verwendung von Dim oder einer entsprechenden Anweisung) gelten lokal für die Prozedur. Variablen, die nicht explizit deklariert werden, sind auch lokal in der Prozedur, es sei denn, sie sind auf höherer Ebene außerhalb der Prozedur deklariert.

Eine Prozedur kann eine Variable verwenden, die nicht explizit in der Prozedur deklariert ist, es kann jedoch zu einem Benennungskonflikt kommen, wenn ein auf Modulebene deklariertes Element den gleichen Namen aufweist. Wenn die Prozedur auf eine nicht deklarierte Variable verweist, die den gleichen Namen wie eine andere Prozedur, Konstante oder Variable aufweist, wird davon ausgegangen, dass die Prozedur auf diesen Namen auf Modulebene verweist. Deklarieren Sie Variablen explizit, um solche Konflikte zu vermeiden. Sie können eine optionsexplizite Anweisung verwenden, um die explizite Deklaration von Variablen zu erzwingen.

Hinweis

Es ist nicht möglich, GoSub, GoTo oder Return zu verwenden, um eine Sub-Prozedur zu beginnen oder zu beenden.

Beispiel

In diesem Beispiel wird die Sub-Anweisung verwendet, um den Namen, Argumente und den Code für den Textkörper einer Sub-Prozedur zu definieren.

' Sub procedure definition. 
' Sub procedure with two arguments. 
Sub SubComputeArea(Length, TheWidth) 

   Dim Area As Double ' Declare local variable. 

   If Length = 0 Or TheWidth = 0 Then 
      ' If either argument = 0. 
      Exit Sub ' Exit Sub immediately. 
   End If 
   
   Area = Length * TheWidth ' Calculate area of rectangle. 
   Debug.Print Area ' Print Area to Debug window. 

End Sub

Siehe auch

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.