VBA-Programmierung in Microsoft Excel

Tutorial: Excel-Beispiele

VBA-Begriff: Function-Anweisung

Deklariert Name, Argumente und Code, die den Rumpf einer Function-Prozedur bilden.

Syntax

[Public | Private | Friend] [Static] Function Name [(ArgListe)] [As Typ]
[Anweisungen]
[Name = Ausdruck]
[Exit Function]
[Anweisungen]
[Name = Ausdruck]

End Function

Die Syntax der Function-Anweisung besteht aus folgenden Teilen:

Teil Beschreibung
Public Optional. Legt fest, daß die Function-Prozedur für alle anderen Prozeduren in allen Modulen zugänglich ist. Wird dieses Argument in einem Modul verwendet, das ein Option Private enthält, so ist die Prozedur außerhalb des Projekts nicht verfügbar.
Private Optional. Legt fest, daß die Function-Prozedur nur für andere Prozeduren in dem Modul verfügbar ist, in dem sie deklariert wurde.
Friend Optional. Wird nur in einem Klassenmodul verwendet. Legt fest, daß die Function-Prozedur im gesamten Projekt sichtbar ist, aber nicht für den Controller einer Instanz eines Objekts.
Static Optional. Legt fest, daß die lokalen Variablen der Function-Prozedur zwischen den Aufrufen erhalten bleiben. Das Attribut Static hat keinen Einfluß auf Variablen, die außerhalb der Function deklariert wurden, auch wenn sie in der Prozedur verwendet werden.
Name Erforderlich. Name der Function; folgt den Standardkonventionen für Variablennamen.
ArgListe Optional. Liste der Variablen, die Argumente darstellen, die beim Aufruf an die Function-Prozedur übergeben werden. Mehrere Variablen werden durch Kommata getrennt.
Typ Optional. Datentyp des von der Function-Prozedur zurückgegebenen Wertes. Zulässige Typen sind Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (derzeit nicht unterstützt), Date, String (ausgenommen feste Länge), Object, Variant und benutzerdefinierte Typen.
Anweisungen Optional. Eine Gruppe von Anweisungen, die in der Function-Prozedur ausgeführt werden sollen.
Ausdruck Optional. Rückgabewert der Function.

Das Argument ArgListe hat folgende Syntax und Bestandteile:

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

Teil Beschreibung
Optional Optional. Legt fest, daß ein Argument nicht erforderlich ist. Wird dieses Argument verwendet, so müssen alle in ArgListe nachfolgenden Argumente ebenfalls optional sein und mit dem Schlüsselwort Optional deklariert werden. Optional kann nicht bei Argumenten verwendet werden, die mit ParamArray deklariert werden.
ByVal Optional. Legt fest, daß das Argument als Wert übergeben wird.
ByRef Optional. Legt fest, daß das Argument als Verweis übergeben wird. ByRef ist der Standardwert in Visual Basic.
ParamArray Optional. Wird nur als letztes Argument in ArgListe verwendet, um festzulegen, daß das letzte Argument ein Optional-Datenfeld von Variant-Elementen ist. Mit dem Schlüsselwort ParamArray können Sie eine beliebige Anzahl von Argumenten angeben. Es darf nicht zusammen mit ByVal, ByRef oder Optional verwendet werden.
VarName Erforderlich. Name der Variablen, die das Argument darstellt; folgt den Standardkonventionen für Variablennamen.
Typ Optional. Datentyp des Arguments, das an die Prozedur übergeben wird. Zulässige Typen sind Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (derzeit nicht unterstützt) Date, String (nur variable Länge), Object, Variant oder ein spezifischer Objekttyp. Falls der Parameter nicht Optional ist, kann auch ein benutzerdefinierter Typ angegeben werden.
StandardWert Optional. Eine Konstante oder ein Konstantenausdruck. Nur bei Optional-Parametern zulässig. Falls der Typ Object ist, kann der explizite Standardwert nur Nothing sein.

Anmerkungen

Function-Prozeduren sind standardmäßig öffentlich, wenn sie nicht explizit mit Public, Private oder Friend deklariert werden. Wird Static nicht angegeben, so bleiben die Werte lokaler Variabler zwischen den Aufrufen nicht erhalten. Das Schlüsselwort Friend kann nur in Klassenmodulen verwendet werden. Allerdings können Friend-Prozeduren von Prozeduren in jedem Modul eines Projekts aufgerufen werden. Eine Friend-Prozedur wird nicht in der Typenbibliothek ihrer übergeordneten Klasse angezeigt und kann nicht spät gebunden werden.

Vorsicht   Manche Function-Prozeduren sind rekursiv (d.h., sie rufen sich selbst auf, um eine bestimmte Operation durchzuführen). Rekursionen können jedoch Stapelüberläufe verursachen. Vermeiden Sie daher das Schlüsselwort Static in rekursiven Function-Prozeduren.

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

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

Wie Sub-Prozeduren sind Function-Prozeduren eigenständig und können Argumente erhalten, eine Folge von Anweisungen ausführen und die Werte der übergebenen Argumente ändern. Im Gegensatz zu einer Sub-Prozedur kann eine Function-Prozedur auf der rechten Seite eines Ausdrucks verwendet werden. Dadurch besteht die Möglichkeit, den Rückgabewert der Function-Prozedur (wie den Rückgabewert einer integrierten Funktionen, also zum Beispiel Sqr, Cos oder Chr) weiterzuverarbeiten.

Der Aufruf einer Function-Prozedur innerhalb eines Ausdrucks erfolgt durch Angabe des Funktionsnamens gefolgt von der Argumentliste in Klammern. In der Beschreibung der Call-Anweisung finden Sie genauere Informationen zum Aufruf von Function-Prozeduren.

Sie geben einen Wert von einer Funktion zurück, indem Sie ihn dem Funktionsnamen zuweisen. Solche Zuweisungen sind beliebig oft an beliebigen Stellen innerhalb der Prozedur möglich. Wenn Name kein Wert zugewiesen wurde, gibt die Prozedur einen Standardwert zurück: eine numerische Funktion gibt 0 zurück, eine Zeichenfolgenfunktion eine Null-Zeichenfolge ("") und eine Funktion mit dem Typ Variant den Wert Empty. Eine Funktion, die einen Objektverweis zurückgibt, gibt den Wert Nothing zurück, wenn Name (unter Verwendung von Set) innerhalb der Function-Prozedur kein Objektverweis zugewiesen wurde.

Im folgenden Beispiel wird einer Funktion mit dem Namen BinäreSuche ein Rückgabewert zugewiesen. Der zugewiesene Wert ist in diesem Fall False, da ein bestimmter Wert nicht gefunden wurde.

Function BinäreSuche(. . .) As Boolean
. . .
    ' Wert nicht gefunden. Rückgabewert ist False.
    If untGrnze > obrGrnze Then
        BinäreSuche = False
        Exit Function
    End If
. . .
End Function

Variablen in Function-Prozeduren können entweder explizit innerhalb der Prozedur deklariert sein 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 können Namenskonflikte auftreten, falls ein anderes Element, das auf Modulebene definiert wurde, denselben Namen hat. 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 Referenz auf den Namen interpretiert, der auf Modulebene definiert wurde. Deklarieren Sie Variablen explizit, um derartige Konflikte zu vermeiden. Mit der Option Explicit-Anweisung können Sie die explizite Deklaration von Variablen erzwingen.

Vorsicht   Visual Basic kann arithmetische Ausdrücke aus Optimierungsgründen intern umstellen. Vermeiden Sie daher Aufrufe von Function-Prozeduren innerhalb eines arithmetischen Ausdrucks, wenn die Funktion den Wert von Variablen in diesem Ausdruck ändert.