VBA in Excel/ Prozeduren
Begriffsbestimmung, Deklaration und Parameter
BearbeitenIn VBA ist Prozedur der Oberbegriff für Funktionen und Unterprogramme.
Durch die Deklaration zu Beginn der Prozedur wird bestimmt, von welchen anderen Prozeduren sie aufgerufen werden kann. Sie kann erfolgen als:
- Public
Auf eine solche Prozedur kann von allen anderen Prozeduren in allen Modulen zugegriffen werden. Bei Verwendung in einem Modul (mit einer Option Private-Anweisung) kann auf die Prozedur nur innerhalb des Projekts zugegriffen werden. - Private
Auf eine solche Prozedur kann nur durch andere Prozeduren aus dem Modul zugegriffen werden, in dem sie deklariert wurde. - Static
Die lokalen Variablen einer solchen Prozedur bleiben zwischen Aufrufen erhalten. Das Attribut Static wirkt sich nicht auf Variablen aus, die außerhalb der Prozedur deklariert wurden, auch wenn sie in der Prozedur verwendet werden.
Die Voreinstellung ist Public.
Die Festlegung der Parameter kann erfolgen als:
- Optional
Schlüsselwort, das angibt, dass ein Argument nicht erforderlich ist. Alle im Anschluss an Optional in der Argumentenliste angegebenen Argumente müssen auch optional sein und mit dem Schlüsselwort Optional deklariert werden. Optional kann nicht verwendet werden, wenn ParamArray verwendet wird. - ByVal
Das Argument wird als Wert übergeben. Siehe auch: ByRef und ByVal bei Variablen - ByRef
Das Argument wird als Referenz übergeben. - ParamArray
Ist nur als letztes Argument in ArgListe zulässig und gibt an, dass das letzte Element ein als Optional deklariertes Datenfeld mit Variant-Elementen ist. Das Schlüsselwort ParamArray erlaubt die Angabe einer variablen Anzahl von Argumenten und darf nicht in Kombination mit den Schlüsselwörtern ByVal, ByRef oder Optional verwendet werden.
Benutzerdefinierte Funktionen (UDF)
BearbeitenWeitere Informationen: VBA in Excel/ Funktionen
Funktionen werden mit oder ohne Parameter aufgerufen und geben Werte zurück. Der Aufruf kann sowohl über andere Funktionen oder Prozeduren als auch über die Eingabe im Arbeitsblatt erfolgen. Sie kann Excel- und VBA-Funktionen integrieren.
Beispiel für eine Funktion:
Function Ostern(iYear As Integer)
Dim iDay As Integer
iDay = (((255 - 11 * (iYear Mod 19)) - 21) Mod 30) + 21
Ostern = DateSerial(iYear, 3, 1) + iDay + (iDay > 48) + _
6 - ((iYear + iYear \ 4 + iDay + (iDay > 48) + 1) Mod 7)
End Function
Beispiel für den Aufruf aus einer Prozedur heraus:
Sub WannIstOstern()
MsgBox "Ostersonntag: " & Ostern(2008)
End Sub
Im Arbeitsblatt kann die Funktion durch folgende Eingabe verwendet werden (Jahreszahl in Zelle A1):
=ostern(A1)
Wichtig: Wenn eine Funktion aus dem Tabellenblatt heraus aufgerufen wird, kann sie bestimmte VBA-Aktionen, z.B. Blattwechsel, nicht ausführen.
Unterprogramm (Sub)
BearbeitenEin Unterprogramm wird mit oder ohne Parameter aufgerufen und gibt keine Werte zurück, kann aber übergebene Variablenwerte verändern. Der Aufruf erfolgt durch andere Prozeduren, nicht jedoch über eine Eingabe im Arbeitsblatt. Sie können Excel- und VBA-Funktionen integrieren.
Wie in anderen BASIC-Dialekten wird ein Unterprogramm durch das Schlüsselwort SUB gekennzeichnet. Es hat sich deshalb auch der Begriff Sub (Mehrzahl: Subs) eingebürgert.
Beispiel einer Prozedur mit dem Aufruf eines Unterprogramms:
Sub WertEintragen()
Dim datStart As Date, datEnd As Date
Dim iTage As Integer
datStart = DateSerial(Year(Date), 2, 15)
datEnd = DateSerial(Year(Date), 12, 11)
Call WertErmitteln(datStart, datEnd, iTage)
Range("A1").Value = iTage
End Sub
Sub WertErmitteln(ByVal datStart, ByVal datEnde, ByRef iDiff As Integer)
iDiff = datEnde - datStart
End Sub
Informationen über ByRef/ByVal: VBA in Excel/ ByRef und ByVal
Wann sind Funktionen und wann sind Subs einzusetzen?
BearbeitenVerwenden Sie Funktionen immer dann, wenn Sie ein Ergebnis in Tabellenblättern als Formel einsetzen möchten oder wenn Sie aus einer Sub heraus Rückgabewerte anfordern möchten. In allen anderen Fällen sollten Sie sich für Subs entscheiden.