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
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 (https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/select-case-statement) anschauen. Das erlaubt Konstrukte, wie in deinem Beispiel.
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.
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.... :)
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
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
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
....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.....
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.
...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?
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
....funktioniert hervorragend
DANKE
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
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.
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?
Ich habe auch schon mal Skat gespielt. Ein Nullspiel hat man verloren, wenn man einen Stich bekommt, wobei das auch Luschen mit 0 Augen sein können.
...ich gebe bereits bei Spielansage vor, wie viele Punkte zum Gewinn nötig sind.
Ein anderes Beispiel wäre die Ansage von Schneider.
Gleichzeitig vergleiche ich den Reizwert mit dem tatsächlichen Spielwert, um auch eine Überreizung auswerten zu können.
Zitat von: ebs17 am Januar 24, 2022, 21:25:34Ich habe auch schon mal Skat gespielt. Ein Nullspiel hat man verloren, wenn man einen Stich bekommt, wobei das auch Luschen mit 0 Augen sein können.
...ups, das ist in der Tat ein Problem.
Werde vorerst wohl mit der Eingabe von fiktiven Augen arbeiten müssen.
Gehe das Problem mal an....
Danke für den Tip..
...das Problem mit den Null-Spielen habe ich jetzt wie folgt gelöst:
Das Feld der erspielten Augen steht standardmäßig auf NULL.
Wenn nun ein Null-Spiel gespielt wird und der Wert der erspielten Augen >=0 ist, dann ist das Spiel verloren.
Bleibt der Wert weiter NULL, dann ist das Spiel gewonnen, d.h. also keine Stich bekommen.
Nochmals Danke für den Einwand......