Visual Basic 6: Funktionen
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.