Argumente ◦ Zusammenfassung ◦ ?

Die Subroutine QuadratFesterLänge() ist unflexibel, weil sie immer an der gleichen Position ein Quadrat der gleichen Länge zeichnet. Wir programmieren deshalb eine allgemeinere Subroutine Quadrat, die ein Quadrat mit beliebiger Position und Länge zeichnet. Der Aufruf Quadrat 200,100,100 soll zum Beispiel am Punkt (200,100) ein Quadrat der Seitenlänge 100 zeichnen:

>     Sub Quadrat(X As Integer,Y As Integer, Seite As Integer)
>       With Dialogblatt.Shapes
>         .AddLine(X,Y, X+Seite,Y).Visible = True
>         .AddLine(X+Seite,Y, X+Seite,Y+Seite).Visible = True
>         .AddLine(X+Seite,Y+Seite, X,Y+Seite).Visible = True
>         .AddLine(X,Y+Seite, X,Y).Visible = True
>       End With
>     End Sub

Die Vereinbarung einer Subroutine mit Argumenten beginnt also wie folgt:

> Sub <Name der Subroutine>( <Variablenname> As <Datentyp>, ... ).

Das obige Beispiel enthält die Argumentvariablen X, Y und Seite und liefert so den Geradenanweisungen AddLine die nötigen Argumente). Die Vereinbarung nennt zwischen den Klammern den Datentyp jeder Argumentvariable. Der Datentyp lässt den Compiler Aufruffehler prüfen. Die folgenden Aufrufe akzeptiert der Compiler zum Beispiel nicht:

>     Quadrat 200,100
>     Quadrat "200","oha lätz", 100

Der erste Aufruf enthält zwei statt drei Argumente, und der zweite Aufruf übergibt das zweite Argument mit einem falschen Datentyp. Leider setzt VBA die Klammern uneinheitlich: Anders als in der Vereinbarung stehen die Argumente nicht zwischen Klammern.

Argumente erleichtern das vorausschauende Programmieren. Wenn wir zum Beispiel vermuten, dass ein künftiger Benutzer ein anderes Arbeitsblatt als Dialogblatt verwenden möchte, dann erweitern wir vorausschauend die Liste der Argumente um Blattname:

>     Quadrat(
>       Blattname As String,
>       X As Integer, Y As Integer, Seite As Integer)

Allerdings dürfen wir nicht vergessen, With Dialogblatt.Shapes durch With Blattname.Shapes zu ersetzen.

Um die Subroutine Quadrat möglichst vielen Projekten zugänglich zu machen, haben wir also die ursprüngliche Version QuadratFesterLänge() zuerst um die Argumente X, Y und Seite erweitert und dann das Argument Blattname hinzugefügt. Diese allgemeinste Version der Subroutine finden Sie in QuadratProgrammiert.xls. Wir werden sie unter Dialogprogrammierung aus der neuen Arbeitsmappe QuadratProgrammiertDialog.xls aufrufen.

Der Aufruf Quadrat 200,100,100 übergibt die drei Argumente als Konstanten. Eine solche Übergabe ist problemlos. Lautet der Aufruf aber Quadrat X,Y,Länge, dann lässt sich jede der drei Variablen auf zwei Arten interpretieren:

- Die übergebenen Werte der Variablen X,Y,Länge dürfen durch Quadrat geändert werden. Der aufrufende Code und die aufgerufene Subroutine dürfen also beide lesend und schreibend die drei Argumentvariablen zugreifen.

- Quadrat

erhält lediglich Kopien der Werte von X,Y,Länge. Es darf also die ursprünglichen Werte von X,Y,Länge nicht ändern, sondern nur deren Kopien.

Funktion vertieft diesen Unterschied an einem Beispiel.

Übung Hexagon