|
Die Excel/VBA-Beispiele (incl. aller Arbeitsmappen: http://www.herber.de/samples/inhalt.html)
Function-Anweisung
Deklariert Name, Argumente und Code, die den Rumpf einer Function-Prozedur bilden. Syntax [Public | Private | Friend] [Static] Function Name [(ArgListe)] [As Typ] End Function Die Syntax der Function-Anweisung besteht aus folgenden Teilen:
Das Argument ArgListe hat folgende Syntax und Bestandteile: [Optional] [ByVal | ByRef] [ParamArray] VarName[( )] [As Typ] [= StandardWert]
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. |