In diesem Tutorial geht es um Prozeduren und Funktionen, bzw. deren Übergabe- und Rückgabewerte.
Eine Prozedur (Subroutine) kan beliebig viele übergabe-Werte haben, gibt aber keinen Wert zurück. Folgendes Code-Stück zeigt wie man ein "Sub" definiert:
1:Sub Beispiel1(x as long)
2: 'Queltext der Subroutine
3:End Sub
Subroutinen werden überall eingesetzt wo keine Rückgabewerte nötig sind.
Wenn ein Wert verarbeitet werden soll und er dannach dem Programm zur Verfügung stehen soll, sollte eine Funktion verwendet werden.
Die einfachste Version einer Funktion ist folgende:
1:Function Beispiel2(x As Integer)
2:y = x + 1
3:beispiel1 = y 'Wert den dieFunktion direkt zurückgibt
4:End Function
Hier wird der Funktion ein Wert übergeben, dieser wird um eins erhöt und zurückgegeben. Dazu gibt es noch eine alternative:
1:Function Beispiel3(ByRef x As Long)
2:x = x + 1 'Da der Wert mit "ByRef" übergebenwird, ändert man in der Funktion nicht nur den übergeben
: wert (in diesem fall x) sondern auch das Original.
3:End Function
Schreibt man "ByRef" vor einen Übergabewert, wird nicht der Wert sondern die usprüngliche Variable direkt geändert
(entsprechend sollte man auch eine Variable übergeben die geändert werden kann).
Man gibt der Funktion im Prinzip direkten Zugriff auf die Variable. Wenn die Funktion nun dne Wert (in diesem Fall von x) ändert, ändert sich dieser auch im Programm.
Zur Anwendung könnte dies zum Beispiel in folgender Situation kommen:
1:Function Beispiel4(ByRef x As Long, ByVal y As Long) As Boolean
2: If y = 0 Then
3: beispiel3 = False 'Gibt"False" zurück da man nicht durch Null Dividieren kann.
4: Else
5: x = x / y 'x bekommt nen neuen wert zugewiesen.
6: beispiel3 = True ' Gibt "True" zurück da alles Korekt gerechnet wurde.
7: End If
8:End Function
Um eine Division durch "0" zu verhindern, werden die Variablen vorher entsprechend überprüft. Falls eine Division nicht möglich ist, liefert die Funktion "False" zurück. "ByVal" heisst, dass nur der Wert übergeben wird und nicht die "Original-Variable" geändert wird (sozusagen das Gegenstück zu "ByRef").
Ich hoffe ihr versteht nun ein wenig mehr von Funktionen in VB. Falls Fragen auftauchen, postet ins Gästebuch oder schreibt mir eine Email: webmaster'at'black-silence'dot'ch