Function-Anweisung
Deklariert den Namen, Argumente und den Code, die den Textkörper einer Funktionsprozedur bilden.
Syntax
[Public | Private | Friend] [ Static ] Functionname [ ( arglist ) ] [ Astype ]
[ statements ]
[ name=expression ]
[ Exit Function ]
[ statements ]
[ name=expression ]
End Function
Die Syntax der Function-Anweisung umfasst die folgenden Komponenten:
Teil | Beschreibung |
---|---|
Public | Optional. Gibt an, dass auf die Function-Prozedur von allen anderen Prozeduren in allen Modulen zugegriffen werden kann. 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. |
Private | Optional. Gibt an, dass auf die Function-Prozedur nur von anderen Prozeduren in dem Modul zugegriffen werden kann, in dem sie deklariert wurde. |
Friend | Optional. Wird nur in einem Klassenmodul verwendet. Gibt an, dass die Function-Prozedur im gesamten Projekt sichtbar ist, jedoch nicht für den Controller einer Objektinstanz. |
Static | Optional. Gibt an, dass die lokalen Variablen einer Function-Prozedur zwischen Aufrufen erhalten bleiben. Auf Variablen, die außerhalb der Function-Prozedur deklariert wurden, hat das Static-Attribut keinen Einfluss, selbst wenn sie in der Prozedur verwendet werden. |
name | Erforderlich. Name für die Function-Prozedur; folgt der Standardbenennungskonvention für Variablen. |
arglist | Optional. Variablenliste mit den Argumenten, die an die Function-Prozedur bei ihrem Aufruf übergeben werden. Mehrere Variablen werden durch Kommas getrennt. |
type | 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. |
statements | Optional. Eine Gruppe von Anweisungen, die in der Function-Prozedur ausgeführt werden sollen. |
expression | Optional. Rückgabewert der Function-Anweisung. |
Das arglist-Argument weist die folgende Syntax und folgende Teile auf:
[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ] [ =defaultvalue ]
Teil | Beschreibung |
---|---|
Optional | Optional. 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 lediglich als letztes Argument in arglist verwendet, um anzuzeigen, dass das letzte Argument ein Optional-Array von Variant-Elementen ist. Mit dem Schlüsselwort ParamArray können Sie eine beliebige Anzahl von Argumenten bereitstellen. Es darf jedoch nicht zusammen 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. 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. Wenn der Parameter nicht Optional lautet, kann auch ein benutzerdefinierter Typ angegeben werden. |
defaultvalue | Optional. Eine beliebige Konstante oder ein Konstantenausdruck. Nur gültig, wenn der Parameter Optional ist. 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 Function-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 in allen Modulen des Projekts zugegriffen werden. Eine Friend-Prozedur wird weder in der Typbibliothek ihrer übergeordneten Klasse angezeigt noch kann eine Friend-Prozedur spät gebunden werden.
Function-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 Function-Prozeduren verwendet.
Der gesamte ausführbare Code muss in Prozeduren enthalten sein. Sie können eine Function-Prozedur nicht innerhalb einer anderen Function-, Sub- oder Property-Prozedur definieren.
Die Exit Function-Anweisung führt dazu, dass eine Function-Prozedur sofort beendet wird. Das Programm wird weiterhin mit der Anweisung ausgeführt, die auf die Anweisung folgt, die die Function-Prozedur aufgerufen hat. Eine beliebige Anzahl von Exit Function-Anweisungen kann an beliebiger Stelle in einer Function-Prozedur vorkommen.
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. 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.
Sie können eine Function-Prozedur aufrufen, indem Sie den Funktionsnamen, gefolgt von der Liste der Argumente in Klammern, in einem Ausdruck verwenden. Detaillierte Informationen zum Aufrufen von Function-Prozeduren finden Sie in der Call-Anweisung.
Wenn ein Wert von einer Funktion zurückgegeben werden soll, weisen Sie den Wert dem Namen der Funktion zu. Solche Zuweisungen können beliebig oft an beliebigen Stellen in der Prozedur vorgenommen werden. 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. Eine Funktion, die eine Objektreferenz zurückgibt, gibt Nothing zurück, wenn keine Objektreferenz zu name (mit Set) innerhalb der Funktion zugewiesen ist.
Im folgende Beispiel wird gezeigt, wie einer Funktion ein Rückgabewert zugewiesen wird. In diesem Fall ist false dem Namen zugewiesen, was angibt, dass ein Wert nicht gefunden wurde.
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.
Explizit (über Dim oder eine entsprechende Anweisung) in einer Prozedur deklarierte Variablen sind innerhalb dieser Prozedur immer lokal. 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. 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. Deklarieren Sie Variablen explizit, um solche Konflikte zu vermeiden. Sie können eine optionsexplizite Anweisung verwenden, um die explizite Deklaration von Variablen zu erzwingen.
Visual Basic ordnet arithmetische Ausdrücke für mehr interne Effizienz möglicherweise neu an. Verwenden Sie eine Function-Prozedur nicht in einem arithmetischen Ausdruck, wenn die Funktion den Wert der Variablen im gleichen Ausdruck ändert. Weitere Informationen zu arithmetischen Operatoren finden Sie unter Operatoren.
Beispiel
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. Im letzten Beispiel werden definierte, initialisierte Optional-Argumente verwendet.
' 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. In der folgenden Definition wird es als Wert übergeben.
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.
' 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 auch
- Aufrufen von Unter- und Funktionsprozeduren
- Grundlegendes zu benannten und optionalen Argumenten
- Schreiben einer Funktionsprozedur
- Datentypen
- Anweisungen
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.