VBA – Programmierung mit Excel Grundlagen
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Dieser erzeugt als Ergebnis:<br />
Seite 54<br />
Unterprogrammtechnik<br />
❢ Sind die formalen und die aktuellen Argumente Variablen und wird in einer Prozedur ein<br />
formales Argument verändert, so verändert sich das dazugehörige aktuelle Argument des<br />
aufrufenden Programms:<br />
Sub Teil1()<br />
Dim Var1 As Integer, Var2 As Integer<br />
Var1 = 5<br />
Var2 = 10<br />
Var3 = Var1 + Var2 1<br />
Teil2 Var1, Var2<br />
Var3 = Var1 + Var2<br />
End Sub<br />
2<br />
Abbildung 21: Ergebnis<br />
des Prozeduraufrufs<br />
Sub Teil2(Wert1 As Integer, Wert2 As Integer)<br />
Wert1 = 15<br />
Wert2 = 20<br />
End Sub<br />
Die Summe bei (1) beträgt 15, die Summe bei (2) ist 35. Obwohl die Variablen Var1 und<br />
Var2 in der Prozedur Teil1 nicht geändert wurden, haben sie offensichtlich nach dem Aufruf<br />
der Prozedur Teil2 aus Teil1 heraus die Werte der Variablen Wert1 und Wert2 angenommen.<br />
Dieses ist durch die Form der Übergabe der Argumente bedingt. <strong>VBA</strong> übergibt<br />
entweder Call by Reference <strong>–</strong> es wird nicht der Wert des aktuellen Arguments<br />
übergeben, sondern eine Referenz auf die Speichervariable (Adresse im Arbeitsspeicher)<br />
oder Call by Value <strong>–</strong> es wird nur der Wert des Arguments übergeben. Änderungen in der<br />
aufgerufenen Prozedur haben keine Wirkung, weil dort die Adresse nicht bekannt ist.<br />
➨ Das Problem kann umgangen werden, wenn die Argumentenliste die Wertübergabe<br />
erzwungen wird. Dies ist über die Anweisung BYVAL möglich:<br />
Sub Teil2(ByVal Wert1 As Integer, ByVal Wert2 As Integer)<br />
Wert1 = 15<br />
Wert2 = 20<br />
End Sub<br />
Hier hätte die Wertzuweisung innerhalb von TEIL2 keinen Einfluß auf die Werte von VAR1<br />
und VAR2 in TEIL1.<br />
Die Wertübergabe <strong>mit</strong>tels BYVAL kann in der Argumentenliste für jede Variable einzeln<br />
definiert werden.