Parameter
Modul1
Option Explicit
Sub hallo_sabine()
Debug.Print "Hallo Sabine!"
End SubSub hallo_andreas()
Debug.Print "Hallo Andreas!"
End SubSub Main()
hallo_sabine
hallo_andreas
End Sub- Protokoll
Hallo Sabine!
Hallo Andreas!
Das voranstehende Protokoll zeigt die Ausgabe einer Ausführung des Subs »Main«. Solche Protokolle werden in diesem Kurs von nun an öfter zu finden sein: Wenn sich ein Sub »Main« findet, so ist dies das „Hauptprogramm“, und eine eventuell gezeigte Ausgabe ist die Ausgabe eines Laufs jenes Hauptprogramms.
- An Stelle von Aufrufen ohne »CALL«, wie »hallo_sabine«, wären auch Aufrufe mit »CALL«, wie »CALL hallo_sabine()«, möglich.
- Mit »Option Explicit« wird festgelegt, daß alle Variablen deklariert werden müssen.
In dem folgenden Programm stellt der Parameter »name« einen Platzhalter für den Wert eines Arguments (»Sabine« beziehungsweise »Andreas«) dar. Der Parameter wird in den Klammern mit »name As String« als eine Variable vom Typ »String« definiert. Der Wert des Parameters wird dann erst beim Aufruf mit »hallo "Sabine"« beziehungsweise »hallo "Andreas"« festgelegt
Modul1
Option Explicit
Sub hallo( name As String )
Debug.Print "Hallo " & name & "!"
End SubSub Main
hallo "Sabine"
hallo "Andreas"
End Sub- Protokoll
Hallo Sabine!
Hallo Andreas!
- An Stelle von Aufrufen ohne »CALL«, wie »hallo "Sabine"«, wären auch Aufrufe mit »CALL«, wie »Call hallo( "Sabine" )«, möglich.
»hallo« kann auch aus dem Direktbereich aufgerufen werden.
Direktbereich
Call hallo( "Sabine" )
hallo "Sabine"
Makros
Ein Makro ist ein Unterprogramm ohne Parameter
Nur Makros lassen sich mit F5 starten
ByVal und ByRef
Mit ByRef wird erreicht das der Parametername für die Argumentvariable steht.
Mit ByVal wird erreicht das der Parametername für eine Kopie des Wertes der Argumentvariable steht.
Wird keines von beidem angegeben, so ist dies als wäre ByRef angegeben worden.
- Quelltext
Sub P( ByRef X As Integer, ByVal Y As Integer, Z As Integer )
X = 1
Y = 1
Z = 1
End SubSub Main()
Dim A As Integer
Dim B As Integer
Dim C As Integer
A = 0
B = 0
C = 0
P X:=A, Y:=B, Z:=C
Debug.Print A
Debug.Print B
Debug.Print C
End Sub- Ausgabe
1
0
1
Übungsfragen
? Übungsfrage 0
Welche Ausgabe erzeugt das folgende Programm (»Sub Main«)?
Modul1
Option Explicit
Sub p( i As Integer )
Debug.Print i + 1
End SubSub Main
p 4
p 5
End Sub
Übungsaufgaben
/ Übungsaufgabe 0 ⃖
Modul1
Option Explicit
Sub gruesse( name As String )
Debug.Print "Hallo " & name & "!"
End SubSub Main
gruesse "Mia"
End Sub- Protokoll
Hallo Mia!
Überarbeiten Sie das obenstehenden Hauptprogramm so, daß die folgende Ausgabe mit Hilfe des Subs »gruesse« erzeugt wird.
Bei dieser Aufgabe darf nur das Hauptprogramm verändert werden. Das Hauptprogramm des Ergebnisses darf nur Aufrufanweisungen enthalten, welche das Sub »gruesse« aufrufen. Es darf keine Ausgabeanweisungen (kein »Print«) enthalten.
- Das Hauptprogramm beginnt mit der Zeile »Sub Main«.
- Protokoll der Lösung
Hallo Mia!
Hallo Mia!
Hallo Mia!
/ Übungsaufgabe 1 ⃖
Modul1
Option Explicit
Sub gruesse( name As String )
Debug.Print "Hallo " & name & "!"
End SubSub Main
gruesse "Mia"
End Sub- Protokoll
Hallo Mia!
Überarbeiten Sie das obenstehenden Hauptprogramm so, daß die folgende Ausgabe mit Hilfe des Subs »gruesse« erzeugt wird.
Bei dieser Aufgabe darf nur das Hauptprogramm »Main« verändert werden. Das Hauptprogramm des Ergebnisses darf nur Aufrufanweisungen enthalten, welche das Sub »gruesse« aufrufen. Es darf keine Ausgabeanweisungen (kein »Print«) enthalten.
- Das Hauptprogramm beginnt mit der Zeile »Sub Main«.
- Protokoll der Lösung
Hallo Mia!
Hallo Ben!
Hallo Lea!
/ Übungsaufgabe 2 ⃖
Überarbeiten Sie die Lösung der vorherigen Übungsaufgabe, indem Sie die Deklaration des Subs »gruesse« so verändern, daß die folgende Ausgabe erzeugt wird. (Hierbei darf das Hauptprogramm nicht verändert werden.)
- Das Hauptprogramm beginnt mit der Zeile »Sub Main«.
- Protokoll der Lösung
Guten Tag, Mia!
Guten Tag, Ben!
Guten Tag, Lea!
/ Übungsaufgabe 3 ⃖⃖ _
Überarbeiten Sie die Lösung der vorherigen oder der ersten Übungsaufgabe, indem Sie die Deklaration des Subs »gruesse« so verändern, daß der Parameter den Typ »Integer« hat und dieses Sub nicht mehr mit Namen sondern mit Zahlen aufgerufen werden muß. Hierzu sollen auch die Aufrufe im Hauptprogramm so angepaßt werden, daß das Sub »gruesse« im Hauptprogramm jeweils einmal mit dem Argumentwert «0», «1» beziehungsweise «2» aufgerufen wird.
Man soll also den Typ der Parameter und Argumente nach »Integer« ändern.
Die Ausgabe soll dann folgendermaßen lauten:
- Protokoll der Lösung
Guten Tag, 0!
Guten Tag, 1!
Guten Tag, 2!
/ Übungsaufgabe 4
Modul
Sub pflanzen()
debug.print "Rotkohl"
debug.print "Rotkohl Grünkohl"
debug.print "Rotkohl"
debug.print "Lauch"
debug.print "Lauch Grünkohl"
debug.print "Lauch"
debug.print "Grünkohl"
debug.print "Grünkohl Grünkohl"
debug.print "Grünkohl"
debug.print "Lauch"
debug.print "Lauch Grünkohl"
debug.print "Lauch"
End Sub
Übungsaufgabe Vereinfachen Sie das Sub "pflanzen", indem Sie ein weiteres Sub schreiben, das den sich wiederholenden Teil ausgibt. Dieses weitere Sub muß aber als Argument einen jeweils veränderlich Text erhalten, damit es weiß, was es ausgeben soll.
- P-Sub schreiben
- Schreiben Sie ein Sub "P", das sein Argument (welches eine beliebigen Typ haben können soll) mit Debug.Print ausgibt.