Abfragen: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
(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 '…“)
 
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>
|-
|
|
<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>
|-
|
|
<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>
|-
|
|
<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.
|-
|
|
<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 ('[§-/]' würde bedeuten: die Zeichen zwischen '§' und '/').
| 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')
|-
|-  
| "&uuml;&auml;" Like "[!&]*"
|  
"&uuml;&auml;" 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>


=== Objektreferenzvergleich (Is) ===
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>


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.
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 ===


&nbsp; [[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.&nbsp;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.
&nbsp;
 
[[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.&nbsp;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

 

Option Compare Text.png


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.