Sub-AnweisungSub statement

Deklariert den Namen, Argumente und den Code, die den Textkörper einer Sub-Prozedur bilden.Declares the name, arguments, and code that form the body of a Sub procedure.

SyntaxSyntax

[ Private | Public | Friend ] [ Static ] Sub name [ ( arglist ) ][ Private | Public | Friend ] [ Static ] Sub name [ ( arglist ) ]
[ statements ][ statements ]
[ Exit Sub ][ Exit Sub ]
[ statements ][ statements ]
End SubEnd Sub


Die Sub-Anweisungssyntax weist folgende drei Teile auf:The Sub statement syntax has these parts:

TeilPart BeschreibungDescription
PublicPublic Optional.Optional. Gibt an, dass auf die Sub-Prozedur von allen anderen Prozeduren in allen Modulen zugegriffen werden kann.Indicates that the Sub procedure is accessible to all other procedures in all modules. Bei Verwendung in einem Modul mit einer Option Private-Anweisung ist die Prozedur nicht außerhalb des Projekts verfügbar.If used in a module that contains an Option Private statement, the procedure is not available outside the project.
PrivatePrivate Optional.Optional. Gibt an, dass auf die Sub-Prozedur nur von anderen Prozeduren im Modul zugegriffen kann, wenn dies deklariert ist.Indicates that the Sub procedure is accessible only to other procedures in the module where it is declared.
FriendFriend Optional.Optional. Wird nur in einem Klassenmodul verwendet.Used only in a class module. Gibt an, dass die Sub-Prozedur im gesamten Projekt sichtbar ist, jedoch nicht sichtbar ist für einen Controller einer Instanz eines Objekts.Indicates that the Sub procedure is visible throughout the project, but not visible to a controller of an instance of an object.
StaticStatic Optional.Optional. Gibt an, dass die lokalen Variablen der Sub-Prozedur zwischen den Aufrufen beibehalten werden.Indicates that the Sub procedure's local variables are preserved between calls. 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.The Static attribute doesn't affect variables that are declared outside the Sub, even if they are used in the procedure.
namename Erforderlich.Required. Name für die Sub-Prozedur; folgt der Standardbenennungskonvention für Variablen.Name of the Sub; follows standard variable naming conventions.
arglistarglist Optional.Optional. Eine Liste mit Variablen, die die Argumente darstellen, die beim Aufruf an die Sub-Prozedur weitergegeben werden.List of variables representing arguments that are passed to the Sub procedure when it is called. Mehrere Variablen werden durch Komma getrennt angegeben.Multiple variables are separated by commas.
statementsstatements Optional.Optional. Eine beliebige Gruppe von Anweisungen, die in der Sub-Prozedur ausgeführt werden.Any group of statements to be executed within the Sub procedure.

Das arglist-Argument weist die folgende Syntax und folgende Teile auf:The arglist argument has the following syntax and parts:

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [()] [ As Type ] [ = DefaultValue ][ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ As type ] [ = defaultvalue ]


TeilPart BeschreibungDescription
OptionalOptional Optional.Optional. Keyword gibt an, dass ein Argument nicht erforderlich ist.Keyword indicating that an argument is not required. Wenn verwendet, müssen alle nachfolgenden Argumente in arglist optional sein und mithilfe des Schlüsselworts Optional deklariert werden.If used, all subsequent arguments in arglist must also be optional and declared by using the Optional keyword. Optional kann nicht für Argumente verwendet werden, wenn ParamArray verwendet wird.Optional can't be used for any argument if ParamArray is used.
ByValByVal Optional.Optional. Gibt an, dass das Argument nach Wert übergeben wird.Indicates that the argument is passed by value.
ByRefByRef Optional.Optional. Gibt an, dass das Argument nach Verweis übergeben wird.Indicates that the argument is passed by reference. ByRef ist die Standardeinstellung in Visual Basic.ByRef is the default in Visual Basic.
ParamArrayParamArray Optional.Optional. Wird nur als das letzte Argument in arglist verwendet, um darauf hinzuweisen, dass das letzte Argument ein Optionales Array aus Variant-Elementen ist.Used only as the last argument in arglist to indicate that the final argument is an Optional array of Variant elements. Mit dem Schlüsselwort ParamArray kann eine beliebige Anzahl von Argumenten angegeben werden.The ParamArray keyword allows you to provide an arbitrary number of arguments. ParamArray kann nicht mit ByVal, ByRef oder Optional verwendet werden.ParamArray can't be used with ByVal, ByRef, or Optional.
varnamevarname Erforderlich.Required. Name der Variable, die das Argument darstellt; folgt den Standardbenennungskonventionen für Variablen.Name of the variable representing the argument; follows standard variable naming conventions.
typetype Optional.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.Data type of the argument passed to the procedure; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (variable-length only), Object, Variant, or a specific object type. Wenn der Parameter nicht Optional lautet, kann auch ein benutzerdefinierter Typ angegeben werden.If the parameter is not Optional, a user-defined type may also be specified.
defaultvaluedefaultvalue Optional.Optional. Eine Konstante oder ein konstanter Ausdruck.Any constant or constant expression. Nur gültig für Optional-Parameter.Valid for Optional parameters only. Wenn der Typ Object ist, kann ein expliziter Standardwert nur Nothing lauten.If the type is an Object, an explicit default value can only be Nothing.

HinweiseRemarks

Wenn nicht explizit mitPublic, Private oder Friend angegeben, lautet die Standardeinstellung für alle Sub-Prozeduren „Public“.If not explicitly specified by using Public, Private, or Friend, Sub procedures are public by default.

Wenn Static nicht verwendet wird, wird der Wert der lokalen Variablen zwischen Aufrufen nicht beibehalten.If Static isn't used, the value of local variables is not preserved between calls.

Das Schlüsselwort Friend kann nur in Klassenmodulen verwendet werden.The Friend keyword can only be used in class modules. Auf Friend-Prozeduren kann jedoch durch Prozeduren in jedem beliebigen Modul eines Projekts zugegriffen werden.However, Friend procedures can be accessed by procedures in any module of a project. Eine Friend-Prozedur wird weder in der Typbibliothek ihrer übergeordneten Klasse angezeigt noch kann eine Friend-Prozedur spät gebunden werden.A Friend procedure doesn't appear in the type library of its parent class, nor can a Friend procedure be late bound.

Sub-Prozeduren können rekursiv sein; d. h. sie können sich selbst aufrufen, um eine bestimmte Aufgabe durchzuführen.Sub procedures can be recursive; that is, they can call themselves to perform a given task. Rekursion kann jedoch zum Stapelüberlauf führen.However, recursion can lead to stack overflow. Das Schlüsselwort Static wird in der Regel nicht mit rekursiven Sub-Prozeduren verwendet.The Static keyword usually is not used with recursive Sub procedures.

Der gesamte ausführbare Code muss in Prozeduren enthalten sein.All executable code must be in procedures. Sie können eine Sub-Prozedur nicht innerhalb einer anderen Sub-, Function- oder Property-Prozedur definieren.You can't define a Sub procedure inside another Sub, Function, or Property procedure.

Die Schlüsselwörter Exit Sub können zu einer sofortigen Beendigung einer Sub-Prozedur führen.The Exit Sub keywords cause an immediate exit from a Sub procedure. Das Programm wird weiterhin mit der Anweisung ausgeführt, die auf die Anweisung folgt, die die Sub-Prozedur aufgerufen hat.Program execution continues with the statement following the statement that called the Sub procedure. Eine beliebige Anzahl von Exit Sub-Anweisungen kann an beliebiger Stelle in einer Sub-Prozedur vorkommen.Any number of Exit Sub statements can appear anywhere in a Sub procedure.

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.Like a Function procedure, a Sub procedure is a separate procedure that can take arguments, perform a series of statements, and change the value of its arguments. Aber im Gegensatz zu einer Function-Prozedur, die einen Wert zurückgibt, kann eineSub-Prozedur nicht in einem Ausdruck verwendet werden.However, unlike a Function procedure, which returns a value, a Sub procedure can't be used in an expression.

Sie rufen eine Sub-Prozedur mithilfe des Prozedurnamens gefolgt von der Argumentliste auf.You call a Sub procedure by using the procedure name followed by the argument list. Detaillierte Informationen zum Aufrufen von Sub-Prozeduren finden Sie in der Call-Anweisung.See the Call statement for specific information about how to call Sub procedures.

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.Variables used in Sub procedures fall into two categories: those that are explicitly declared within the procedure and those that are not. Explizit in einer Prozedur deklarierte Variablen (unter Verwendung von Dim oder einer entsprechenden Anweisung) gelten lokal für die Prozedur.Variables that are explicitly declared in a procedure (using Dim or the equivalent) are always local to the procedure. 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.Variables that are used but not explicitly declared in a procedure are also local unless they are explicitly declared at some higher level outside the procedure.

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.A procedure can use a variable that is not explicitly declared in the procedure, but a naming conflict can occur if anything you defined at the module level has the same name. 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.If your procedure refers to an undeclared variable that has the same name as another procedure, constant or variable, it is assumed that your procedure is referring to that module-level name. Deklarieren Sie Variablen explizit, um solche Konflikte zu vermeiden.To avoid this kind of conflict, explicitly declare variables. Sie können eine Option Explicit-Anweisung verwenden, um die explizite Deklaration von Variablen zu erzwingen.You can use an Option Explicit statement to force explicit declaration of variables.

Hinweis

Es ist nicht möglich, GoSub, GoTo oder Return zu verwenden, um eine Sub-Prozedur zu beginnen oder zu beenden.You can't use GoSub, GoTo, or Return to enter or exit a Sub procedure.

BeispielExample

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.This example uses the Sub statement to define the name, arguments, and code that form the body of a Sub procedure.

' 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 auchSee also

Support und FeedbackSupport and feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation?Have questions or feedback about Office VBA or this documentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.