Abfragen: Unterschied zwischen den Versionen
Pwania (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== If-Abfrage == Eine If-Abfrage prüft, ob der in der Abfrage eingeschlossene Anweisungsblock ausgeführt werden soll. Der Anweisungsblock beginnt nach dem '…“) |
Pwania (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Category:vba-wiki]] | |||
== If-Abfrage == | == If-Abfrage == | ||
Eine If-Abfrage prüft, ob der in der Abfrage eingeschlossene Anweisungsblock ausgeführt werden soll. Der Anweisungsblock beginnt nach dem 'Then' (bzw. nach dem 'Else') und endet bei 'End If' (bzw. vor dem 'Else' oder einem 'ElseIf'). In der Regel wird der Anweisungsblock durch Einzüge verdeutlicht. | Eine If-Abfrage prüft, ob der in der Abfrage eingeschlossene Anweisungsblock ausgeführt werden soll. | ||
Der Anweisungsblock beginnt nach dem 'Then' (bzw. nach dem 'Else') und endet bei 'End If' (bzw. vor dem 'Else' oder einem 'ElseIf'). In der Regel wird der Anweisungsblock durch Einzüge verdeutlicht. | |||
=== Einfache If-Abfrage === | === Einfache If-Abfrage === | ||
Eine If-Abfrage können wir uns wie eine Weiche vorstellen, welche die Ausführung des Codes nach Prüfung der Bedingung auf einen Umweg schickt: /[ja]: Führe dies durch \ ... Anweisungen <Ist Bedingung erfüllt?>| > Weitere Anweisungen ... \[nein]-----------------/ Sie wird in VBA wie folgt formuliert: <span style="Color:green">' Programmschritte</span> <span style="Color:blue">If </span>Bedingung <span style="Color:gray">=</span> Erfüllt<span style="Color:blue"> Then</span> <span style="Color:green">' Anweisungsblock: Wenn erfüllt, wird dies ausgeführt</span> <span style="Color:blue">End If</span> <span style="Color:green">' Weitere Programmschritte</span> Beispiel: <span style="Color:blue"> Private Function </span>EnterNumber<span style="Color:gray">()</span> <span style="Color:blue"> Dim </span>lngNumber<span style="Color:blue"> As Long</span> lngNumber <span style="Color:gray">=</span> InputBox<span style="Color:gray">("Bitte geben Sie eine Zahl ein:")</span> <span style="Color:blue"> If </span>lngNumber <span style="Color:gray">=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> MsgBox <span style="Color:gray">"Eingegebene Zahl ist 3"</span> <span style="Color:blue"> End If</span> EnterNumber <span style="Color:gray">=</span> lngNumber <span style="Color:green">' Anweisungen nach dem If-Block werden unabhängig von der If-Abfrage ausgeführt</span> <span style="Color:blue"> End Function</span> | Eine If-Abfrage können wir uns wie eine Weiche vorstellen, welche die Ausführung des Codes nach Prüfung der Bedingung auf einen Umweg schickt: | ||
/[ja]: Führe dies durch \ | |||
... Anweisungen <Ist Bedingung erfüllt?>| > Weitere Anweisungen ... | |||
\[nein]-----------------/ | |||
Sie wird in VBA wie folgt formuliert: | |||
<span style="Color:green">' Programmschritte</span> | |||
<span style="Color:blue">If </span>Bedingung <span style="Color:gray">=</span> Erfüllt<span style="Color:blue"> Then</span> | |||
<span style="Color:green">' Anweisungsblock: Wenn erfüllt, wird dies ausgeführt</span> | |||
<span style="Color:blue">End If</span> | |||
<span style="Color:green">' Weitere Programmschritte</span> | |||
Beispiel: | |||
<span style="Color:blue"> Private Function </span>EnterNumber<span style="Color:gray">()</span> | |||
<span style="Color:blue"> Dim </span>lngNumber<span style="Color:blue"> As Long</span> | |||
lngNumber <span style="Color:gray">=</span> InputBox<span style="Color:gray">("Bitte geben Sie eine Zahl ein:")</span> | |||
<span style="Color:blue"> If </span>lngNumber <span style="Color:gray">=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> | |||
MsgBox <span style="Color:gray">"Eingegebene Zahl ist 3"</span> | |||
<span style="Color:blue"> End If</span> | |||
EnterNumber <span style="Color:gray">=</span> lngNumber <span style="Color:green">' Anweisungen nach dem If-Block werden unabhängig von der If-Abfrage ausgeführt</span> | |||
<span style="Color:blue"> End Function</span> | |||
=== Else-Zweig === | === Else-Zweig === | ||
Der Else-Zweig einer If-Abfrage dient dazu, die Fälle zu behandeln, welche die ursprüngliche(n) Bedingung(en) nicht erfüllen. Wenn wir uns die einfache If-Abfrage wie eine Weiche vorstellen, dann lässt der Else-Zweig die Ausführung auf beiden getrennten Gleisen zu: /[ja]: Führe dies durch \ ... Anweisungen <Ist Bedingung erfüllt?>| > Weitere Anweisungen ... \[nein]: Führe das durch / '''Bitte beachten:''' Der Else-Zweig erscheint '''immer''' an letzter Stelle, also vor dem 'End If'. Sie können also nicht nach dem 'Else'-Zweig einen weiteren 'ElseIf' angeben. Siehe auch [[#Verschachtelte If-Abfragen|verschachtelte If-Abfragen]]. <span style="Color:green">' Anweisungen</span> <span style="Color:blue">If </span>Bedingung <span style="Color:gray">=</span> Erfüllt<span style="Color:blue"> Then</span> <span style="Color:green">' Anweisungsblock: Wenn erfüllt, wird dies ausgeführt</span> <span style="Color:blue">Else</span> <span style="Color:green">' Anweisungsblock: Wenn nicht erfüllt, wird dies ausgeführt</span> <span style="Color:blue">End If</span> <span style="Color:green">' Weitere Anweisungen</span> Beispiel: <span style="Color:blue">Private Function </span>EnterNumber<span style="Color:gray">()</span> <span style="Color:blue"> Dim </span>lngNumber<span style="Color:blue"> As Long</span> lngNumber <span style="Color:gray">=</span> InputBox<span style="Color:gray">("Bitte geben Sie eine Zahl ein:")</span> <span style="Color:blue"> If </span>lngNumber <span style="Color:gray">=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> MsgBox <span style="Color:gray">"Zahl ist 3"</span> <span style="Color:blue"> Else</span> MsgBox <span style="Color:gray">"Zahl ist ungleich 3"</span> <span style="Color:blue"> End If</span> EnterNumber <span style="Color:gray">=</span> lngNumber <span style="Color:blue">End Function</span> Langschreibweise: <span style="Color:blue"> If </span>intVariable <span style="Color:gray"><</span> <span style="Color:gray">5</span><span style="Color:blue"> Then </span> <span style="Color:green">' Übergeordnete Abfrage</span> <span style="Color:blue"> End If</span> <span style="Color:blue"> If </span>intVariable <span style="Color:gray">>=</span> <span style="Color:gray">5</span><span style="Color:blue"> Then </span> <span style="Color:green">' Frage nach dem Gegenteil</span> <span style="Color:blue"> End If</span> | Der Else-Zweig einer If-Abfrage dient dazu, die Fälle zu behandeln, welche die ursprüngliche(n) Bedingung(en) nicht erfüllen. Wenn wir uns die einfache If-Abfrage wie eine Weiche vorstellen, dann lässt der Else-Zweig die Ausführung auf beiden getrennten Gleisen zu: | ||
/[ja]: Führe dies durch \ | |||
... Anweisungen <Ist Bedingung erfüllt?>| > Weitere Anweisungen ... | |||
\[nein]: Führe das durch / | |||
'''Bitte beachten:''' Der Else-Zweig erscheint '''immer''' an letzter Stelle, also vor dem 'End If'. Sie können also nicht nach dem 'Else'-Zweig einen weiteren 'ElseIf' angeben. Siehe auch [[#Verschachtelte If-Abfragen|verschachtelte If-Abfragen]]. | |||
<span style="Color:green">' Anweisungen</span> | |||
<span style="Color:blue">If </span>Bedingung <span style="Color:gray">=</span> Erfüllt<span style="Color:blue"> Then</span> | |||
<span style="Color:green">' Anweisungsblock: Wenn erfüllt, wird dies ausgeführt</span> | |||
<span style="Color:blue">Else</span> | |||
<span style="Color:green">' Anweisungsblock: Wenn nicht erfüllt, wird dies ausgeführt</span> | |||
<span style="Color:blue">End If</span> | |||
<span style="Color:green">' Weitere Anweisungen</span> | |||
Beispiel: | |||
<span style="Color:blue">Private Function </span>EnterNumber<span style="Color:gray">()</span> | |||
<span style="Color:blue"> Dim </span>lngNumber<span style="Color:blue"> As Long</span> | |||
lngNumber <span style="Color:gray">=</span> InputBox<span style="Color:gray">("Bitte geben Sie eine Zahl ein:")</span> | |||
<span style="Color:blue"> If </span>lngNumber <span style="Color:gray">=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> | |||
MsgBox <span style="Color:gray">"Zahl ist 3"</span> | |||
<span style="Color:blue"> Else</span> | |||
MsgBox <span style="Color:gray">"Zahl ist ungleich 3"</span> | |||
<span style="Color:blue"> End If</span> | |||
EnterNumber <span style="Color:gray">=</span> lngNumber | |||
<span style="Color:blue">End Function</span> | |||
Langschreibweise: | |||
<span style="Color:blue"> If </span>intVariable <span style="Color:gray"><</span> <span style="Color:gray">5</span><span style="Color:blue"> Then </span> <span style="Color:green">' Übergeordnete Abfrage</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:blue"> If </span>intVariable <span style="Color:gray">>=</span> <span style="Color:gray">5</span><span style="Color:blue"> Then </span> <span style="Color:green">' Frage nach dem Gegenteil</span> | |||
<span style="Color:blue"> End If</span> | |||
=== ElseIf-Zweig === | === ElseIf-Zweig === | ||
Die in der übergeordneten Abfrage nicht erfüllten Fälle können wir mit 'ElseIf' weiter eingrenzen: <span style="Color:blue">Private Sub </span>ElseIf<span style="Color:gray">()</span> <span style="Color:blue"> Dim </span>intAge<span style="Color:blue"> As Integer</span> intAge <span style="Color:gray">=</span> <span style="Color:gray">100</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Age: "</span> & intAge <span style="Color:blue"> If </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">1</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Newborn"</span> <span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Toddler"</span> <span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><=</span> <span style="Color:gray">12</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Child"</span> <span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">20</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Teenager"</span> <span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">30</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Twen"</span> <span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">50</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Adult"</span> <span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">70</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Youngtimer"</span> <span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">100</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Oldtimer"</span> <span style="Color:blue"> Else</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Centennial"</span> <span style="Color:blue"> End If End Sub</span> | Die in der übergeordneten Abfrage nicht erfüllten Fälle können wir mit 'ElseIf' weiter eingrenzen: | ||
<span style="Color:blue">Private Sub </span>ElseIf<span style="Color:gray">()</span> | |||
<span style="Color:blue"> Dim </span>intAge<span style="Color:blue"> As Integer</span> | |||
intAge <span style="Color:gray">=</span> <span style="Color:gray">100</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Age: "</span> & intAge | |||
<span style="Color:blue"> If </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">1</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Newborn"</span> | |||
<span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Toddler"</span> | |||
<span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><=</span> <span style="Color:gray">12</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Child"</span> | |||
<span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">20</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Teenager"</span> | |||
<span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">30</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Twen"</span> | |||
<span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">50</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Adult"</span> | |||
<span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">70</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Youngtimer"</span> | |||
<span style="Color:blue"> ElseIf </span>intAge <span style="Color:gray"><</span> <span style="Color:gray">100</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Oldtimer"</span> | |||
<span style="Color:blue"> Else</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Centennial"</span> | |||
<span style="Color:blue"> End If | |||
End Sub</span> | |||
=== Verschachtelte If-Abfragen === | === Verschachtelte If-Abfragen === | ||
Sie können If-Abfragen, wenn es die Logik erfordert oder wenn es der Lesbarkeit dient, ineinander verschachteln: <span style="Color:blue"> If True Then</span> <span style="Color:blue"> If </span>MoreTrue<span style="Color:blue"> Then</span> <span style="Color:green">' ...</span> <span style="Color:blue"> ElseIf </span>EvenMoreTrue<span style="Color:blue"> Then</span> <span style="Color:green">' ...</span> <span style="Color:blue"> Else</span> <span style="Color:green">' ...</span> <span style="Color:blue"> End If</span> <span style="Color:green">' ...</span> <span style="Color:blue"> Else</span> <span style="Color:green">' ...</span> <span style="Color:blue"> If </span>OtherTrue<span style="Color:blue"> Then</span> <span style="Color:green">' ...</span> <span style="Color:blue"> End If</span> <span style="Color:green">' ...</span> <span style="Color:blue"> End If</span> | Sie können If-Abfragen, wenn es die Logik erfordert oder wenn es der Lesbarkeit dient, ineinander verschachteln: | ||
<span style="Color:blue"> If True Then</span> | |||
<span style="Color:blue"> If </span>MoreTrue<span style="Color:blue"> Then</span> | |||
<span style="Color:green">' ...</span> | |||
<span style="Color:blue"> ElseIf </span>EvenMoreTrue<span style="Color:blue"> Then</span> | |||
<span style="Color:green">' ...</span> | |||
<span style="Color:blue"> Else</span> | |||
<span style="Color:green">' ...</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:green">' ...</span> | |||
<span style="Color:blue"> Else</span> | |||
<span style="Color:green">' ...</span> | |||
<span style="Color:blue"> If </span>OtherTrue<span style="Color:blue"> Then</span> | |||
<span style="Color:green">' ...</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:green">' ...</span> | |||
<span style="Color:blue"> End If</span> | |||
=== 'And' und 'Or' === | === 'And' und 'Or' === | ||
<span style="Color:blue">Sub </span>IfAndOr<span style="Color:gray">()</span> <span style="Color:blue"> Dim </span>intVariable<span style="Color:blue"> As Integer</span> intVariable <span style="Color:gray">= 7</span> <span style="Color:green">' Oder-Verknüpfung: Mindestens ein Fall tritt ein</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl: "</span> & intVariable <span style="Color:blue"> If </span>intVariable <span style="Color:gray"><</span> <span style="Color:gray">5</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist kleiner 5 oder größer als 10"</span> <span style="Color:blue"> ElseIf </span>intVariable <span style="Color:gray">></span> <span style="Color:gray">10</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist kleiner 5 oder größer als 10"</span> <span style="Color:blue"> End If</span> <span style="Color:blue"> If </span>intVariable <span style="Color:gray"><</span> <span style="Color:gray">5</span><span style="Color:blue"> Or </span>intVariable <span style="Color:gray">></span> <span style="Color:gray">10</span><span style="Color:blue"> Then </span> <span style="Color:green">' Bei Or muss mindestens ein Fall eintreten</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist kleiner 5 oder größer als 10"</span> <span style="Color:blue"> End If</span> <span style="Color:green">' Und-Verknüpfung: Beide Bedingungen müssen erfüllt sein</span> <span style="Color:blue"> If </span>intVariable <span style="Color:gray">>=</span> <span style="Color:gray">5</span><span style="Color:blue"> Then</span> <span style="Color:blue"> If </span>intVariable <span style="Color:gray"><=</span> <span style="Color:gray">10</span><span style="Color:blue"> Then</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist zwischen 5 und 10"</span> <span style="Color:blue"> End If</span> <span style="Color:blue"> End If</span> <span style="Color:blue"> If </span>intVariable <span style="Color:gray">>=</span> <span style="Color:gray">5</span><span style="Color:blue"> And </span>intVariable <span style="Color:gray"><=</span> <span style="Color:gray">10</span><span style="Color:blue"> Then </span> <span style="Color:green">' Bei And müssen beide Fälle eintreten</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist zwischen 5 und 10"</span> <span style="Color:blue"> End If</span> <span style="Color:blue">End Sub</span> | <span style="Color:blue">Sub </span>IfAndOr<span style="Color:gray">()</span> | ||
<span style="Color:blue"> Dim </span>intVariable<span style="Color:blue"> As Integer</span> | |||
intVariable <span style="Color:gray">= 7</span> | |||
<span style="Color:green">' Oder-Verknüpfung: Mindestens ein Fall tritt ein</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl: "</span> & intVariable | |||
<span style="Color:blue"> If </span>intVariable <span style="Color:gray"><</span> <span style="Color:gray">5</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist kleiner 5 oder größer als 10"</span> | |||
<span style="Color:blue"> ElseIf </span>intVariable <span style="Color:gray">></span> <span style="Color:gray">10</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist kleiner 5 oder größer als 10"</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:blue"> If </span>intVariable <span style="Color:gray"><</span> <span style="Color:gray">5</span><span style="Color:blue"> Or </span>intVariable <span style="Color:gray">></span> <span style="Color:gray">10</span><span style="Color:blue"> Then </span> <span style="Color:green">' Bei Or muss mindestens ein Fall eintreten</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist kleiner 5 oder größer als 10"</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:green">' Und-Verknüpfung: Beide Bedingungen müssen erfüllt sein</span> | |||
<span style="Color:blue"> If </span>intVariable <span style="Color:gray">>=</span> <span style="Color:gray">5</span><span style="Color:blue"> Then</span> | |||
<span style="Color:blue"> If </span>intVariable <span style="Color:gray"><=</span> <span style="Color:gray">10</span><span style="Color:blue"> Then</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist zwischen 5 und 10"</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:blue"> If </span>intVariable <span style="Color:gray">>=</span> <span style="Color:gray">5</span><span style="Color:blue"> And </span>intVariable <span style="Color:gray"><=</span> <span style="Color:gray">10</span><span style="Color:blue"> Then </span> <span style="Color:green">' Bei And müssen beide Fälle eintreten</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Zahl ist zwischen 5 und 10"</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:blue">End Sub</span> | |||
=== Klammersetzung in If-Abfragen === | === Klammersetzung in If-Abfragen === | ||
Bei If-Abfragen können mit 'And' bzw. 'Or' zusammengefasste Auswertungen mithilfe von Klammern logisch zusammengefasst werden. In diesem Beispiel besteht die zweite Bedingung (in Klammern) aus zwei optionalen Werten (durch 'Or' verknüpft), insgesamt muss jedoch auch die erste Bedingung erfüllt sein. Ohne Klammern setzt die letzte Bedingung nicht voraus, dass auch die erste erfüllt ist. <span style="Color:blue">If </span>strInput01 <span style="Color:gray">=</span> <span style="Color:gray">"Begrüßung"</span><span style="Color:blue"> And </span><span style="Color:gray">(</span>strInput02 <span style="Color:gray">=</span> <span style="Color:gray">"Hallo"</span><span style="Color:blue"> Or </span>strInput02 <span style="Color:gray">=</span> <span style="Color:gray">"Huhu")</span><span style="Color:blue"> Then</span> <span style="Color:green">' ...</span> <span style="Color:blue">End If</span> | Bei If-Abfragen können mit 'And' bzw. 'Or' zusammengefasste Auswertungen mithilfe von Klammern logisch zusammengefasst werden. In diesem Beispiel besteht die zweite Bedingung (in Klammern) aus zwei optionalen Werten (durch 'Or' verknüpft), insgesamt muss jedoch auch die erste Bedingung erfüllt sein. Ohne Klammern setzt die letzte Bedingung nicht voraus, dass auch die erste erfüllt ist. | ||
<span style="Color:blue">If </span>strInput01 <span style="Color:gray">=</span> <span style="Color:gray">"Begrüßung"</span><span style="Color:blue"> And </span><span style="Color:gray">(</span>strInput02 <span style="Color:gray">=</span> <span style="Color:gray">"Hallo"</span><span style="Color:blue"> Or </span>strInput02 <span style="Color:gray">=</span> <span style="Color:gray">"Huhu")</span><span style="Color:blue"> Then</span> | |||
<span style="Color:green">' ...</span> | |||
<span style="Color:blue">End If</span> | |||
=== Kurzschreibweise === | === Kurzschreibweise === | ||
Der Anweisungsblock einer If-Abfrage kann, sofern dieser nur aus einer einzigen Befehlszeile besteht, direkt hinter dem 'Then' angegeben werden. Das 'End If' entfällt dann: <span style="Color:blue"> If True Then Exit Sub</span> Bei einem ElseIf-Zweig kann dies ebenso eingesetzt werden. Beachten Sie dann jedoch, dass hier das 'End If' erforderlich ist! <span style="Color:blue">If True Then Exit Sub ElseIf </span>MoreTrue<span style="Color:blue"> Then Exit Sub End If</span> Bei einem Else-Zweig fügt der VBA-Editor automatisch einen Doppelpunkt ein. Auch in diesem Fall wird wieder das 'End If' erfordert: <span style="Color:blue">If True Then Exit Sub Else: Exit Sub End If</span> '''Bitte beachten:''' Diese Schreibweise wird nur dann akzeptiert, wenn die erste Zeile '''nicht''' die Kurzschreibweise verwendet! '''Bitte beachten:''' Wenn Sie sich für die Kurzschreibweise entschieden haben, dürfen Sie keine weitere Anweisungen im Anweisungsblock angeben! '''Fazit:''' Die einfache Kurzschreibweise (erstes Beispiel) kann gerne eingesetzt werden, um den Code kurz, knapp und übersichtlich zu gestalten. Je weiter wir diese ausbauen und mit weiteren Elementen (ElseIf, Else) verknüpfen, desto mehr verliert die Kurzschreibweise jedoch diese Vorteile und wirkt im Gegendsatz eher verwirrend. | Der Anweisungsblock einer If-Abfrage kann, sofern dieser nur aus einer einzigen Befehlszeile besteht, direkt hinter dem 'Then' angegeben werden. Das 'End If' entfällt dann: | ||
<span style="Color:blue"> If True Then Exit Sub</span> | |||
Bei einem ElseIf-Zweig kann dies ebenso eingesetzt werden. Beachten Sie dann jedoch, dass hier das 'End If' erforderlich ist! | |||
<span style="Color:blue">If True Then Exit Sub | |||
ElseIf </span>MoreTrue<span style="Color:blue"> Then Exit Sub | |||
End If</span> | |||
Bei einem Else-Zweig fügt der VBA-Editor automatisch einen Doppelpunkt ein. Auch in diesem Fall wird wieder das 'End If' erfordert: | |||
<span style="Color:blue">If True Then | |||
Exit Sub | |||
Else: Exit Sub | |||
End If</span> | |||
'''Bitte beachten:''' Diese Schreibweise wird nur dann akzeptiert, wenn die erste Zeile '''nicht''' die Kurzschreibweise verwendet! | |||
'''Bitte beachten:''' Wenn Sie sich für die Kurzschreibweise entschieden haben, dürfen Sie keine weitere Anweisungen im Anweisungsblock angeben! | |||
'''Fazit:''' Die einfache Kurzschreibweise (erstes Beispiel) kann gerne eingesetzt werden, um den Code kurz, knapp und übersichtlich zu gestalten. Je weiter wir diese ausbauen und mit weiteren Elementen (ElseIf, Else) verknüpfen, desto mehr verliert die Kurzschreibweise jedoch diese Vorteile und wirkt im Gegendsatz eher verwirrend. | |||
== Select Case == | == Select Case == | ||
Am Beispiel des Else-If Zweiges erkennen wir, dass diese Form der Verzweigung sehr unübersichtlich erscheinen kann. Hier kann eine 'Select Case'-Verzweigung deutlich aufgeräumter und übersichtlicher erscheinen: <span style="Color:blue">Private Sub </span>SelectCase<span style="Color:gray">()</span> <span style="Color:blue"> Dim </span>intAge<span style="Color:blue"> As Integer</span> intAge <span style="Color:gray">=</span> <span style="Color:gray">100</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Age: "</span> & intAge <span style="Color:blue"> Select Case </span>intAge <span style="Color:blue"> Case </span><span style="Color:gray">0</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Unborn"</span> <span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">1</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Newborn"</span> <span style="Color:blue"> Case Is </span><span style="Color:gray"><=</span> <span style="Color:gray">3</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Toddler"</span> <span style="Color:blue"> Case Is </span><span style="Color:gray"><=</span> <span style="Color:gray">12</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Child"</span> <span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">20</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Teenager"</span> <span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">30</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Twen"</span> <span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">50</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Adult"</span> <span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">70</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Youngtimer"</span> <span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">100</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Oldtimer"</span> <span style="Color:blue"> Case Else</span> Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Centennial"</span> <span style="Color:blue"> End Select End Sub</span> Wie Sie sehen, stehen nun die abgefragten Werte in einer erkennbaren Spalte untereinander, das Auge findet sich gleich in der Struktur zurecht. | Am Beispiel des Else-If Zweiges erkennen wir, dass diese Form der Verzweigung sehr unübersichtlich erscheinen kann. Hier kann eine 'Select Case'-Verzweigung deutlich aufgeräumter und übersichtlicher erscheinen: | ||
<span style="Color:blue">Private Sub </span>SelectCase<span style="Color:gray">()</span> | |||
<span style="Color:blue"> Dim </span>intAge<span style="Color:blue"> As Integer</span> | |||
intAge <span style="Color:gray">=</span> <span style="Color:gray">100</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Age: "</span> & intAge | |||
<span style="Color:blue"> Select Case </span>intAge | |||
<span style="Color:blue"> Case </span><span style="Color:gray">0</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Unborn"</span> | |||
<span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">1</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Newborn"</span> | |||
<span style="Color:blue"> Case Is </span><span style="Color:gray"><=</span> <span style="Color:gray">3</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Toddler"</span> | |||
<span style="Color:blue"> Case Is </span><span style="Color:gray"><=</span> <span style="Color:gray">12</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Child"</span> | |||
<span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">20</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Teenager"</span> | |||
<span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">30</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Twen"</span> | |||
<span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">50</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Adult"</span> | |||
<span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">70</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Youngtimer"</span> | |||
<span style="Color:blue"> Case Is </span><span style="Color:gray"><</span> <span style="Color:gray">100</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Oldtimer"</span> | |||
<span style="Color:blue"> Case Else</span> | |||
Debug<span style="Color:gray">.</span>Print <span style="Color:gray">"Centennial"</span> | |||
<span style="Color:blue"> End Select | |||
End Sub</span> | |||
Wie Sie sehen, stehen nun die abgefragten Werte in einer erkennbaren Spalte untereinander, das Auge findet sich gleich in der Struktur zurecht. | |||
=== Regeln === | === Regeln === | ||
Zeile 41: | Zeile 240: | ||
* Die Vergleichswerte geben Sie in einer neuen Zeile hinter 'Case' an | * Die Vergleichswerte geben Sie in einer neuen Zeile hinter 'Case' an | ||
* Zusätzliche Einschränkungen ('<', '<=', '<>') werden automatisch um ein 'Is' ergänzt ('Case Is < 70') | * Zusätzliche Einschränkungen ('<', '<=', '<>') werden automatisch um ein 'Is' ergänzt ('Case Is < 70') | ||
* Der Else-Zweig lautet 'Case Else' Sie können mehrere Werte in einem Zweig abfragen, indem Sie die Werte durch Kommata voneinander trennen: <span style="Color:blue">Case </span><span style="Color:gray">0,</span> <span style="Color:gray">2,</span> <span style="Color:gray">5,</span><span style="Color:blue"> Is </span><span style="Color:gray">></span> <span style="Color:gray">10</span> | * Der Else-Zweig lautet 'Case Else' | ||
Sie können mehrere Werte in einem Zweig abfragen, indem Sie die Werte durch Kommata voneinander trennen: | |||
<span style="Color:blue">Case </span><span style="Color:gray">0,</span> <span style="Color:gray">2,</span> <span style="Color:gray">5,</span><span style="Color:blue"> Is </span><span style="Color:gray">></span> <span style="Color:gray">10</span> | |||
=== Einschränkungen === | === Einschränkungen === | ||
Im folgenden Fall können die If-Abfragen NICHT durch ein Select ersetzt werden, denn jede If-Abfrage fragt einen anderen Wert ab: <span style="Color:blue">Sub </span>SelectCaseLimitations<span style="Color:gray">()</span> <span style="Color:blue"> Dim </span>dteDate<span style="Color:blue"> As Date</span> <span style="Color:blue"> If </span>Year<span style="Color:gray">(</span>Now<span style="Color:gray">())</span> <span style="Color:gray">=</span> <span style="Color:gray">2015</span><span style="Color:blue"> Then</span> <span style="Color:blue"> ElseIf </span>Year<span style="Color:gray">(</span>dteDate<span style="Color:gray">)</span> <span style="Color:gray"><</span> <span style="Color:gray">2017</span><span style="Color:blue"> Then</span> <span style="Color:blue"> ElseIf </span>Month<span style="Color:gray">(</span>dteDate<span style="Color:gray">)</span> <span style="Color:gray">></span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> <span style="Color:blue"> End If</span> <span style="Color:blue">End Sub</span> | Im folgenden Fall können die If-Abfragen NICHT durch ein Select ersetzt werden, denn jede If-Abfrage fragt einen anderen Wert ab: | ||
<span style="Color:blue">Sub </span>SelectCaseLimitations<span style="Color:gray">()</span> | |||
<span style="Color:blue"> Dim </span>dteDate<span style="Color:blue"> As Date</span> | |||
<span style="Color:blue"> If </span>Year<span style="Color:gray">(</span>Now<span style="Color:gray">())</span> <span style="Color:gray">=</span> <span style="Color:gray">2015</span><span style="Color:blue"> Then</span> | |||
<span style="Color:blue"> ElseIf </span>Year<span style="Color:gray">(</span>dteDate<span style="Color:gray">)</span> <span style="Color:gray"><</span> <span style="Color:gray">2017</span><span style="Color:blue"> Then</span> | |||
<span style="Color:blue"> ElseIf </span>Month<span style="Color:gray">(</span>dteDate<span style="Color:gray">)</span> <span style="Color:gray">></span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:blue">End Sub</span> | |||
=== Beispiele === | === Beispiele === | ||
<span style="Color:blue">Sub </span>MessageBoxResult<span style="Color:gray">()</span> <span style="Color:green">' Beispiel: Auswertung des Rückgabewertes einer Messsagebox</span> <span style="Color:blue"> Select Case </span>MsgBox<span style="Color:gray">("Select this",</span> vbYesNoCancel<span style="Color:gray">)</span> <span style="Color:blue"> Case </span><span style="Color:gray">6</span> MsgBox <span style="Color:gray">"Ja!"</span> <span style="Color:blue"> Case </span><span style="Color:gray">7</span> MsgBox <span style="Color:gray">"Nö..."</span> <span style="Color:blue"> Case </span><span style="Color:gray">2</span> MsgBox <span style="Color:gray">"Abbruch!!!"</span> <span style="Color:blue"> Case Else</span> MsgBox <span style="Color:gray">"Nicht definiert?!?"</span> <span style="Color:blue"> End Select End Sub</span> <span style="Color:blue">Sub </span>SelectString<span style="Color:gray">()</span> <span style="Color:blue"> Select Case </span>InputBox<span style="Color:gray">("Bitte geben Sie Ihren Namen an")</span> <span style="Color:blue"> Case </span><span style="Color:gray">"Patrick Wania"</span> MsgBox <span style="Color:gray">"Hallo"</span> <span style="Color:blue"> Case </span><span style="Color:gray">"Erich Stroheim"</span> MsgBox <span style="Color:gray">"Huhu"</span> <span style="Color:blue"> Case Else</span> MsgBox <span style="Color:gray">"Wer sind Sie?!?"</span> <span style="Color:blue"> End Select End Sub</span> | <span style="Color:blue">Sub </span>MessageBoxResult<span style="Color:gray">()</span> | ||
<span style="Color:green">' Beispiel: Auswertung des Rückgabewertes einer Messsagebox</span> | |||
<span style="Color:blue"> Select Case </span>MsgBox<span style="Color:gray">("Select this",</span> vbYesNoCancel<span style="Color:gray">)</span> | |||
<span style="Color:blue"> Case </span><span style="Color:gray">6</span> | |||
MsgBox <span style="Color:gray">"Ja!"</span> | |||
<span style="Color:blue"> Case </span><span style="Color:gray">7</span> | |||
MsgBox <span style="Color:gray">"Nö..."</span> | |||
<span style="Color:blue"> Case </span><span style="Color:gray">2</span> | |||
MsgBox <span style="Color:gray">"Abbruch!!!"</span> | |||
<span style="Color:blue"> Case Else</span> | |||
MsgBox <span style="Color:gray">"Nicht definiert?!?"</span> | |||
<span style="Color:blue"> End Select | |||
End Sub</span> | |||
<span style="Color:blue">Sub </span>SelectString<span style="Color:gray">()</span> | |||
<span style="Color:blue"> Select Case </span>InputBox<span style="Color:gray">("Bitte geben Sie Ihren Namen an")</span> | |||
<span style="Color:blue"> Case </span><span style="Color:gray">"Patrick Wania"</span> | |||
MsgBox <span style="Color:gray">"Hallo"</span> | |||
<span style="Color:blue"> Case </span><span style="Color:gray">"Erich Stroheim"</span> | |||
MsgBox <span style="Color:gray">"Huhu"</span> | |||
<span style="Color:blue"> Case Else</span> | |||
MsgBox <span style="Color:gray">"Wer sind Sie?!?"</span> | |||
<span style="Color:blue"> End Select | |||
End Sub</span> | |||
== Vergleichsoperatoren == | == Vergleichsoperatoren == | ||
Um prüfen zu können, ob eine Bedingung erfüllt ist, können folgende Möglichkeiten genutzt werden: === Entspricht genau (=) === Dieser Operator vergleicht zwei Werte miteinander und wird nur genau in dem einen Fall den Vergleich positiv bewerten, wenn beide Werte sich 100 % entsprechen. Eine Umwandlung der Datentypen, falls diese nicht gleich sind, erfolgt dabei automatisch. Debug.Print 1 = 1 ' Wahr Debug.Print 1 = "1" ' Wahr Debug.Print 1 = 1.0 ' Wahr Debug.Print 1.1 = 1 ' Falsch Debug.Print "a" = "A" ' Falsch Da der Vergleich von Zeichenketten die Groß- und Kleinschreibung berücksichtigt, können wir mit den Funktionen <code>UCase()</code> bzw. <code>LCase()</code> diesen Unterschied ausgleichen: Debug.Print "a" = LCase("A") ' Wahr Beim Vergleich von zwei Textvariablen sollten Sie beide Werte gleich umwandeln: Dim strValue01 As String, strValue02 As String strValue01 = "max" strValue02 = "Max" Debug.Print strValue01 = strValue02 ' Falsch Debug.Print LCase(strValue01) = LCase(strValue02) ' Wahr | Um prüfen zu können, ob eine Bedingung erfüllt ist, können folgende Möglichkeiten genutzt werden: | ||
=== Entspricht genau (=) === | |||
Dieser Operator vergleicht zwei Werte miteinander und wird nur genau in dem einen Fall den Vergleich positiv bewerten, wenn beide Werte sich 100 % entsprechen. Eine Umwandlung der Datentypen, falls diese nicht gleich sind, erfolgt dabei automatisch. | |||
Debug.Print 1 = 1 ' Wahr | |||
Debug.Print 1 = "1" ' Wahr | |||
Debug.Print 1 = 1.0 ' Wahr | |||
Debug.Print 1.1 = 1 ' Falsch | |||
Debug.Print "a" = "A" ' Falsch | |||
Da der Vergleich von Zeichenketten die Groß- und Kleinschreibung berücksichtigt, können wir mit den Funktionen <code>UCase()</code> bzw. <code>LCase()</code> diesen Unterschied ausgleichen: | |||
Debug.Print "a" = LCase("A") ' Wahr | |||
Beim Vergleich von zwei Textvariablen sollten Sie beide Werte gleich umwandeln: | |||
Dim strValue01 As String, strValue02 As String | |||
strValue01 = "max" | |||
strValue02 = "Max" | |||
Debug.Print strValue01 = strValue02 ' Falsch | |||
Debug.Print LCase(strValue01) = LCase(strValue02) ' Wahr | |||
=== Ungleich (<>) === | === Ungleich (<>) === | ||
Mit dem Ungleich-Operator wird geprüft, ob sich zwei Werte unterscheiden. Hierbei wird nicht berücksichtigt, auf welche Art sich die Werte unterscheiden. Debug.Print 1 <> 1 ' Falsch Debug.Print 1 <> "1" ' Falsch Debug.Print 1 <> 1.0 ' Falsch Debug.Print 1.1 <> 1 ' Wahr Debug.Print "a" <> "A" ' Wahr Beim Vergleich von Zeichenketten beachten Sie bitte die oben beschriebenen Anmerkungen zur Umwandlung für einen Vergleich, welcher die Groß- und Kleinschreibung nicht berücksichtigt: Debug.Print "a" <> LCase("A") ' Falsch Dim strValue01 As String, strValue02 As String strValue01 = "max" strValue02 = "Max" Debug.Print strValue01 = strValue02 ' Wahr Debug.Print LCase(strValue01) = LCase(strValue02) ' Falsch === Größenvergleiche (<, <=, >, >=) === Der Größenvergleich von Zahlen sollte keiner Erklärung bedürfen: Debug.Print 1 < 2 ' Wahr Debug.Print 1 <= 2 ' Wahr Debug.Print 1 < 1 ' Falsch Debug.Print 1 <= 1 ' Wahr usw. Der Größenvergleich von Zeichenketten bewirkt, dass die Zeichenpositionen der einzelnen Buchstaben in der Zeichentabelle betrachtet werden. In der Zeichentabelle beginnen die Großbuchstaben mit dem 'A' an der Position 65, die Kleinbuchstaben mit dem 'a' bei 97. Umlaute und weitere Sonderzeichen erscheinen weiter hinten in der Zeichentabelle. Debug.Print "Max" < "max" ' Wahr Debug.Print "berta" <= "Emil" ' Falsch Debug.Print "Max" < "Max" ' Falsch Debug.Print "Max" <= "Max" ' Wahr usw. Auch bei diesen Vergleichen bietet es sich in bestimmten Fällen an, mit der oben beschriebenen Umwandlungen zu arbeiten, wenn Sie den Vergleich von Texten ohne Berücksichtigung der Groß- und Kleinschreibung durchführen möchten: Debug.Print LCase("Max") < LCase("max") ' entspricht "max" < "max" (Falsch) Debug.Print LCase("berta") <= LCase("Emil") ' entspricht "berta" <= "emil" (Wahr) Debug.Print LCase("Max") <= LCase("max") ' entspricht "max" <= "max" (Wahr) usw. | Mit dem Ungleich-Operator wird geprüft, ob sich zwei Werte unterscheiden. Hierbei wird nicht berücksichtigt, auf welche Art sich die Werte unterscheiden. | ||
Debug.Print 1 <> 1 ' Falsch | |||
Debug.Print 1 <> "1" ' Falsch | |||
Debug.Print 1 <> 1.0 ' Falsch | |||
Debug.Print 1.1 <> 1 ' Wahr | |||
Debug.Print "a" <> "A" ' Wahr | |||
Beim Vergleich von Zeichenketten beachten Sie bitte die oben beschriebenen Anmerkungen zur Umwandlung für einen Vergleich, welcher die Groß- und Kleinschreibung nicht berücksichtigt: | |||
Debug.Print "a" <> LCase("A") ' Falsch | |||
Dim strValue01 As String, strValue02 As String | |||
strValue01 = "max" | |||
strValue02 = "Max" | |||
Debug.Print strValue01 = strValue02 ' Wahr | |||
Debug.Print LCase(strValue01) = LCase(strValue02) ' Falsch | |||
=== Größenvergleiche (<, <=, >, >=) === | |||
Der Größenvergleich von Zahlen sollte keiner Erklärung bedürfen: | |||
Debug.Print 1 < 2 ' Wahr | |||
Debug.Print 1 <= 2 ' Wahr | |||
Debug.Print 1 < 1 ' Falsch | |||
Debug.Print 1 <= 1 ' Wahr | |||
usw. | |||
Der Größenvergleich von Zeichenketten bewirkt, dass die Zeichenpositionen der einzelnen Buchstaben in der Zeichentabelle betrachtet werden. In der Zeichentabelle beginnen die Großbuchstaben mit dem 'A' an der Position 65, die Kleinbuchstaben mit dem 'a' bei 97. Umlaute und weitere Sonderzeichen erscheinen weiter hinten in der Zeichentabelle. | |||
Debug.Print "Max" < "max" ' Wahr | |||
Debug.Print "berta" <= "Emil" ' Falsch | |||
Debug.Print "Max" < "Max" ' Falsch | |||
Debug.Print "Max" <= "Max" ' Wahr | |||
usw. | |||
Auch bei diesen Vergleichen bietet es sich in bestimmten Fällen an, mit der oben beschriebenen Umwandlungen zu arbeiten, wenn Sie den Vergleich von Texten ohne Berücksichtigung der Groß- und Kleinschreibung durchführen möchten: | |||
Debug.Print LCase("Max") < LCase("max") ' entspricht "max" < "max" (Falsch) | |||
Debug.Print LCase("berta") <= LCase("Emil") ' entspricht "berta" <= "emil" (Wahr) | |||
Debug.Print LCase("Max") <= LCase("max") ' entspricht "max" <= "max" (Wahr) | |||
usw. | |||
=== Mustervergleich (Like) === | === Mustervergleich (Like) === | ||
Der Like-Operator ermöglicht die Überprüfung, ob eine Zeichenkette einem erwarteten Muster entspricht. Hierbei gelten folgende Regeln: | Der Like-Operator ermöglicht die Überprüfung, ob eine Zeichenkette einem erwarteten Muster entspricht. | ||
{| class="wikitable" | |||
Hierbei gelten folgende Regeln: | |||
{| class="wikitable" | |||
! style="text-align:left;" | Gruppe | ! style="text-align:left;" | Gruppe | ||
! style="text-align:left;" | Zeichen | ! style="text-align:left;" | Zeichen | ||
Zeile 69: | Zeile 380: | ||
|- | |- | ||
| Generell | | Generell | ||
| | Texte können direkt verglichen werden, 'Like' verhält sich dann wie '=' | | | ||
| strText <span style="Color:#993300;">=</span> <span style="Color:#808080;">"Test"</span> <span style="Color:#0000FF;">If </span>strText <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"Test"</span> Then MsgBox <span style="Color:#808080;">"Juhuu!"</span> <span style="Color:#0000FF;">End If</span> <span style="Color:#008000;">' oder: </span> <span style="Color:#0000FF;">If </span>strText <span style="Color:#993300;">=</span> <span style="Color:#808080;">"Test"</span> Then MsgBox <span style="Color:#808080;">"Juhuu!"</span> <span style="Color:#0000FF;">End If</span> | | Texte können direkt verglichen werden, 'Like' verhält sich dann wie '=' | ||
|- | | | ||
strText <span style="Color:#993300;">=</span> <span style="Color:#808080;">"Test"</span> | |||
<span style="Color:#0000FF;">If </span>strText <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"Test"</span> Then | |||
MsgBox <span style="Color:#808080;">"Juhuu!"</span> | |||
<span style="Color:#0000FF;">End If</span> | |||
<span style="Color:#008000;">' oder: | |||
</span> <span style="Color:#0000FF;">If </span>strText <span style="Color:#993300;">=</span> <span style="Color:#808080;">"Test"</span> Then | |||
MsgBox <span style="Color:#808080;">"Juhuu!"</span> | |||
<span style="Color:#0000FF;">End If</span> | |||
|- | |||
| | | | ||
| " | | " | ||
| Wenn Sie ein Anführungszeichen in einen Mustervergleich mit einbeziehen möchten, muss dieses verdoppelt werden ( "" ). | | Wenn Sie ein Anführungszeichen in einen Mustervergleich mit einbeziehen möchten, muss dieses verdoppelt werden ( "" ). | ||
| <span style="Color:#7F7F7F;">"Dann ertönte ""Bitte wenden!"""</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*""*"</span> <span style="Color:#008000;">' Enthält der Text ein Anführungszeichen?</span> | | | ||
|- | <span style="Color:#7F7F7F;">"Dann ertönte ""Bitte wenden!"""</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*""*"</span> <span style="Color:#008000;">' Enthält der Text ein Anführungszeichen?</span> | ||
|- | |||
| Unspezifische Platzhalter | | Unspezifische Platzhalter | ||
| ? | | ? | ||
| Das Fragezeichen ersetzt ein einzelnes beliebiges Zeichen (a, 4, | | Das Fragezeichen ersetzt ein einzelnes beliebiges Zeichen (a, 4, §, ~, Ü, ...) | ||
| <span style="Color:#7F7F7F;">"Test"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"T???"</span> | | | ||
|- | <span style="Color:#7F7F7F;">"Test"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"T???"</span> | ||
| | | |- | ||
* | | | ||
| * | |||
| Der Stern ersetzt kein oder eine beliebige Anzahl beliebiger Zeichen. | | Der Stern ersetzt kein oder eine beliebige Anzahl beliebiger Zeichen. | ||
| | | | ||
<span style="Color:#7F7F7F;">"Beispiel"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*spiel*"</span> | |||
|- | |||
| | |||
| # | | # | ||
| Das Doppelkreuz ersetzt eine einzelne Ziffer (0-9) | | Das Doppelkreuz ersetzt eine einzelne Ziffer (0-9) | ||
| <span style="Color:#7F7F7F;">"+49 123 456789"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"+49 ##*"</span> | | | ||
|- | <span style="Color:#7F7F7F;">"+49 123 456789"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"+49 ##*"</span> | ||
|- | |||
| Spezifische Platzhalter | | Spezifische Platzhalter | ||
| [ ] | | [ ] | ||
| In eckigen Klammern kann ein Zeichenbereich oder eine Zeichengruppen angegeben werden, mit der verglichen werden soll. | | In eckigen Klammern kann ein Zeichenbereich oder eine Zeichengruppen angegeben werden, mit der verglichen werden soll. | ||
| | | | ||
<span style="Color:#7F7F7F;">"Übung"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"[A-ZÄÖÜ]*"</span> | |||
|- | |||
| | |||
| - | | - | ||
| Mit dem Minus kann in eckigen Klammern ein Zeichenbereich angegeben werden, wie 'A-Z', '0-9' etc. | | Mit dem Minus kann in eckigen Klammern ein Zeichenbereich angegeben werden, wie 'A-Z', '0-9' etc. | ||
| <span style="Color:#7F7F7F;">"Übung"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"[A-ZÄÖÜ]*"</span> | | | ||
|- | <span style="Color:#7F7F7F;">"Übung"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"[A-ZÄÖÜ]*"</span> | ||
| | | |- | ||
! | | | ||
| ! | |||
| Wenn Sie dem / den gesuchten Zeichen in eckigen Klammern ein Ausrufezeichen voranstellen, wird nach allen Zeichen '''außer''' den angegebenen gesucht. | | Wenn Sie dem / den gesuchten Zeichen in eckigen Klammern ein Ausrufezeichen voranstellen, wird nach allen Zeichen '''außer''' den angegebenen gesucht. | ||
| | | | ||
<span style="Color:#7F7F7F;">"Übung"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*[!&]*"</span> | |||
|- | |||
| | |||
| [ | | [ | ||
| Wenn Sie eine geöffnete eckige Klammer in Ihrem Muster verwenden, können Sie diese wie jedes andere Zeichen angeben: | | Wenn Sie eine geöffnete eckige Klammer in Ihrem Muster verwenden, können Sie diese wie jedes andere Zeichen angeben: | ||
| | | | ||
<span style="Color:#7F7F7F;">"[Muster]"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"[*"</span> <span style="Color:#008000;">' Beginnt der Text mit '['?</span> | |||
<span style="Color:#808080;">"[Muster]"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"[M[]*"</span> <span style="Color:#008000;">' Beginnt der Text mit 'M' oder '['? </span> | |||
<span style="Color:#808080;">"[Muster]"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"[[M]*"</span> <span style="Color:#008000;">' Beginnt der Text mit '[' oder 'M'? | |||
Die zweite '[' wird als Bestandteil des Zeichenbereichs innerhalb der eckigen Klammern betrachtet. | |||
|- | |||
| | |||
| ] | | ] | ||
| Die geschlossene eckige Klammer kann gar nicht in einem spezifischen Platzhalter eingesetzt werden, denn sie würde die eckige Klammer vorzeitig schließen. Daher muss sie immer getrennt (als einzelner Buchstabe) gesucht werden. | | Die geschlossene eckige Klammer kann gar nicht in einem spezifischen Platzhalter eingesetzt werden, denn sie würde die eckige Klammer vorzeitig schließen. Daher muss sie immer getrennt (als einzelner Buchstabe) gesucht werden. | ||
| <span style="Color:#7F7F7F;">"[Muster]"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*]"</span> <span style="Color:#008000;">' Endet der Text auf ']'?|- | | | ||
|- | <span style="Color:#7F7F7F;">"[Muster]"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*]"</span> <span style="Color:#008000;">' Endet der Text auf ']'?|- | ||
|- | |||
| | | | ||
| - | | - | ||
| Wenn Sie das Minuszeichen in einem spezifischen Platzhalter einbeziehen möchten, muss es an letzter Stelle angegeben werden, damit kein Paar um das Minus herum gebildet werden kann ('[ | | Wenn Sie das Minuszeichen in einem spezifischen Platzhalter einbeziehen möchten, muss es an letzter Stelle angegeben werden, damit kein Paar um das Minus herum gebildet werden kann ('[§-/]' würde bedeuten: die Zeichen zwischen '§' und '/'). | ||
| "+49 132 4658" Like "*[0-9 /()+'''-''']*" | | | ||
"+49 132 4658" Like "*[0-9 /()+'''-''']*" | |||
|- | |- | ||
| | ! | | | ||
| ! | |||
| Wenn Sie ein Ausrufezeichen in einem spezifischen Platzhalter einbeziehen möchten, darf es nicht an erster Stelle angegeben werden (es sei denn, Sie möchten sicher stellen, dass kein '!' enthalten ist, wie im zweiten Beispiel). | | Wenn Sie ein Ausrufezeichen in einem spezifischen Platzhalter einbeziehen möchten, darf es nicht an erster Stelle angegeben werden (es sei denn, Sie möchten sicher stellen, dass kein '!' enthalten ist, wie im zweiten Beispiel). | ||
| <span style="Color:#7F7F7F;">"Hallo!"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*[.,;:!?-]"</span> <span style="Color:#008000;">' Endet der Text auf ein Satzzeichen?</span> <span style="Color:#808080;">"Ja?"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*[!.,;:!?-]*"</span> <span style="Color:#008000;">' Enthält der Text mindestens ein Zeichen, das kein Satzzechen ist?</span> | | | ||
<span style="Color:#7F7F7F;">"Hallo!"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*[.,;:!?-]"</span> <span style="Color:#008000;">' Endet der Text auf ein Satzzeichen?</span> | |||
<span style="Color:#808080;">"Ja?"</span> <span style="Color:#993300;">Like</span> <span style="Color:#808080;">"*[!.,;:!?-]*"</span> <span style="Color:#008000;">' Enthält der Text mindestens ein Zeichen, das kein Satzzechen ist?</span> | |||
|} | |} | ||
{| class="wikitable" | {| class="wikitable" | ||
! style="text-align:left;" | Beispiel | ! style="text-align:left;" | Beispiel | ||
! style="text-align:left;" | Ergebnis | ! style="text-align:left;" | Ergebnis | ||
! style="text-align:left;" | Beschreibung | ! style="text-align:left;" | Beschreibung | ||
|- | |- | ||
| "Test" Like "Test" | | | ||
"Test" Like "Test" | |||
| Wahr | | Wahr | ||
| Beide Texte stimmen genau überein. | | Beide Texte stimmen genau überein. | ||
|- | |- | ||
| "Test" Like "test" | | | ||
"Test" Like "test" | |||
| Falsch | | Falsch | ||
| Groß- und Kleinschreibung muss übereinstimmen. | | Groß- und Kleinschreibung muss übereinstimmen. | ||
|- | |- | ||
| "Test" Like "[Tt]est" | | | ||
"Test" Like "[Tt]est" | |||
| Wahr | | Wahr | ||
| Das erste Zeichen (eingefasst in '[]') ist ein großes 'T' oder ein kleines 't' und wird von der Zeichenkette 'est' gefolgt. | | Das erste Zeichen (eingefasst in '[]') ist ein großes 'T' oder ein kleines 't' und wird von der Zeichenkette 'est' gefolgt. | ||
|- | |- | ||
| "Beispiel" Like "*?*" | | | ||
"Beispiel" Like "*?*" | |||
| Wahr | | Wahr | ||
| Die Zeichenkette enthält mindestens ein beliebiges Zeichen. Das '?' ist der Platzhalter für genau ein beliebiges Zeichen (Ziffer, Buchstabe, Satzzeichen, Sonderzeichen, ...). | | Die Zeichenkette enthält mindestens ein beliebiges Zeichen. Das '?' ist der Platzhalter für genau ein beliebiges Zeichen (Ziffer, Buchstabe, Satzzeichen, Sonderzeichen, ...). | ||
|- | |- | ||
| "Test" Like "T???" | | | ||
"Test" Like "T???" | |||
| Wahr | | Wahr | ||
| Ein großes 'T' wird von genau drei beliebigen einzelnen Zeichen gefolgt. | | Ein großes 'T' wird von genau drei beliebigen einzelnen Zeichen gefolgt. | ||
|- | |- | ||
| "Test" Like "T*" "T" Like "T*" | | | ||
"Test" Like "T*" | |||
"T" Like "T*" | |||
| Wahr | | Wahr | ||
| Ein großes 'T' wird von einer beliebigen Anzahl (inklusive keinen) Zeichen gefolgt. | | Ein großes 'T' wird von einer beliebigen Anzahl (inklusive keinen) Zeichen gefolgt. | ||
|- | |- | ||
| "Beispiel" Like "*spiel" | | | ||
"Beispiel" Like "*spiel" | |||
| Wahr | | Wahr | ||
| Die Zeichenkette endet auf 'spiel'. | | Die Zeichenkette endet auf 'spiel'. | ||
|- | |- | ||
| "Beispiel" Like "*spiel*" | | | ||
"Beispiel" Like "*spiel*" | |||
| Wahr | | Wahr | ||
| Die Zeichenkette enthält 'spiel'. | | Die Zeichenkette enthält 'spiel'. | ||
|- | |- | ||
| "Beispiel" Like "*[Ss]piel*" | | | ||
"Beispiel" Like "*[Ss]piel*" | |||
| Wahr | | Wahr | ||
| Die Zeichenkette enthält 'Spiel' oder 'spiel'. | | Die Zeichenkette enthält 'Spiel' oder 'spiel'. | ||
|- | |- | ||
| "Beispiel" Like "[A-G]*" | | | ||
"Beispiel" Like "[A-G]*" | |||
| Wahr | | Wahr | ||
| Der erste Buchstabe stammt aus der Liste von Großbuchstaben zwischen A und G. | | Der erste Buchstabe stammt aus der Liste von Großbuchstaben zwischen A und G. | ||
|- | |- | ||
| "Übung" Like "[A-Z]*" | | | ||
"Übung" Like "[A-Z]*" | |||
| Falsch | | Falsch | ||
| Der erste Buchstabe ist ein Sonderzeichen und stammt somit nicht aus der Liste von Großbuchstaben zwischen A und Z. | | Der erste Buchstabe ist ein Sonderzeichen und stammt somit nicht aus der Liste von Großbuchstaben zwischen A und Z. | ||
|- | |- | ||
| "Rastatt" Like "*[Ss]ta[dt]t" | | | ||
"Rastatt" Like "*[Ss]ta[dt]t" | |||
| Wahr | | Wahr | ||
| Die Zeichenkette lautet oder endet auf 'Stadt', 'stadt', 'Statt' oder 'statt'. | | Die Zeichenkette lautet oder endet auf 'Stadt', 'stadt', 'Statt' oder 'statt'. | ||
|- | |- | ||
| "m.muster@muster.de" Like "*??@??*.??*" | | | ||
"m.muster@muster.de" Like "*??@??*.??*" | |||
| Wahr | | Wahr | ||
| Zeichenkette enthält mindestens zwei beliebige Zeichen vor sowie mindestens zwei beliebige Zeichen nach dem '@', woraufhin ein Punkt mit wiederum mindestens zwei beliebigen Zeichen folgt. | | Zeichenkette enthält mindestens zwei beliebige Zeichen vor sowie mindestens zwei beliebige Zeichen nach dem '@', woraufhin ein Punkt mit wiederum mindestens zwei beliebigen Zeichen folgt. | ||
|- | |- | ||
| "Maier & Söhne" Like "*[&]*" | | | ||
"Maier & Söhne" Like "*[&]*" | |||
| Wahr | | Wahr | ||
| Zeichenkette enthält mindestens ein '&'. | | Zeichenkette enthält mindestens ein '&'. | ||
|- | |- | ||
| "Maier & Söhne" Like "*[!&]*" | | | ||
"Maier & Söhne" Like "*[!&]*" | |||
| Wahr | | Wahr | ||
| Zeichenkette enthält mindestens ein Zeichen, das kein '&' ist. | | Zeichenkette enthält mindestens ein Zeichen, das kein '&' ist. | ||
|- | |- | ||
| "+49 123 456789" Like "+49 ###*" | | | ||
"+49 123 456789" Like "+49 ###*" | |||
| Wahr | | Wahr | ||
| Telefonnummer beginnt mit '+49', einem Leerzeichen und mindestens drei Ziffern. Hierbei wird jedoch nicht geprüft, ob die weiteren Zeichen ebenfalls Ziffern sind. | | Telefonnummer beginnt mit '+49', einem Leerzeichen und mindestens drei Ziffern. Hierbei wird jedoch nicht geprüft, ob die weiteren Zeichen ebenfalls Ziffern sind. | ||
|- | |- | ||
| "+49 132 4658" Like "*[0-9 /()+-]*" | | | ||
"+49 132 4658" Like "*[0-9 /()+-]*" | |||
| True | | True | ||
| Prüft, ob eines dieser Zeichen enthalten ist. In diesem Falle jedoch nicht aussagekräftig, denn hier wäre wichtig zu wissen, ob ein fremdes Zeichen enthalten ist ... | | Prüft, ob eines dieser Zeichen enthalten ist. In diesem Falle jedoch nicht aussagekräftig, denn hier wäre wichtig zu wissen, ob ein fremdes Zeichen enthalten ist ... | ||
|- | |- | ||
| "+49 132 4658" Like "*[!0-9 /()+-]*" | | | ||
"+49 132 4658" Like "*[!0-9 /()+-]*" | |||
| False | | False | ||
| Enthält die Zeichenkette mindestens ein Zeichen, das nicht aus der angegebenen Gruppe stammt? | | Enthält die Zeichenkette mindestens ein Zeichen, das nicht aus der angegebenen Gruppe stammt? | ||
|- | |- | ||
| "+49 a123 456" Like "*[!0-9 /()+-]*" | | | ||
"+49 a123 456" Like "*[!0-9 /()+-]*" | |||
| True | | True | ||
| Enthält die Zeichenkette mindestens ein Zeichen, das nicht aus der angegebenen Gruppe stammt? (Beachten Sie das 'a' vor '123') | | Enthält die Zeichenkette mindestens ein Zeichen, das nicht aus der angegebenen Gruppe stammt? (Beachten Sie das 'a' vor '123') | ||
|- | |- | ||
| "üä" Like "[!&]*" | | | ||
"üä" Like "[!&]*" | |||
| False | | False | ||
| Beginnt der Text nicht mit einem '&'? | | Beginnt der Text nicht mit einem '&'? | ||
|} | |} | ||
=== Objektreferenzvergleich (Is) === | |||
Mit dem Is-Operator können Sie prüfen, ob zwei Objektreferenzen auf das gleiche Objekt verweisen. Hierbei wird nicht geprüft, ob sich die beiden Objekte entsprechen: | |||
<span style="Color:blue"> Dim </span>fnt<span style="Color:gray">01</span><span style="Color:blue"> As </span>Font<span style="Color:gray">,</span> fnt<span style="Color:gray">02</span><span style="Color:blue"> As </span>Font | |||
<span style="Color:blue"> Set </span>fnt<span style="Color:gray">01</span> <span style="Color:gray">=</span> ActiveDocument<span style="Color:gray">.</span>Words<span style="Color:gray">(1).</span>Font | |||
<span style="Color:blue"> Set </span>fnt<span style="Color:gray">02</span> <span style="Color:gray">=</span> ActiveDocument<span style="Color:gray">.</span>Words<span style="Color:gray">(2).</span>Font | |||
Debug<span style="Color:gray">.</span>Print fnt<span style="Color:gray">01</span><span style="Color:blue"> Is </span>fnt<span style="Color:gray">02</span> <span style="Color:green">' False</span> | |||
=== | Die ersten beiden Wörter im Dokument sind identisch formatiert, trotzdem ergibt der Vergleich mit 'Is' False. | ||
<span style="Color:blue"> Set </span>fnt<span style="Color:gray">01</span> <span style="Color:gray">=</span> ActiveDocument<span style="Color:gray">.</span>Words<span style="Color:gray">(1).</span>Font | |||
<span style="Color:blue"> Set </span>fnt<span style="Color:gray">02</span> <span style="Color:gray">=</span> ActiveDocument<span style="Color:gray">.</span>Words<span style="Color:gray">(1).</span>Font | |||
Debug<span style="Color:gray">.</span>Print fnt<span style="Color:gray">01</span><span style="Color:blue"> Is </span>fnt<span style="Color:gray">02</span> <span style="Color:green">' False</span> | |||
Hier wird zwar auf das selbe Objekt verwiesen, trotzdem ergibt der Vergleich mit 'Is' False. | |||
<span style="Color:blue"> Set </span>fnt<span style="Color:gray">01</span> <span style="Color:gray">=</span> ActiveDocument<span style="Color:gray">.</span>Words<span style="Color:gray">(1).</span>Font | |||
<span style="Color:blue"> Set </span>fnt<span style="Color:gray">02</span> <span style="Color:gray">=</span> fnt<span style="Color:gray">01</span> | |||
Debug<span style="Color:gray">.</span>Print fnt<span style="Color:gray">01</span><span style="Color:blue"> Is </span>fnt<span style="Color:gray">02</span> <span style="Color:green">' True</span> | |||
Nun wird beim Vergleich True zurückgegeben. | |||
=== Vergleich umkehren (Not) === | === Vergleich umkehren (Not) === | ||
Sie können, wenn nötig, einen Vergleich umkehren, indem Sie ihm das Schlüsselwort 'Not' voranstellen: <span style="Color:blue"> If Not </span>strEmail<span style="Color:blue"> Like </span><span style="Color:gray">"*@*.[a-z][a-z]*"</span><span style="Color:blue"> Then</span> <span style="Color:blue"> Exit Function</span> <span style="Color:blue"> End If</span> Hier wird geprüft, ob der Text der angegebenen Struktur entspricht. Wenn dies nicht der Fall ist, wird die Funktion verlassen. So kann in einer Funktion, welche prüfen soll, ob die eingegebene E-Mail-Adresse dem erwarteten Format entspricht, so aufgebaut werden, dass die Nicht-Erfüllung einer Bedingung zum Abbruch jedes weiteren Tests führt. Werden alle Tests bestanden, gibt die Funktion den Wert 'True' zurück. Eine alternative Formulierung wäre: <span style="Color:blue"> If </span>strEmail<span style="Color:blue"> Like </span><span style="Color:gray">"*@*.[a-z][a-z]*"</span><span style="Color:blue"> Then</span> <span style="Color:blue"> Else</span> <span style="Color:blue"> Exit Function</span> <span style="Color:blue"> End If</span> Folgende Formulierungen entsprechen sich ebenfalls: <span style="Color:blue"> If </span>lngTest <span style="Color:gray"><></span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> <span style="Color:green">'...</span> <span style="Color:blue"> End If</span> <span style="Color:blue"> If Not </span>lngTest <span style="Color:gray">=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> <span style="Color:green">'...</span> <span style="Color:blue"> End If</span> <span style="Color:blue"> If </span>lngTest <span style="Color:gray">=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> <span style="Color:blue"> Else </span> <span style="Color:green">'...</span> <span style="Color:blue"> End If</span> | Sie können, wenn nötig, einen Vergleich umkehren, indem Sie ihm das Schlüsselwort 'Not' voranstellen: | ||
<span style="Color:blue"> If Not </span>strEmail<span style="Color:blue"> Like </span><span style="Color:gray">"*@*.[a-z][a-z]*"</span><span style="Color:blue"> Then</span> | |||
<span style="Color:blue"> Exit Function</span> | |||
<span style="Color:blue"> End If</span> | |||
Hier wird geprüft, ob der Text der angegebenen Struktur entspricht. Wenn dies nicht der Fall ist, wird die Funktion verlassen. | |||
So kann in einer Funktion, welche prüfen soll, ob die eingegebene E-Mail-Adresse dem erwarteten Format entspricht, so aufgebaut werden, dass die Nicht-Erfüllung einer Bedingung zum Abbruch jedes weiteren Tests führt. Werden alle Tests bestanden, gibt die Funktion den Wert 'True' zurück. | |||
Eine alternative Formulierung wäre: | |||
<span style="Color:blue"> If </span>strEmail<span style="Color:blue"> Like </span><span style="Color:gray">"*@*.[a-z][a-z]*"</span><span style="Color:blue"> Then</span> | |||
<span style="Color:blue"> Else</span> | |||
<span style="Color:blue"> Exit Function</span> | |||
<span style="Color:blue"> End If</span> | |||
Folgende Formulierungen entsprechen sich ebenfalls: | |||
<span style="Color:blue"> If </span>lngTest <span style="Color:gray"><></span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> | |||
<span style="Color:green">'...</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:blue"> If Not </span>lngTest <span style="Color:gray">=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> | |||
<span style="Color:green">'...</span> | |||
<span style="Color:blue"> End If</span> | |||
<span style="Color:blue"> If </span>lngTest <span style="Color:gray">=</span> <span style="Color:gray">3</span><span style="Color:blue"> Then</span> | |||
<span style="Color:blue"> Else </span> | |||
<span style="Color:green">'...</span> | |||
<span style="Color:blue"> End If</span> | |||
== Option Compare == | == Option Compare == | ||
Zeile 229: | Zeile 636: | ||
Ist die Standardeinstellung in VBA und bewirkt das oben beschriebene Verhalten bei Textvergleichen: | Ist die Standardeinstellung in VBA und bewirkt das oben beschriebene Verhalten bei Textvergleichen: | ||
* A < B < Z < a < b < z < Ä < Ü < Ø < ä < ö < ø usw. Der Vergleich erfolgt also immer unter Berücksichtigung der Groß- / Kleinschreibung und sämtliche Umlaute und Sonderzeichen werden hinter der Gruppe von Kleinbuchstaben angesiedelt. | |||
* A < B < Z < a < b < z < Ä < Ü < Ø < ä < ö < ø usw. | |||
Der Vergleich erfolgt also immer unter Berücksichtigung der Groß- / Kleinschreibung und sämtliche Umlaute und Sonderzeichen werden hinter der Gruppe von Kleinbuchstaben angesiedelt. | |||
=== Option Compare Text === | === Option Compare Text === | ||
[[Datei:Option_Compare_Text.png|border|500px]] Mit dieser Anweisung verwendet VBA das Gebietsschema Ihres Computers, um den Vergleich von Texten durchzuführen: * (A=a) < (À=à) < (Ä=ä) < (B=b) < (Z=z) < (Ø=ø) Die Groß- und Kleinschreibung wird hierbei nicht beachtet, Umlaute werden (im deutschen Gebietsschema!) den Grundbuchstaben zugeordnet. '''Bitte beachten:''' Abhängig vom eingestellten Gebietsschema kann der Vergleich sehr unterschiedlich ausfallen. In Finnland wird z. B. das 'Ü' dem 'Y' gleichgesetzt und somit nicht dem 'U' zugeordnet. '''Bitte beachten:''' Die Anweisung 'Option Compare Text' müsste, wenn Sie immer beim Textvergleich mit dieser Einstellung arbeiten möchten, in jedem betroffenen Modul explizit angegeben werden. Besser ist es, eine eigene Klasse für Textvergleiche zu erstellen und in dieser mit der 'Option Compare Text' zu arbeiten. '''Tipp:''' Sie können das Verhalten der Gebietsschema-abhängigen Textvergleiche prüfen, indem Sie in Ihren Windows-Systemeinstellungen unter 'Region' den Eintrag 'Format' ändern. | | ||
[[Datei:Option_Compare_Text.png|border|500px]] | |||
Mit dieser Anweisung verwendet VBA das Gebietsschema Ihres Computers, um den Vergleich von Texten durchzuführen: | |||
* (A=a) < (À=à) < (Ä=ä) < (B=b) < (Z=z) < (Ø=ø) | |||
Die Groß- und Kleinschreibung wird hierbei nicht beachtet, Umlaute werden (im deutschen Gebietsschema!) den Grundbuchstaben zugeordnet. | |||
'''Bitte beachten:''' Abhängig vom eingestellten Gebietsschema kann der Vergleich sehr unterschiedlich ausfallen. In Finnland wird z. B. das 'Ü' dem 'Y' gleichgesetzt und somit nicht dem 'U' zugeordnet. | |||
'''Bitte beachten:''' Die Anweisung 'Option Compare Text' müsste, wenn Sie immer beim Textvergleich mit dieser Einstellung arbeiten möchten, in jedem betroffenen Modul explizit angegeben werden. Besser ist es, eine eigene Klasse für Textvergleiche zu erstellen und in dieser mit der 'Option Compare Text' zu arbeiten. | |||
'''Tipp:''' Sie können das Verhalten der Gebietsschema-abhängigen Textvergleiche prüfen, indem Sie in Ihren Windows-Systemeinstellungen unter 'Region' den Eintrag 'Format' ändern. |
Aktuelle Version vom 28. Januar 2023, 00:34 Uhr
If-Abfrage
Eine If-Abfrage prüft, ob der in der Abfrage eingeschlossene Anweisungsblock ausgeführt werden soll.
Der Anweisungsblock beginnt nach dem 'Then' (bzw. nach dem 'Else') und endet bei 'End If' (bzw. vor dem 'Else' oder einem 'ElseIf'). In der Regel wird der Anweisungsblock durch Einzüge verdeutlicht.
Einfache If-Abfrage
Eine If-Abfrage können wir uns wie eine Weiche vorstellen, welche die Ausführung des Codes nach Prüfung der Bedingung auf einen Umweg schickt:
/[ja]: Führe dies durch \ ... Anweisungen <Ist Bedingung erfüllt?>| > Weitere Anweisungen ... \[nein]-----------------/
Sie wird in VBA wie folgt formuliert:
' Programmschritte If Bedingung = Erfüllt Then ' Anweisungsblock: Wenn erfüllt, wird dies ausgeführt End If ' Weitere Programmschritte
Beispiel:
Private Function EnterNumber() Dim lngNumber As Long lngNumber = InputBox("Bitte geben Sie eine Zahl ein:") If lngNumber = 3 Then MsgBox "Eingegebene Zahl ist 3" End If EnterNumber = lngNumber ' Anweisungen nach dem If-Block werden unabhängig von der If-Abfrage ausgeführt End Function
Else-Zweig
Der Else-Zweig einer If-Abfrage dient dazu, die Fälle zu behandeln, welche die ursprüngliche(n) Bedingung(en) nicht erfüllen. Wenn wir uns die einfache If-Abfrage wie eine Weiche vorstellen, dann lässt der Else-Zweig die Ausführung auf beiden getrennten Gleisen zu:
/[ja]: Führe dies durch \ ... Anweisungen <Ist Bedingung erfüllt?>| > Weitere Anweisungen ... \[nein]: Führe das durch /
Bitte beachten: Der Else-Zweig erscheint immer an letzter Stelle, also vor dem 'End If'. Sie können also nicht nach dem 'Else'-Zweig einen weiteren 'ElseIf' angeben. Siehe auch verschachtelte If-Abfragen.
' Anweisungen If Bedingung = Erfüllt Then ' Anweisungsblock: Wenn erfüllt, wird dies ausgeführt Else ' Anweisungsblock: Wenn nicht erfüllt, wird dies ausgeführt End If ' Weitere Anweisungen
Beispiel:
Private Function EnterNumber() Dim lngNumber As Long lngNumber = InputBox("Bitte geben Sie eine Zahl ein:") If lngNumber = 3 Then MsgBox "Zahl ist 3" Else MsgBox "Zahl ist ungleich 3" End If EnterNumber = lngNumber End Function
Langschreibweise:
If intVariable < 5 Then ' Übergeordnete Abfrage End If If intVariable >= 5 Then ' Frage nach dem Gegenteil End If
ElseIf-Zweig
Die in der übergeordneten Abfrage nicht erfüllten Fälle können wir mit 'ElseIf' weiter eingrenzen:
Private Sub ElseIf() Dim intAge As Integer intAge = 100 Debug.Print "Age: " & intAge If intAge < 1 Then Debug.Print "Newborn" ElseIf intAge <= 3 Then Debug.Print "Toddler" ElseIf intAge <= 12 Then Debug.Print "Child" ElseIf intAge < 20 Then Debug.Print "Teenager" ElseIf intAge < 30 Then Debug.Print "Twen" ElseIf intAge < 50 Then Debug.Print "Adult" ElseIf intAge < 70 Then Debug.Print "Youngtimer" ElseIf intAge < 100 Then Debug.Print "Oldtimer" Else Debug.Print "Centennial" End If End Sub
Verschachtelte If-Abfragen
Sie können If-Abfragen, wenn es die Logik erfordert oder wenn es der Lesbarkeit dient, ineinander verschachteln:
If True Then If MoreTrue Then ' ... ElseIf EvenMoreTrue Then ' ... Else ' ... End If ' ... Else ' ... If OtherTrue Then ' ... End If ' ... End If
'And' und 'Or'
Sub IfAndOr() Dim intVariable As Integer intVariable = 7 ' Oder-Verknüpfung: Mindestens ein Fall tritt ein Debug.Print "Zahl: " & intVariable If intVariable < 5 Then Debug.Print "Zahl ist kleiner 5 oder größer als 10" ElseIf intVariable > 10 Then Debug.Print "Zahl ist kleiner 5 oder größer als 10" End If If intVariable < 5 Or intVariable > 10 Then ' Bei Or muss mindestens ein Fall eintreten Debug.Print "Zahl ist kleiner 5 oder größer als 10" End If ' Und-Verknüpfung: Beide Bedingungen müssen erfüllt sein If intVariable >= 5 Then If intVariable <= 10 Then Debug.Print "Zahl ist zwischen 5 und 10" End If End If If intVariable >= 5 And intVariable <= 10 Then ' Bei And müssen beide Fälle eintreten Debug.Print "Zahl ist zwischen 5 und 10" End If End Sub
Klammersetzung in If-Abfragen
Bei If-Abfragen können mit 'And' bzw. 'Or' zusammengefasste Auswertungen mithilfe von Klammern logisch zusammengefasst werden. In diesem Beispiel besteht die zweite Bedingung (in Klammern) aus zwei optionalen Werten (durch 'Or' verknüpft), insgesamt muss jedoch auch die erste Bedingung erfüllt sein. Ohne Klammern setzt die letzte Bedingung nicht voraus, dass auch die erste erfüllt ist.
If strInput01 = "Begrüßung" And (strInput02 = "Hallo" Or strInput02 = "Huhu") Then ' ... End If
Kurzschreibweise
Der Anweisungsblock einer If-Abfrage kann, sofern dieser nur aus einer einzigen Befehlszeile besteht, direkt hinter dem 'Then' angegeben werden. Das 'End If' entfällt dann:
If True Then Exit Sub
Bei einem ElseIf-Zweig kann dies ebenso eingesetzt werden. Beachten Sie dann jedoch, dass hier das 'End If' erforderlich ist!
If True Then Exit Sub ElseIf MoreTrue Then Exit Sub End If
Bei einem Else-Zweig fügt der VBA-Editor automatisch einen Doppelpunkt ein. Auch in diesem Fall wird wieder das 'End If' erfordert:
If True Then
Exit Sub
Else: Exit Sub
End If
Bitte beachten: Diese Schreibweise wird nur dann akzeptiert, wenn die erste Zeile nicht die Kurzschreibweise verwendet!
Bitte beachten: Wenn Sie sich für die Kurzschreibweise entschieden haben, dürfen Sie keine weitere Anweisungen im Anweisungsblock angeben!
Fazit: Die einfache Kurzschreibweise (erstes Beispiel) kann gerne eingesetzt werden, um den Code kurz, knapp und übersichtlich zu gestalten. Je weiter wir diese ausbauen und mit weiteren Elementen (ElseIf, Else) verknüpfen, desto mehr verliert die Kurzschreibweise jedoch diese Vorteile und wirkt im Gegendsatz eher verwirrend.
Select Case
Am Beispiel des Else-If Zweiges erkennen wir, dass diese Form der Verzweigung sehr unübersichtlich erscheinen kann. Hier kann eine 'Select Case'-Verzweigung deutlich aufgeräumter und übersichtlicher erscheinen:
Private Sub SelectCase() Dim intAge As Integer intAge = 100 Debug.Print "Age: " & intAge Select Case intAge Case 0 Debug.Print "Unborn" Case Is < 1 Debug.Print "Newborn" Case Is <= 3 Debug.Print "Toddler" Case Is <= 12 Debug.Print "Child" Case Is < 20 Debug.Print "Teenager" Case Is < 30 Debug.Print "Twen" Case Is < 50 Debug.Print "Adult" Case Is < 70 Debug.Print "Youngtimer" Case Is < 100 Debug.Print "Oldtimer" Case Else Debug.Print "Centennial" End Select End Sub
Wie Sie sehen, stehen nun die abgefragten Werte in einer erkennbaren Spalte untereinander, das Auge findet sich gleich in der Struktur zurecht.
Regeln
Die 'Select Case'-Verzweigung hat einen eigenen Satz Regeln, welche Sie beachten müssen:
- Sie können immer nur eine Variable (einen Rückgabewert einer Funktion, einen vorgegebenen Wert) prüfen
- Die Vergleichswerte geben Sie in einer neuen Zeile hinter 'Case' an
- Zusätzliche Einschränkungen ('<', '<=', '<>') werden automatisch um ein 'Is' ergänzt ('Case Is < 70')
- Der Else-Zweig lautet 'Case Else'
Sie können mehrere Werte in einem Zweig abfragen, indem Sie die Werte durch Kommata voneinander trennen:
Case 0, 2, 5, Is > 10
Einschränkungen
Im folgenden Fall können die If-Abfragen NICHT durch ein Select ersetzt werden, denn jede If-Abfrage fragt einen anderen Wert ab:
Sub SelectCaseLimitations() Dim dteDate As Date If Year(Now()) = 2015 Then ElseIf Year(dteDate) < 2017 Then ElseIf Month(dteDate) > 3 Then End If End Sub
Beispiele
Sub MessageBoxResult() ' Beispiel: Auswertung des Rückgabewertes einer Messsagebox Select Case MsgBox("Select this", vbYesNoCancel) Case 6 MsgBox "Ja!" Case 7 MsgBox "Nö..." Case 2 MsgBox "Abbruch!!!" Case Else MsgBox "Nicht definiert?!?" End Select End Sub
Sub SelectString() Select Case InputBox("Bitte geben Sie Ihren Namen an") Case "Patrick Wania" MsgBox "Hallo" Case "Erich Stroheim" MsgBox "Huhu" Case Else MsgBox "Wer sind Sie?!?" End Select End Sub
Vergleichsoperatoren
Um prüfen zu können, ob eine Bedingung erfüllt ist, können folgende Möglichkeiten genutzt werden:
Entspricht genau (=)
Dieser Operator vergleicht zwei Werte miteinander und wird nur genau in dem einen Fall den Vergleich positiv bewerten, wenn beide Werte sich 100 % entsprechen. Eine Umwandlung der Datentypen, falls diese nicht gleich sind, erfolgt dabei automatisch.
Debug.Print 1 = 1 ' Wahr Debug.Print 1 = "1" ' Wahr Debug.Print 1 = 1.0 ' Wahr Debug.Print 1.1 = 1 ' Falsch Debug.Print "a" = "A" ' Falsch
Da der Vergleich von Zeichenketten die Groß- und Kleinschreibung berücksichtigt, können wir mit den Funktionen UCase()
bzw. LCase()
diesen Unterschied ausgleichen:
Debug.Print "a" = LCase("A") ' Wahr
Beim Vergleich von zwei Textvariablen sollten Sie beide Werte gleich umwandeln:
Dim strValue01 As String, strValue02 As String strValue01 = "max" strValue02 = "Max" Debug.Print strValue01 = strValue02 ' Falsch Debug.Print LCase(strValue01) = LCase(strValue02) ' Wahr
Ungleich (<>)
Mit dem Ungleich-Operator wird geprüft, ob sich zwei Werte unterscheiden. Hierbei wird nicht berücksichtigt, auf welche Art sich die Werte unterscheiden.
Debug.Print 1 <> 1 ' Falsch Debug.Print 1 <> "1" ' Falsch Debug.Print 1 <> 1.0 ' Falsch Debug.Print 1.1 <> 1 ' Wahr Debug.Print "a" <> "A" ' Wahr
Beim Vergleich von Zeichenketten beachten Sie bitte die oben beschriebenen Anmerkungen zur Umwandlung für einen Vergleich, welcher die Groß- und Kleinschreibung nicht berücksichtigt:
Debug.Print "a" <> LCase("A") ' Falsch
Dim strValue01 As String, strValue02 As String strValue01 = "max" strValue02 = "Max" Debug.Print strValue01 = strValue02 ' Wahr Debug.Print LCase(strValue01) = LCase(strValue02) ' Falsch
Größenvergleiche (<, <=, >, >=)
Der Größenvergleich von Zahlen sollte keiner Erklärung bedürfen:
Debug.Print 1 < 2 ' Wahr Debug.Print 1 <= 2 ' Wahr Debug.Print 1 < 1 ' Falsch Debug.Print 1 <= 1 ' Wahr usw.
Der Größenvergleich von Zeichenketten bewirkt, dass die Zeichenpositionen der einzelnen Buchstaben in der Zeichentabelle betrachtet werden. In der Zeichentabelle beginnen die Großbuchstaben mit dem 'A' an der Position 65, die Kleinbuchstaben mit dem 'a' bei 97. Umlaute und weitere Sonderzeichen erscheinen weiter hinten in der Zeichentabelle.
Debug.Print "Max" < "max" ' Wahr Debug.Print "berta" <= "Emil" ' Falsch Debug.Print "Max" < "Max" ' Falsch Debug.Print "Max" <= "Max" ' Wahr usw.
Auch bei diesen Vergleichen bietet es sich in bestimmten Fällen an, mit der oben beschriebenen Umwandlungen zu arbeiten, wenn Sie den Vergleich von Texten ohne Berücksichtigung der Groß- und Kleinschreibung durchführen möchten:
Debug.Print LCase("Max") < LCase("max") ' entspricht "max" < "max" (Falsch) Debug.Print LCase("berta") <= LCase("Emil") ' entspricht "berta" <= "emil" (Wahr) Debug.Print LCase("Max") <= LCase("max") ' entspricht "max" <= "max" (Wahr) usw.
Mustervergleich (Like)
Der Like-Operator ermöglicht die Überprüfung, ob eine Zeichenkette einem erwarteten Muster entspricht.
Hierbei gelten folgende Regeln:
Gruppe | Zeichen | Regel | Beispiel |
---|---|---|---|
Generell | Texte können direkt verglichen werden, 'Like' verhält sich dann wie '=' |
strText = "Test" If strText Like "Test" Then MsgBox "Juhuu!" End If ' oder: If strText = "Test" Then MsgBox "Juhuu!" End If | |
" | Wenn Sie ein Anführungszeichen in einen Mustervergleich mit einbeziehen möchten, muss dieses verdoppelt werden ( "" ). |
"Dann ertönte ""Bitte wenden!""" Like "*""*" ' Enthält der Text ein Anführungszeichen? | |
Unspezifische Platzhalter | ? | Das Fragezeichen ersetzt ein einzelnes beliebiges Zeichen (a, 4, §, ~, Ü, ...) |
"Test" Like "T???" |
* | Der Stern ersetzt kein oder eine beliebige Anzahl beliebiger Zeichen. |
"Beispiel" Like "*spiel*" | |
# | Das Doppelkreuz ersetzt eine einzelne Ziffer (0-9) |
"+49 123 456789" Like "+49 ##*" | |
Spezifische Platzhalter | [ ] | In eckigen Klammern kann ein Zeichenbereich oder eine Zeichengruppen angegeben werden, mit der verglichen werden soll. |
"Übung" Like "[A-ZÄÖÜ]*" |
- | Mit dem Minus kann in eckigen Klammern ein Zeichenbereich angegeben werden, wie 'A-Z', '0-9' etc. |
"Übung" Like "[A-ZÄÖÜ]*" | |
! | Wenn Sie dem / den gesuchten Zeichen in eckigen Klammern ein Ausrufezeichen voranstellen, wird nach allen Zeichen außer den angegebenen gesucht. |
"Übung" Like "*[!&]*" | |
[ | Wenn Sie eine geöffnete eckige Klammer in Ihrem Muster verwenden, können Sie diese wie jedes andere Zeichen angeben: |
"[Muster]" Like "[*" ' Beginnt der Text mit '['? "[Muster]" Like "[M[]*" ' Beginnt der Text mit 'M' oder '['? "[Muster]" Like "[[M]*" ' Beginnt der Text mit '[' oder 'M'? Die zweite '[' wird als Bestandteil des Zeichenbereichs innerhalb der eckigen Klammern betrachtet. | |
] | Die geschlossene eckige Klammer kann gar nicht in einem spezifischen Platzhalter eingesetzt werden, denn sie würde die eckige Klammer vorzeitig schließen. Daher muss sie immer getrennt (als einzelner Buchstabe) gesucht werden. |
"[Muster]" Like "*]" ' Endet der Text auf ']'?|- | |
- | Wenn Sie das Minuszeichen in einem spezifischen Platzhalter einbeziehen möchten, muss es an letzter Stelle angegeben werden, damit kein Paar um das Minus herum gebildet werden kann ('[§-/]' würde bedeuten: die Zeichen zwischen '§' und '/'). |
"+49 132 4658" Like "*[0-9 /()+-]*" | |
! | Wenn Sie ein Ausrufezeichen in einem spezifischen Platzhalter einbeziehen möchten, darf es nicht an erster Stelle angegeben werden (es sei denn, Sie möchten sicher stellen, dass kein '!' enthalten ist, wie im zweiten Beispiel). |
"Hallo!" Like "*[.,;:!?-]" ' Endet der Text auf ein Satzzeichen? "Ja?" Like "*[!.,;:!?-]*" ' Enthält der Text mindestens ein Zeichen, das kein Satzzechen ist? |
Beispiel | Ergebnis | Beschreibung |
---|---|---|
"Test" Like "Test" |
Wahr | Beide Texte stimmen genau überein. |
"Test" Like "test" |
Falsch | Groß- und Kleinschreibung muss übereinstimmen. |
"Test" Like "[Tt]est" |
Wahr | Das erste Zeichen (eingefasst in '[]') ist ein großes 'T' oder ein kleines 't' und wird von der Zeichenkette 'est' gefolgt. |
"Beispiel" Like "*?*" |
Wahr | Die Zeichenkette enthält mindestens ein beliebiges Zeichen. Das '?' ist der Platzhalter für genau ein beliebiges Zeichen (Ziffer, Buchstabe, Satzzeichen, Sonderzeichen, ...). |
"Test" Like "T???" |
Wahr | Ein großes 'T' wird von genau drei beliebigen einzelnen Zeichen gefolgt. |
"Test" Like "T*" "T" Like "T*" |
Wahr | Ein großes 'T' wird von einer beliebigen Anzahl (inklusive keinen) Zeichen gefolgt. |
"Beispiel" Like "*spiel" |
Wahr | Die Zeichenkette endet auf 'spiel'. |
"Beispiel" Like "*spiel*" |
Wahr | Die Zeichenkette enthält 'spiel'. |
"Beispiel" Like "*[Ss]piel*" |
Wahr | Die Zeichenkette enthält 'Spiel' oder 'spiel'. |
"Beispiel" Like "[A-G]*" |
Wahr | Der erste Buchstabe stammt aus der Liste von Großbuchstaben zwischen A und G. |
"Übung" Like "[A-Z]*" |
Falsch | Der erste Buchstabe ist ein Sonderzeichen und stammt somit nicht aus der Liste von Großbuchstaben zwischen A und Z. |
"Rastatt" Like "*[Ss]ta[dt]t" |
Wahr | Die Zeichenkette lautet oder endet auf 'Stadt', 'stadt', 'Statt' oder 'statt'. |
"m.muster@muster.de" Like "*??@??*.??*" |
Wahr | Zeichenkette enthält mindestens zwei beliebige Zeichen vor sowie mindestens zwei beliebige Zeichen nach dem '@', woraufhin ein Punkt mit wiederum mindestens zwei beliebigen Zeichen folgt. |
"Maier & Söhne" Like "*[&]*" |
Wahr | Zeichenkette enthält mindestens ein '&'. |
"Maier & Söhne" Like "*[!&]*" |
Wahr | Zeichenkette enthält mindestens ein Zeichen, das kein '&' ist. |
"+49 123 456789" Like "+49 ###*" |
Wahr | Telefonnummer beginnt mit '+49', einem Leerzeichen und mindestens drei Ziffern. Hierbei wird jedoch nicht geprüft, ob die weiteren Zeichen ebenfalls Ziffern sind. |
"+49 132 4658" Like "*[0-9 /()+-]*" |
True | Prüft, ob eines dieser Zeichen enthalten ist. In diesem Falle jedoch nicht aussagekräftig, denn hier wäre wichtig zu wissen, ob ein fremdes Zeichen enthalten ist ... |
"+49 132 4658" Like "*[!0-9 /()+-]*" |
False | Enthält die Zeichenkette mindestens ein Zeichen, das nicht aus der angegebenen Gruppe stammt? |
"+49 a123 456" Like "*[!0-9 /()+-]*" |
True | Enthält die Zeichenkette mindestens ein Zeichen, das nicht aus der angegebenen Gruppe stammt? (Beachten Sie das 'a' vor '123') |
"üä" Like "[!&]*" |
False | Beginnt der Text nicht mit einem '&'? |
Objektreferenzvergleich (Is)
Mit dem Is-Operator können Sie prüfen, ob zwei Objektreferenzen auf das gleiche Objekt verweisen. Hierbei wird nicht geprüft, ob sich die beiden Objekte entsprechen:
Dim fnt01 As Font, fnt02 As Font Set fnt01 = ActiveDocument.Words(1).Font Set fnt02 = ActiveDocument.Words(2).Font Debug.Print fnt01 Is fnt02 ' False
Die ersten beiden Wörter im Dokument sind identisch formatiert, trotzdem ergibt der Vergleich mit 'Is' False.
Set fnt01 = ActiveDocument.Words(1).Font Set fnt02 = ActiveDocument.Words(1).Font Debug.Print fnt01 Is fnt02 ' False
Hier wird zwar auf das selbe Objekt verwiesen, trotzdem ergibt der Vergleich mit 'Is' False.
Set fnt01 = ActiveDocument.Words(1).Font Set fnt02 = fnt01 Debug.Print fnt01 Is fnt02 ' True
Nun wird beim Vergleich True zurückgegeben.
Vergleich umkehren (Not)
Sie können, wenn nötig, einen Vergleich umkehren, indem Sie ihm das Schlüsselwort 'Not' voranstellen:
If Not strEmail Like "*@*.[a-z][a-z]*" Then Exit Function End If
Hier wird geprüft, ob der Text der angegebenen Struktur entspricht. Wenn dies nicht der Fall ist, wird die Funktion verlassen.
So kann in einer Funktion, welche prüfen soll, ob die eingegebene E-Mail-Adresse dem erwarteten Format entspricht, so aufgebaut werden, dass die Nicht-Erfüllung einer Bedingung zum Abbruch jedes weiteren Tests führt. Werden alle Tests bestanden, gibt die Funktion den Wert 'True' zurück.
Eine alternative Formulierung wäre:
If strEmail Like "*@*.[a-z][a-z]*" Then Else Exit Function End If
Folgende Formulierungen entsprechen sich ebenfalls:
If lngTest <> 3 Then '... End If
If Not lngTest = 3 Then '... End If
If lngTest = 3 Then Else '... End If
Option Compare
Die Option Compare-Anweisung steuert das Verhalten der Vergleichsoperatoren und wird, wenn sie ausdrücklich erscheinen soll, am Anfang des betroffenen Moduls (wie 'Option Explicit') angegeben.
Option Compare Binary (standard)
Ist die Standardeinstellung in VBA und bewirkt das oben beschriebene Verhalten bei Textvergleichen:
- A < B < Z < a < b < z < Ä < Ü < Ø < ä < ö < ø usw.
Der Vergleich erfolgt also immer unter Berücksichtigung der Groß- / Kleinschreibung und sämtliche Umlaute und Sonderzeichen werden hinter der Gruppe von Kleinbuchstaben angesiedelt.
Option Compare Text
Mit dieser Anweisung verwendet VBA das Gebietsschema Ihres Computers, um den Vergleich von Texten durchzuführen:
- (A=a) < (À=à) < (Ä=ä) < (B=b) < (Z=z) < (Ø=ø)
Die Groß- und Kleinschreibung wird hierbei nicht beachtet, Umlaute werden (im deutschen Gebietsschema!) den Grundbuchstaben zugeordnet.
Bitte beachten: Abhängig vom eingestellten Gebietsschema kann der Vergleich sehr unterschiedlich ausfallen. In Finnland wird z. B. das 'Ü' dem 'Y' gleichgesetzt und somit nicht dem 'U' zugeordnet.
Bitte beachten: Die Anweisung 'Option Compare Text' müsste, wenn Sie immer beim Textvergleich mit dieser Einstellung arbeiten möchten, in jedem betroffenen Modul explizit angegeben werden. Besser ist es, eine eigene Klasse für Textvergleiche zu erstellen und in dieser mit der 'Option Compare Text' zu arbeiten.
Tipp: Sie können das Verhalten der Gebietsschema-abhängigen Textvergleiche prüfen, indem Sie in Ihren Windows-Systemeinstellungen unter 'Region' den Eintrag 'Format' ändern.