Functions

In den bisherigen Beispielen des Tutorials haben wir mit Sub-Prozeduren gearbeitet. Ein weiterer wichtiger Prozedurtyp ist Function. Eine Function-Prozedur unterscheidet sich kaum von einer Sub. Allerdings kann eine Function auch einen Rückgabewert haben.

Function Ich()
    Ich = "Hallo Ich"
End Function

Hier taucht der Name der Prozedur in ihrem „Körper“ auf. Dem Namen wird ein Wert zugewiesen, als wenn es eine Variable wäre. Das legt den Rückgabewert der Function fest. Im Direktfenster erfolgt der Aufruf wie folgt:

Debug.Print Ich
Hallo Ich

Mit dem Rückgabewert kann man nach Belieben weiterarbeiten. Im obigen Beispiel geben wir ihn z. B. mit Debug.Print aus. Genauso gut hätte die Function auch von einer anderen Prozedur aufgerufen werden, und dort der Rückgabewert in einer Variablen gespeichert werden können. Eine selbst geschriebene Function verhält sich also genau wie eine in VBA integrierte Funktion. Zum Vergleich schreiben wir ins Direktfenster:

Debug.Print Date

Damit haben wir die VBA-interne Funktion Date() aufgerufen. Und genau wie VBA-interne Funktionen, so kann man auch selbst programmierte Funktionen in der Applikation nutzen. Wenn wir also die obige Function in Microsoft Excel geschrieben haben, können wir sie einfach in einem Tabellenblatt nutzen. Hier sehen wir als Beispiel die obige Funktion in der Zelle A1. Solche Funktionen nennt man „benutzerdefinierte Funktion“ oder neudeutsch Userdefined Function (UDF).

Mappe1.xlsm
    A1     ƒx     =Ich()
    A B
1 Hallo Ich
2
3

Der Rückgabewert einer Function hat, genau wie eine Variable, einen Datentyp, der stets definiert werden sollte. Ansonsten hätte die Funktion den (selten empfehlenswerten) Datentyp Variant. Der Datentyp wird hinter den Klammern angegeben. Im Gegensatz dazu hat eine Sub natürlich keinen Datentyp - mangels Rückgabewert.

Function eineZahl() As Currency
    eineZahl = 14.5
End Function