Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

if mit mehreren Bedingungen

Begonnen von Lalikowski, Januar 22, 2022, 14:42:48

⏪ vorheriges - nächstes ⏩

Lalikowski

Hallo zusammen,

ich verzweifele an einem vermeintlich einfachen Problem.... ::)

In einem Formular möchte ich in einer if-Anweisung mehrere Bedingungen anfragen, doch genau das macht er nicht....

Hier einmal ein Beispiel:
If Me!Text_Spielwert = 9 Or 10 Or 11 Or 12 Or 24 And Me!Text_erspielte_Punkte > 31 Then
    MsgBox "gewonnen"
End If

If Me!Text_Spielwert = 9 Or 10 Or 11 Or 12 Or 24 And Me!Text_erspielte_Punkte = 0 Then
    MsgBox "selbst schwarz"
End If

was mache ich bloß falsch?

Grüße

Andreas

PhilS

Zitat von: Lalikowski am Januar 22, 2022, 14:42:48In einem Formular möchte ich in einer if-Anweisung mehrere Bedingungen anfragen, doch genau das macht er nicht....
Eine Bedingung ist ein Ausdruck, der True oder False als Ergebnis hat.

Das wird die VBA Runtime auch bei deinem Beispiel völlig korrekt verarbeiten. Allerdings anders als du vermutlich erwartest.
Wenn man mal den Teil "Or 10" als Beispiel herausgreift, wird das zu:
If 10 Then
...

Was du vermutlich schreiben wolltest ist:
If Me!Text_Spielwert = 10 Then
...
Wenn du es richtig schreibst, wird es auch wie gewünscht funktionieren.


Du könntest dir mal das Select Case Statement anschauen. Das erlaubt Konstrukte, wie in deinem Beispiel.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

DF6GL

Hallo,


If (Me!Text_Spielwert = 9 Or Me!Text_Spielwert = 10 Or Me!Text_Spielwert = 11 Or Me!Text_Spielwert = 12 Or Me!Text_Spielwert = 24) And Me!Text_erspielte_Punkte > 31 Then
oder besser mit Select Case arbeiten.

Lalikowski

Hallo Franz, hallo PhilS,

habe mir Select case kurz angeschaut, aber wie verknüpfe ich die Bedingungen damit?..

Könntet Ihr mir bitte einmal anhand einer meiner Beispiele die entsprechende Select case Anweisung schreiben?

Dann komme ich fast sicher selbst weiter.... :)

DF6GL

Hallo,

z. B. :


Select Case Me!Text_Spielwert
   Case 9 To 12, 24
       blnCase = True
   Case Else
       blnCase = False
End Select

If blnCase And Me!Text_erspielte_Punkte > 31 Then
  MsgBox "gewonnen"
End If




PhilS

Zitat von: DF6GL am Januar 22, 2022, 15:49:12Select Case Me!Text_Spielwert
   Case 9 To 12, 24
       blnCase = True
   Case Else
       blnCase = False
End Select

If blnCase And Me!Text_erspielte_Punkte > 31 Then
  MsgBox "gewonnen"
End If
Das entspricht nicht ganz der ursprünglichen Bedingung; bzw. meiner Interpretation derselben.
Näher dran wäre IMO dies:
Select Case Me!Text_Spielwert
   Case 9 To 12
       blnCase = True
   Case 24
      blnCase = CBool(Me!Text_erspielte_Punkte > 31 )
   Case Else
       blnCase = False
End Select

If blnCase Then
  MsgBox "gewonnen"
End If
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Lalikowski

Hallo Ihr beiden,

die Prozedur vom Franz funktioniert, somit auch die erste von Dir PhilS.

Die zweite funktioniert leider nicht.

Ist auch nicht so wild, mit der funktionierenden Prozedur komme ich ein ganzes Stück weiter.

Danke dafür und vielleicht auf ein Neues...;.)

happy weekend

Andreas

Lalikowski

....sorry Leute, kaum angefangen und schon das nächste Problem..... :o

Select Case Me!Text_Spielwert
   Case 9 To 12, 24
       blnCase = True
   Case Else
       blnCase = False
End Select

If blnCase And Me!Text_erspielte_Punkte > 89 Then
  Call Schneider_gespielt
End If

Bei >89 muss zwischen 31 und 89 abgefragt werden.....

PhilS

Zitat von: Lalikowski am Januar 22, 2022, 16:00:51die Prozedur vom Franz funktioniert, somit auch die erste von Dir PhilS.
Die zweite funktioniert leider nicht.
Beide Varianten funktionieren technisch gesehen! - Sie haben nur unterschiedliche Ergebnisse.
Bei der Abweichung, die ich aufgezeigt habe, ging es darum dass die logische Verknüpfung von OR und AND aus deiner ursprünglichen Codezeile, wenn sie denn funktioniert hätte, ein anderes Ergebnis hat, als Franz' Select Case Beispiel.


Zitat von: Lalikowski am Januar 22, 2022, 16:18:35Bei >89 muss zwischen 31 und 89 abgefragt werden.....
Hier ist für mich keine verständliche Fragestellung erkennbar.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Lalikowski

...sry, habe mich vielleicht nur unverständlich ausgedrückt...

Ich möchte, dass die Bedingung >89 durch zwischen 31 und 89 ersetzt wird.
Ist das überhaupt möglich?

DF6GL

Hallo,

<quote>Ist das überhaupt möglich?</quote>
ja, warum denn nicht?

Nach meiner Interpretation Deiner Bedingungs-Kombinatorik könnte es so aussehen:


If blnCase And Me!Text_erspielte_Punkte >= 31 And  Me!Text_erspielte_Punkte <= 89 Then

Lalikowski

....funktioniert hervorragend

DANKE

Beaker s.a.

Hallo,
Wozu dient denn der Spielwert in dieser Berechnung?
Das Ergebnis (gewonnen, verloren, Schneider, schwarz) bzw.
die Punktzahl der erhaltenen Stiche ist davon doch völlig
unabhängig. Er wird doch nur für die Berechnung der Punkte
auf dem Board benötigt (mit/ohne * Spielwert).

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Lalikowski

hallo Ekkehard,

vielleicht bin ich da tatsächlich zu umständlich.

Meine Überlegung dabei ist, dass die erzielten Augen im Zusammenhang mit dem Spiel zu sehen ist.

Beispiel:
Bei einem Spielwert von 23(Null) dürfen die erzielten Punkte nicht >0 sein, ansonsten verloren, anders bei einem Farbenspiel.

Beaker s.a.

Das ist aber auch die einzige Ausnahme. Und du musst doch eh
beides (Spielwert/Stiche) eingeben um die Punkte zu berechnen,
oder woher kommen diese Variablen?
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)