30.09.2013 Aufrufe

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!