cmp-online.de
Startseite
Neu...
Yamaha XT600Z
Meine Tenere
XT-Technik
VB/VBA-Grundlagen
Grundelemente
Prozeduren
Operatoren
Variablen
Methoden
Schleifen
Vordefinierte Funktionen
Excel-Objekte
Impressum
private homepage von christian mario preussler
Funktionen und Prozeduren

Ausführbare Programmanweisungen werden in VB innerhalb von Funktionen und Prozeduren codiert. Beiden ist gemein, daß ihnen Parameter übergeben werden können. Möglich ist die Weitergabe von keinem, einem oder mehreren Parametern, jeweils getrennt durch Kommata. Während aber die Funktion (Schlüsselwort Function) selbst einen Parameter zurück liefert, ist die (Unter-)Prozedur (Sub) nicht zur Rückgabe von Werten in der Lage.

Prozeduren

(Unter-)Prozeduren entsprechen den im C/C++-Sprachumfang enthaltenen Funktionen vom Typ void. Sie werden eingeleitet durch das Schlüsselwort Sub, gefolgt vom Prozedur-namen und den Parametern. Abschließend wird End Sub angefügt (erledigt VBA eigen-ständig, sobald die einleitende Zeile geschrieben wurde):

Sub Prozedurname (Parameter)
    'Code
End Sub

Der Parameter muß, wenn eine Spezifizierung des Datentyps der übergebenen Werte erwünscht ist (es kann auch die Default-Einstellung von VBA verwendet werden, dann ist keine weitere Angabe erforderlich; siehe Abschnitt 5.3.3), mit der Angabe des Typs versehen werden:

Sub Prozedurname(Parameter1 As Datentyp1, Parameter2 As Datentyp2[,.]) Zu den in VBA verwendbaren Datentypen siehe Abschnitt 5.3.3

Der Aufruf einer Prozedur im Programmcode erfolgt im einfachsten Falle durch:

Prozedurname Parameter1 [,Parameter2,...]

Da diese Aneinanderreihung von Prozedur- und Parameternamen eher verwirrend wirken kann, empfiehlt es sich, die Parameter in Klammern zu schreiben. Dann wird allerdings das zusätzliche Schlüsselwort Call nötig. Fehlt es, äußert VBA schon bei der Code-Erstellung eine Fehlermeldung:

Call Prozedur(Parameter) 

Funktionen

Funktionen entsprechen dem Unterprogramm-Typ function in C/C++. Wie bereits einleitend erwähnt, geben Funktionen an die aufrufenden Programmteile Werte zurück. Der Datentyp des Rückgabeparameters wird, ebenso wie die Typen der zu übergebenden Parameter (siehe Abschnitt über Prozeduren) in der Kopfzeile des Unterprogramms angegeben:

Function Funktionsname(Parameter As Datentyp1) As Datentyp2
    'Anweisungen
End Function

Damit der Wert der Funktion, sprich der Inhalt des Rückgabeparameters, an das aufrufende Unterprogramm zurückgegeben werden kann, muß dieser Wert (welcher Ergebnis einer Berechnung oder eines Vergleichs sein kann) innerhalb der Funktion dem Funktionsnamen zugewiesen werden:

Funktionsname = Wert

Das Gleichheitszeichen dient als Zuweisungsoperator. Zu Operatoren siehe auch Abschnitt 5.3.2.

Aufgerufen wird eine Funktion durch eine Zuweisung:

Wert = Funktionsname(Parameter)

Unterprogramme vorzeitig verlassen

In manchen Situationen kann es nötig werden, daß Unterprogramme vorzeitig beendet werden, ohne den Programmcode vollständig abzuarbeiten. Dazu kann der Befehl Exit verwendet werden, der zusammen mit der jeweiligen Bezeichnung des Unterprogramms (Sub oder Function) verwendet wird:

Sub Prozedur1()
    'Anweisungen
    Exit Sub 'bei Funktionen: Exit Function
    'Anweisungen
End Sub

ByVal, ByRef

Übergabeparameter können einem aufgerufenen Unterprogramm (Prozedur/Funktion) auf zwei Arten vom aufrufenden Programmteil zur Verfügung gestellt werden: Als Kopie des Inhaltes des Parameters (ByVal), oder durch Übergabe des „Originals“, d.h. durch Weitergabe der Adresse des Parameters (ByRef). Im ersten der beiden Fälle kann das aufgerufene Unterprogramm jegliche Veränderungen am Parameter durchführen, ohne daß sich dieses auf das aufrufende Programm auswirkt.

Sub Prozedur1(ByVal Parameter1)

Im zweiten Fall bewirkt eine Veränderung des Inhalts eines Parameters im aufgerufenen Unterprogramm die gleiche Auswirkung auch auf den aufrufenden Programmteil.

Function Funk1(ByRef Parameter1) As Datentyp

Der Aufruf der Prozedur mit dem Parameter ByRef ist die Standardeinstellung in VBA. Ist keines der beiden Schlüsselwörter angegeben, wird immer das Original des Parameters weitergegeben.

Weiterhin ist eine optionale Übergabe von Parametern in VBA möglich. Dazu siehe Fachliteratur.

Ereignisprozeduren

Einer besonderen Art von Unterprogrammen gehören die sog. Ereignisprozeduren an. Sie werden ausgelöst (aufgerufen), wenn ein Ereignis wie der Mausklick auf eine Schaltfläche oder das Drücken einer Taste der Tastatur bei dem aktiven Steuerelement auftritt. Ereignisprozeduren sind immer mit Objekten (Steuerelemente) verknüpft; sie sind Teil der Objektklassen, ihre Ausführung wird vom Betriebssystem gesteuert. Erst mit den Ereignisprozeduren ist eine Reaktion von Programmen auf Aktionen des Anwenders möglich. Ereignisprozeduren werden wie Sub-Prozeduren programmiert. Zu erkennen sind sie daran, daß hinter den Namen des Objektes auf einen Unterstrich folgend ein Ereignis (Click, DblClick, MouseDown, KeyPress, etc.) genannt ist, Zum Beispiel kann beim Mausklick auf die Schaltfläche Button1 die folgende Prozedur ausgenutzt und mit Code belegt werden:

Sub Button1_Click()

Weitere Ereignisprozeduren siehe Online-Hilfe der Excel-IDE.

Gültigkeitsbereiche von Unterprogrammen

In der bereits vorgestellten Weise definierte Unterprogramme sind nur in dem Bereich gültig, in dem sie codiert wurden. Eine Prozedur, die in einem Modul bzw. im Codebereich eines Formulars erstellt wurde, kann auch nur innerhalb dieses Bereiches aufgerufen werden. Sie ist automatisch vom Typ Private. Das Schlüsselwort kann auch zusätzlich vor die Unterprogrammart (Sub oder Function) geschrieben werden. VBA erledigt das in vielen Fällen selbst (z.B. bei Erzeugung einer Ereignisprozedur durch Doppelklick auf eine Schaltfläche eines Formulars während der Entwurfsphase, siehe Abschnitt 5.1, IDE):

Private Sub Prozedurname()

Ereignisprozeduren sind immer Private.

Wenn die geschriebene Funktion/Prozedur auch von anderen Programmteilen, z.B. aus einem anderen Formular heraus, aufgerufen werden soll, dann muß sie zwingend innerhalb eines Moduls mit dem Schlüsselwort Public erstellt werden (siehe auch: Gültigkeitbereich von Variablen, Abschnitt 5.3.3):

Public Function Funktionsname() As Datentyp