Visual Basic 6: Funktionen

Aus Wikibooks

Funktionen und Prozeduren[Bearbeiten]

Oft müssen immer wieder gleiche Schritte von unterschiedlichen Stellen im Programm ausgeführt werden. Funktionen/Prozeduren helfen, Wiederholungen im Quelltext zu vermeiden und ihn so übersichtlicher zu gestalten. Funktionen/Prozeduren können als Private (nur für das Modul, in dem die Funktion steht, gültig) oder Public (im gesamten Projekt aufrufbar) deklariert werden. Ein Beispiel für eine einfache Prozedur:

Private Sub showTime() 'Zeigt eine Meldung mit der aktuellen Uhrzeit
    MsgBox "Es ist " & Now
End Sub

Sie kann einfach über den Funktionsnamen aufgerufen werden:

showTime

oder mit Call

Call showTime

Eine Funktion unterscheidet sich von einer Prozedur in der Tatsache, dass die Funktion einen Rückgabewert hat. Der Wert wird durch Funktionsname = Wert zurückgegeben werden. Anders als in den anderen Programmiersprachen wird die Funktion weiter ausgeführt. Der Typ des Rückgabewertes kann nach der schließenden Klammer hinter dem Funktionsnamens angegeben werden. Der Standardtyp ist Variant.

Private Function getYear() As Integer 
    'Gibt das aktuelle Jahr im Format YYYY zurück (z.B. 2006)
    getYear = Year(Now)
End Function

Der Funktionswert kann in einer Variablen gespeichert werden

Year = getYear()

oder direkt in einer anderen Funktion (z.B. Msgbox) verwendet werden.

MsgBox getYear()


Argumente[Bearbeiten]

Funktionen können durch ihre Argumente beeinflusst werden. Sie werden in der Klammer hinter dem Funktionsnamen angegeben:

Public Function Add(a As Integer, b As Integer)
    Add = a + b
End Function

Diese Funktion ist von den Werten a und b abhängig.

MsgBox Add(5,11) 'Gibt Meldung mit dem Ergebnis 16 zurück

Art der Argumentübergabe[Bearbeiten]

Wie bekommt die aufgerufene Funktion (oder Prozedur) die Argumente?

Probieren wir das nachfolgende Programm aus (leeres Projekt anlegen, in Formular den folgenden Code einfügen)

Option Explicit

Private Sub Form_Load()

    Dim a As Integer
    Dim b As Integer
    
    MsgBox Add(a, b)
    Call Inc(a)
    Call Inc(b)
    MsgBox Add(a, b)


End Sub

Private Function Add(ersteZahl As Integer, zweiteZahl As Integer)

    Add = ersteZahl + zweiteZahl
    
End Function

Private Sub Inc(zahl As Integer)

    zahl = zahl + 1

End Sub

Welche beiden Werte werden wir in der MessageBox angezeigt bekommen?

Die erste Messagebox zeigt (wie nicht anders zu erwarten) den Wert "0" an. (Integer ist ein numerischer Typ, und alle numerischen Datentypen werden mit 0 initialisiert). Daher ergibt die Addition von 0 + 0 klarerweise wieder "0".

Die zweite Messagebox liefert als Ergebnis "2".

Offensichtlich wird bei der Prozedur Inc die Variable übergeben und nicht der Wert. Tatsächlich ist dies die Standardannahme von Visual Basic 6: Die Argumente werden ByRef (by reference) übergeben.

Das bedeutet, dass in einer Funktion/Prozedur die übergebene Variable direkt beeinflusst wird, und nicht nur etwa der Wert. Soll dies nicht möglich sein, gibt es die Möglichkeit, explicit mittels ByVal eine Wertübergabe zu erzwingen.