Klammersetzung: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „== Klammersetzung bei Berechnungen == Sie können bei mathematischen Berechnungen einzelne Rechenschritte mit runden Klammern gruppieren: Debug<span style="…“)
 
Keine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Category:vba-wiki]]
== Klammersetzung bei Berechnungen ==
== Klammersetzung bei Berechnungen ==


Zeile 8: Zeile 9:
== Klammersetzung bei If-Abfragen ==
== Klammersetzung bei 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)&comma; insgesamt muss jedoch auch die erste Bedingung erfüllt sein. Ohne Klammern setzt die letzte Bedingung nicht voraus&comma; dass auch die erste erfüllt ist.
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>strInput<span style="Color:gray">01</span> <span style="Color:gray">=</span> <span style="Color:gray">"Begrüßung"</span><span style="Color:blue"> And </span><span style="Color:gray">(</span>strInput<span style="Color:gray">02</span> <span style="Color:gray">=</span> <span style="Color:gray">"Hallo"</span><span style="Color:blue"> Or </span>strInput<span style="Color:gray">02</span> <span style="Color:gray">=</span> <span style="Color:gray">"Huhu")</span><span style="Color:blue"> Then</span>
  <span style="Color:blue"> If </span>strInput<span style="Color:gray">01</span> <span style="Color:gray">=</span> <span style="Color:gray">"Begrüßung"</span><span style="Color:blue"> And </span><span style="Color:gray">(</span>strInput<span style="Color:gray">02</span> <span style="Color:gray">=</span> <span style="Color:gray">"Hallo"</span><span style="Color:blue"> Or </span>strInput<span style="Color:gray">02</span> <span style="Color:gray">=</span> <span style="Color:gray">"Huhu")</span><span style="Color:blue"> Then</span>
Zeile 18: Zeile 19:
Bitte merken Sie sich zur Klammersetzung (außerhalb von Berechnungen und If-Abfragen) folgende Eselsbrücke:
Bitte merken Sie sich zur Klammersetzung (außerhalb von Berechnungen und If-Abfragen) folgende Eselsbrücke:


* Wenn links vor dem Befehl eine Zuweisung oder eine weitere Anweisung steht&comma; müssen Übergabeparameter in Klammern gesetzt werden:
* Wenn links vor dem Befehl eine Zuweisung oder eine weitere Anweisung steht, müssen Übergabeparameter in Klammern gesetzt werden:


   lngContinue <span style="Color:gray">=</span> MsgBox<span style="Color:gray">("Möchten Sie weiter machen?"</span>&comma; vbYesNo&comma; <span style="Color:gray">"Abfrage")</span>    <span style="Color:green">' Zuweisung mit '='</span>
   lngContinue <span style="Color:gray">=</span> MsgBox<span style="Color:gray">("Möchten Sie weiter machen?"</span>, vbYesNo, <span style="Color:gray">"Abfrage")</span>    <span style="Color:green">' Zuweisung mit '='</span>
   Debug<span style="Color:gray">.</span>Print MsgBox<span style="Color:gray">("Möchten Sie weiter machen?"</span>&comma; vbYesNo&comma; <span style="Color:gray">"Abfrage")</span>      <span style="Color:green">' Ergebnis wird an 'Debug.Print' übergeben</span>
   Debug<span style="Color:gray">.</span>Print MsgBox<span style="Color:gray">("Möchten Sie weiter machen?"</span>, vbYesNo, <span style="Color:gray">"Abfrage")</span>      <span style="Color:green">' Ergebnis wird an 'Debug.Print' übergeben</span>
  <span style="Color:blue"> If </span>MsgBox<span style="Color:gray">("Möchten Sie weiter machen?"</span>&comma; vbYesNo&comma; <span style="Color:gray">"Abfrage")</span> <span style="Color:gray">=</span><span style="Color:blue"> True Then Exit Sub </span>  <span style="Color:green">' Ergebnis wird in If-Abfrage weiter verwertet</span>
  <span style="Color:blue"> If </span>MsgBox<span style="Color:gray">("Möchten Sie weiter machen?"</span>, vbYesNo, <span style="Color:gray">"Abfrage")</span> <span style="Color:gray">=</span><span style="Color:blue"> True Then Exit Sub </span>  <span style="Color:green">' Ergebnis wird in If-Abfrage weiter verwertet</span>


* Wenn dem Befehl eine Zuweisung folgt&comma; werden ebenfalls Klammern verwendet:
* Wenn dem Befehl eine Zuweisung folgt, werden ebenfalls Klammern verwendet:


   Cells<span style="Color:gray">(1</span>&comma; <span style="Color:gray">5)</span> <span style="Color:gray">=</span> <span style="Color:gray">"Hallo"</span>
   Cells<span style="Color:gray">(1</span>, <span style="Color:gray">5)</span> <span style="Color:gray">=</span> <span style="Color:gray">"Hallo"</span>


* Ansonsten dürfen '''KEINE''' Klammern verwendet werden&comma; auch wenn es sich bei dem Befehl um eine Funktion handelt:
* Ansonsten dürfen '''KEINE''' Klammern verwendet werden, auch wenn es sich bei dem Befehl um eine Funktion handelt:


   MsgBox <span style="Color:gray">"Hallo!"</span>&comma; &comma; <span style="Color:gray">"Begrüßung"</span>    <span style="Color:green">' Der Befehl steht alleine in dieser Befehlszeile</span>
   MsgBox <span style="Color:gray">"Hallo!"</span>, , <span style="Color:gray">"Begrüßung"</span>    <span style="Color:green">' Der Befehl steht alleine in dieser Befehlszeile</span>


Im Einzelnen erklärt sich diese Eselsbrücke wie folgt:
Im Einzelnen erklärt sich diese Eselsbrücke wie folgt:


* Klammern werden beim Aufruf von Funktionen mit Übergabeparametern verwendet&comma; wenn der Rückgabewert der Funktion verwendet wird.
* Klammern werden beim Aufruf von Funktionen mit Übergabeparametern verwendet, wenn der Rückgabewert der Funktion verwendet wird.
** Beispiel eins: Die MsgBox-Funktion gibt den vom Anwender gewählten Knopf zurück. Bei der Anzeige der MsgBox ohne zusätzliche Knöpfe wird der Rückgabewert jedoch ignoriert. Hier dürfen also keine Klammern gesetzt werden!


   MsgBox <span style="Color:gray">"Hallo!"</span>&comma; &comma; <span style="Color:gray">"Begrüßung"</span>
  <span style="Color:green">' Beispiel eins: Die MsgBox-Funktion gibt den vom Anwender gewählten Knopf zurück. Bei der Anzeige der MsgBox ohne zusätzliche Knöpfe wird der Rückgabewert jedoch ignoriert.
  ' Hier dürfen also keine Klammern gesetzt werden!</span>
   MsgBox <span style="Color:gray">"Hallo!"</span>, , <span style="Color:gray">"Begrüßung"</span>


** Beispiel zwei: Die MsgBox-Funktion soll einen Dialog mit den Knöpfen 'Ja' und 'Nein' anzeigen. Die Wahl des Benutzers wird in einer Variablen gespeichert.
  <span style="Color:green">' Beispiel zwei: Die MsgBox-Funktion soll einen Dialog mit den Knöpfen 'Ja' und 'Nein' anzeigen. Die Wahl des Benutzers wird in einer Variablen gespeichert.</span>
 
   lngContinue <span style="Color:gray">=</span> MsgBox<span style="Color:gray">("Möchten Sie weiter machen?"</span>&comma; vbYesNo&comma; <span style="Color:gray">"Abfrage")</span>
   lngContinue <span style="Color:gray">=</span> MsgBox<span style="Color:gray">("Möchten Sie weiter machen?"</span>, vbYesNo, <span style="Color:gray">"Abfrage")</span>


* Beim Aufruf von Sub-Prozeduren werden '''KEINE''' Klammern verwendet!
* Beim Aufruf von Sub-Prozeduren werden '''KEINE''' Klammern verwendet!
Zeile 49: Zeile 52:
* Zur näheren Bestimmung von Objekten werden ebenfalls immer die Klammern verwendet.
* Zur näheren Bestimmung von Objekten werden ebenfalls immer die Klammern verwendet.


   Cells<span style="Color:gray">(1</span>&comma;<span style="Color:gray">5).</span>Select
   Cells<span style="Color:gray">(1</span>,<span style="Color:gray">5).</span>Select


* Klammern werden ebenfalls im Kopf einer Prozedur verwendet&comma; um die Übergabeparameter anzugeben.
* Klammern werden ebenfalls im Kopf einer Prozedur verwendet, um die Übergabeparameter anzugeben.
** Wenn keine Übergabeparameter erwartet werden&comma; wird ein leeres Klammernpaar verwendet.
** Wenn keine Übergabeparameter erwartet werden, wird ein leeres Klammernpaar verwendet.


  <span style="Color:blue"> Private Sub </span>MyProcedure<span style="Color:gray">()</span>
  <span style="Color:blue"> Private Sub </span>MyProcedure<span style="Color:gray">()</span>
       <span style="Color:green">' ...</span>
       <span style="Color:green">' ...</span>
  <span style="Color:blue"> End Sub</span>
  <span style="Color:blue"> End Sub</span>
 
  <span style="Color:blue"> Private Sub </span>DoSomething<span style="Color:gray">(</span><span style="Color:blue">ByVal </span>strWithThis<span style="Color:blue"> As String</span><span style="Color:gray">)</span>
  <span style="Color:blue"> Private Sub </span>DoSomething<span style="Color:gray">(</span><span style="Color:blue">ByVal </span>strWithThis<span style="Color:blue"> As String</span><span style="Color:gray">)</span>
       <span style="Color:green">' ...</span>
       <span style="Color:green">' ...</span>
  <span style="Color:blue"> End Sub</span>
  <span style="Color:blue"> End Sub</span>

Aktuelle Version vom 28. Januar 2023, 00:35 Uhr

Klammersetzung bei Berechnungen

Sie können bei mathematischen Berechnungen einzelne Rechenschritte mit runden Klammern gruppieren:

Debug.Print 2 * (3 + 4)             ' Ergebnis: 14
Debug.Print 8 ^ (1 / 3)             ' Ergebnis: Die dritte Wurzel von 8 ist 2

Klammersetzung bei 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

Klammersetzung beim Aufruf von Prozeduren

Bitte merken Sie sich zur Klammersetzung (außerhalb von Berechnungen und If-Abfragen) folgende Eselsbrücke:

  • Wenn links vor dem Befehl eine Zuweisung oder eine weitere Anweisung steht, müssen Übergabeparameter in Klammern gesetzt werden:
 lngContinue = MsgBox("Möchten Sie weiter machen?", vbYesNo, "Abfrage")    ' Zuweisung mit '='
 Debug.Print MsgBox("Möchten Sie weiter machen?", vbYesNo, "Abfrage")      ' Ergebnis wird an 'Debug.Print' übergeben
 If MsgBox("Möchten Sie weiter machen?", vbYesNo, "Abfrage") = True Then Exit Sub   ' Ergebnis wird in If-Abfrage weiter verwertet
  • Wenn dem Befehl eine Zuweisung folgt, werden ebenfalls Klammern verwendet:
 Cells(1, 5) = "Hallo"
  • Ansonsten dürfen KEINE Klammern verwendet werden, auch wenn es sich bei dem Befehl um eine Funktion handelt:
 MsgBox "Hallo!", , "Begrüßung"     ' Der Befehl steht alleine in dieser Befehlszeile

Im Einzelnen erklärt sich diese Eselsbrücke wie folgt:

  • Klammern werden beim Aufruf von Funktionen mit Übergabeparametern verwendet, wenn der Rückgabewert der Funktion verwendet wird.
 ' Beispiel eins: Die MsgBox-Funktion gibt den vom Anwender gewählten Knopf zurück. Bei der Anzeige der MsgBox ohne zusätzliche Knöpfe wird der Rückgabewert jedoch ignoriert.
 ' Hier dürfen also keine Klammern gesetzt werden! 

 MsgBox "Hallo!", , "Begrüßung"
 ' Beispiel zwei: Die MsgBox-Funktion soll einen Dialog mit den Knöpfen 'Ja' und 'Nein' anzeigen. Die Wahl des Benutzers wird in einer Variablen gespeichert.

 lngContinue = MsgBox("Möchten Sie weiter machen?", vbYesNo, "Abfrage")
  • Beim Aufruf von Sub-Prozeduren werden KEINE Klammern verwendet!
 DoSomething "With this"
  • Zur näheren Bestimmung von Objekten werden ebenfalls immer die Klammern verwendet.
 Cells(1,5).Select
  • Klammern werden ebenfalls im Kopf einer Prozedur verwendet, um die Übergabeparameter anzugeben.
    • Wenn keine Übergabeparameter erwartet werden, wird ein leeres Klammernpaar verwendet.
 Private Sub MyProcedure()
     ' ...
 End Sub
 Private Sub DoSomething(ByVal strWithThis As String)
     ' ...
 End Sub