Function-AnweisungFunction statement

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

SyntaxSyntax

[Public | private | Friend] [ Statisch ] Function (Funktion ) Name [( Arglist )] [ Als Typ ][Public | Private | Friend] [ Static ] Function name [ ( arglist ) ] [ As type ]
[ statements ][ statements ]
[ name = expression ][ name = expression ]
[ Exit Function ][ Exit Function ]
[ statements ][ statements ]
[ name = expression ][ name = expression ]
End FunctionEnd Function


Die Syntax der Function-Anweisung umfasst die folgenden Komponenten:The Function statement syntax has these parts:

TeilPart BeschreibungDescription
PublicPublic Optional.Optional. Gibt an, dass auf die Function-Prozedur von allen anderen Prozeduren in allen Modulen zugegriffen werden kann.Indicates that the Function procedure is accessible to all other procedures in all modules. Wenn dieses Argument in einem Modul verwendet wird, das eine Option Private-Anweisung enthält, kann auf die Prozedur nur innerhalb des Projekts zugegriffen werden.If used in a module that contains an Option Private, the procedure is not available outside the project.
PrivatePrivate Optional.Optional. Gibt an, dass auf die Function-Prozedur nur von anderen Prozeduren in dem Modul zugegriffen werden kann, in dem sie deklariert wurde.Indicates that the Function 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 Function-Prozedur im gesamten Projekt sichtbar ist, jedoch nicht für den Controller einer Objektinstanz.Indicates that the Function 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 einer Function-Prozedur zwischen Aufrufen erhalten bleiben.Indicates that the Function procedure's local variables are preserved between calls. Auf Variablen, die außerhalb der Function-Prozedur deklariert wurden, hat das Static-Attribut keinen Einfluss, selbst wenn sie in der Prozedur verwendet werden.The Static attribute doesn't affect variables that are declared outside the Function, even if they are used in the procedure.
namename Erforderlich.Required. Name für die Function-Prozedur; folgt der Standardbenennungskonvention für Variablen.Name of the Function; follows standard variable naming conventions.
arglistarglist Optional.Optional. Variablenliste mit den Argumenten, die an die Function-Prozedur bei ihrem Aufruf übergeben werden.List of variables representing arguments that are passed to the Function procedure when it is called. Mehrere Variablen werden durch Kommas getrennt.Multiple variables are separated by commas.
typetype Optional.Optional. Datentyp des Werts, der von der Function-Prozedur zurückgegeben wird; kann Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (derzeit nicht unterstützt), Date, String (außer feste Länge), Object, Variant oder ein benutzerdefinierter Typ sein.Data type of the value returned by the Function procedure; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (except fixed length), Object, Variant, or any user-defined type.
statementsstatements Optional.Optional. Eine Gruppe von Anweisungen, die in der Function-Prozedur ausgeführt werden sollen.Any group of statements to be executed within the Function procedure.
expressionexpression Optional.Optional. Rückgabewert der Function-Anweisung.Return value of the Function.

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. Gibt an, dass ein Argument nicht erforderlich ist.Indicates 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 lediglich als letztes Argument in arglist verwendet, um anzuzeigen, dass das letzte Argument ein Optional-Array von 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 können Sie eine beliebige Anzahl von Argumenten bereitstellen.The ParamArray keyword allows you to provide an arbitrary number of arguments. Es darf jedoch nicht zusammen mit ByVal, ByRef oder Optional verwendet werden.It may not 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. Kann Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (derzeit nicht unterstützt), Date, String (nur Variablenlänge), Object, Variant oder ein spezifischer Objekttyp sein.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 beliebige Konstante oder ein Konstantenausdruck.Any constant or constant expression. Nur gültig, wenn der Parameter Optional ist.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 Function-Prozeduren „Public“.If not explicitly specified by using Public, Private, or Friend, Function 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 in allen Modulen des 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 does not appear in the type library of its parent class, nor can a Friend procedure be late bound.

Function-Prozeduren können rekursiv sein; d. h. sie können sich selbst aufrufen, um eine bestimmte Aufgabe durchzuführen.Function 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 Function-Prozeduren verwendet.The Static keyword usually isn't used with recursive Function procedures.

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

Die Exit Function-Anweisung führt dazu, dass eine Function-Prozedur sofort beendet wird.The Exit Function statement causes an immediate exit from a Function procedure. Das Programm wird weiterhin mit der Anweisung ausgeführt, die auf die Anweisung folgt, die die Function-Prozedur aufgerufen hat.Program execution continues with the statement following the statement that called the Function procedure. Eine beliebige Anzahl von Exit Function-Anweisungen kann an beliebiger Stelle in einer Function-Prozedur vorkommen.Any number of Exit Function statements can appear anywhere in a Function procedure.

Wie eine Sub-Prozedur ist auch eine Function-Prozedur eine separate Prozedur, die Argumente verwendet, eine Reihe von Anweisungen ausführen und die Werte der zugehörigen Argumente ändern kann.Like a Sub procedure, a Function procedure is a separate procedure that can take arguments, perform a series of statements, and change the values of its arguments. Anders als bei einer Sub-Prozedur können Sie eine Function-Prozedur jedoch auf gleiche Weise auf der rechten Seite eines Ausdrucks wie eine interne Funktion verwenden, z. B. Sqr, Cos oder Chr, wenn Sie den von der Funktion zurückgegebenen Wert verwenden möchten.However, unlike a Sub procedure, you can use a Function procedure on the right side of an expression in the same way you use any intrinsic function, such as Sqr, Cos, or Chr, when you want to use the value returned by the function.

Sie können eine Function-Prozedur aufrufen, indem Sie den Funktionsnamen, gefolgt von der Liste der Argumente in Klammern, in einem Ausdruck verwenden.You call a Function procedure by using the function name, followed by the argument list in parentheses, in an expression. Detaillierte Informationen zum Aufrufen von Function-Prozeduren finden Sie in der Call-Anweisung.See the Call statement for specific information about how to call Function procedures.

Wenn ein Wert von einer Funktion zurückgegeben werden soll, weisen Sie den Wert dem Namen der Funktion zu.To return a value from a function, assign the value to the function name. Solche Zuweisungen können beliebig oft an beliebigen Stellen in der Prozedur vorgenommen werden.Any number of such assignments can appear anywhere within the procedure. Wenn name kein Wert zugewiesen wurde, gibt die Prozedur einen Standardwert zurück: eine numerische Funktion gibt 0 zurück, eine Zeichenfolgenfunktion eine Zeichenfolge der Länge NULL ("") und eine Variant-Funktion gibt einen Wert Empty zurück.If no value is assigned to name, the procedure returns a default value: a numeric function returns 0, a string function returns a zero-length string (""), and a Variant function returns Empty. Eine Funktion, die eine Objektreferenz zurückgibt, gibt Nothing zurück, wenn keine Objektreferenz zu name (mit Set) innerhalb der Funktion zugewiesen ist.A function that returns an object reference returns Nothing if no object reference is assigned to name (using Set) within the Function.

Im folgende Beispiel wird gezeigt, wie einer Funktion ein Rückgabewert zugewiesen wird.The following example shows how to assign a return value to a function. In diesem Fall ist false dem Namen zugewiesen, was angibt, dass ein Wert nicht gefunden wurde.In this case, False is assigned to the name to indicate that some value was not found.

Function BinarySearch(. . .) As Boolean 
'. . . 
 ' Value not found. Return a value of False. 
 If lower > upper Then 
  BinarySearch = False 
  Exit Function 
 End If 
'. . . 
End Function

In Function-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 Function procedures fall into two categories: those that are explicitly declared within the procedure and those that are not.

Explizit (über Dim oder eine entsprechende Anweisung) in einer Prozedur deklarierte Variablen sind innerhalb dieser Prozedur immer lokal.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. Verwendet Ihre Prozedur eine nicht deklarierte 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.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 refers to that module-level name. Deklarieren Sie Variablen explizit, um solche Konflikte zu vermeiden.Explicitly declare variables to avoid this kind of conflict. 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.

Visual Basic ordnet arithmetische Ausdrücke für mehr interne Effizienz möglicherweise neu an.Visual Basic may rearrange arithmetic expressions to increase internal efficiency. Verwenden Sie eine Function-Prozedur nicht in einem arithmetischen Ausdruck, wenn die Funktion den Wert der Variablen im gleichen Ausdruck ändert.Avoid using a Function procedure in an arithmetic expression when the function changes the value of variables in the same expression. Weitere Informationen zu arithmetischen Operatoren finden Sie unter Operatoren.For more information about arithmetic operators, see Operators.

BeispielExample

In diesem Beispiel wird die Function-Anweisung verwendet, um den Namen, Argumente und den Code für den Textkörper einer Sub-Prozedur zu deklarieren.This example uses the Function statement to declare the name, arguments, and code that form the body of a Function procedure. Im letzten Beispiel werden definierte, initialisierte Optional-Argumente verwendet.The last example uses hard-typed, initialized Optional arguments.

' The following user-defined function returns the square root of the 
' argument passed to it. 
Function CalculateSquareRoot(NumberArg As Double) As Double 
 If NumberArg < 0 Then ' Evaluate argument. 
  Exit Function ' Exit to calling procedure. 
 Else 
  CalculateSquareRoot = Sqr(NumberArg) ' Return square root. 
 End If 
End Function

Durch Verwenden des Schlüsselwort ParamArray kann eine Funktion eine variable Anzahl von Argumenten zulassen.Using the ParamArray keyword enables a function to accept a variable number of arguments. In der folgenden Definition wird es als Wert übergeben.In the following definition, it is passed by value.

Function CalcSum(ByVal FirstArg As Integer, ParamArray OtherArgs()) 
Dim ReturnValue 
' If the function is invoked as follows: 
ReturnValue = CalcSum(4, 3, 2, 1) 
' Local variables are assigned the following values: FirstArg = 4, 
' OtherArgs(1) = 3, OtherArgs(2) = 2, and so on, assuming default 
' lower bound for arrays = 1. 


Optionale Argumente können andere Standardwerte und Typen als Variant sein.Optional arguments can have default values and types other than Variant.

' If a function's arguments are defined as follows: 
Function MyFunc(MyStr As String,Optional MyArg1 As _
 Integer = 5,Optional MyArg2 = "Dolly") 
Dim RetVal 
' The function can be invoked as follows: 
RetVal = MyFunc("Hello", 2, "World") ' All 3 arguments supplied. 
RetVal = MyFunc("Test", , 5) ' Second argument omitted. 
' Arguments one and three using named-arguments. 
RetVal = MyFunc(MyStr:="Hello ", MyArg1:=7) 

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.