Select Case wird nicht richtig ausgewertet
Hallo zusammen,
mich plagt etwas. Folgender Code
Bis zum Fall "35" AND "18" wird die Textbox auch mit dem richtigen Wert befüllt.
Bei 35,19 würde ich den Wert 24 erwarten, ich bekomme aber eine 22. Ebenso bei 35,23.
Erst das letzte Wertepaar 35,25 zeigt dann die korrekte 27 an.
Ich bin gerade ziemlich verwirrt?!
mich plagt etwas. Folgender Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Select Case intRaster And intLochhoehe
'Raster 20mm
Case ("20") And ("15"):
txtAbstandX.Value = 34
'Raster 25mm
Case ("25") And ("15"):
txtAbstandX.Value = 42
Case ("25") And ("18"):
txtAbstandX.Value = 43
Case ("25") And ("19"):
txtAbstandX.Value = 44
'Raster 35mm
Case ("35") And ("15"):
txtAbstandX.Value = 22
Case ("35") And ("18"):
txtAbstandX.Value = 23
Case ("35") And ("19"):
txtAbstandX.Value = 24
Case ("35") And ("23"):
txtAbstandX.Value = 26
Case ("35") And ("25"):
txtAbstandX.Value = 27
Bis zum Fall "35" AND "18" wird die Textbox auch mit dem richtigen Wert befüllt.
Bei 35,19 würde ich den Wert 24 erwarten, ich bekomme aber eine 22. Ebenso bei 35,23.
Erst das letzte Wertepaar 35,25 zeigt dann die korrekte 27 an.
Ich bin gerade ziemlich verwirrt?!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 364877
Url: https://administrator.de/forum/select-case-wird-nicht-richtig-ausgewertet-364877.html
Ausgedruckt am: 13.04.2025 um 23:04 Uhr
11 Kommentare
Neuester Kommentar
Wobei ich nicht sicher bin, ob das wirklich das ist, was Du suchst.
Ich denke, was du suchst ist:
Ich denke, was du suchst ist:
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
If intRaster = 20 And intLochhoehe = 15 Then
'Raster 20mm
txtAbstandX.Value = 34
ElseIf intRaster = 25 And intLochhoehe = 15 Then
'Raster 25mm
txtAbstandX.Value = 42
ElseIf ...
..... usw.
end If
Du hast einen Denkfehler. Select Case ist kein Ersatz für If then ElseIf !
Man kann das so machen, wie Du es versuchst, aber dann muss man sicher sein, dass die möglichen Kombinationen der Werte eindeutige Ergebnisse liefern.
Lass Dir doch mal alle Kombinationen anzeigen:
Wenn die Ergebnisse nicht eindeutig sind, dann kannst Du das so nicht machen.
Man kann das so machen, wie Du es versuchst, aber dann muss man sicher sein, dass die möglichen Kombinationen der Werte eindeutige Ergebnisse liefern.
Lass Dir doch mal alle Kombinationen anzeigen:
1
2
3
4
5
6
2
3
4
5
6
....
Msgbox 50 And 19
Msgbox 50 And 23
Msgbox 50 And 25
Msgbox 50 And 28
....
Wenn die Ergebnisse nicht eindeutig sind, dann kannst Du das so nicht machen.
Case wertet aber die Ergebnisse aus und nicht die Terme!
Es sei:
intRaster = 50
intLochhoehe = 19
"intRaster And intLochhoehe" ergibt jetzt 18
"50 And 19" ergibt 18 --> Case hat Treffer und arbeitet diesen Block ab.
"50 And 23" ergibt auch 18. --> Dieser Block wird aber nicht mehr ausgeführt
Es sei:
intRaster = 50
intLochhoehe = 23
"intRaster And intLochhoehe" ergibt jetzt 18
"50 And 19" ergibt 18 --> Case hat Treffer und arbeitet diesen Block ab.
"50 And 23" ergibt auch 18. --> Dieser Block wird aber nicht mehr ausgeführt
Case führt also nicht den Block von "50 And 23" aus! Jetzt verstanden?
Es sei:
intRaster = 50
intLochhoehe = 19
"intRaster And intLochhoehe" ergibt jetzt 18
"50 And 19" ergibt 18 --> Case hat Treffer und arbeitet diesen Block ab.
"50 And 23" ergibt auch 18. --> Dieser Block wird aber nicht mehr ausgeführt
Es sei:
intRaster = 50
intLochhoehe = 23
"intRaster And intLochhoehe" ergibt jetzt 18
"50 And 19" ergibt 18 --> Case hat Treffer und arbeitet diesen Block ab.
"50 And 23" ergibt auch 18. --> Dieser Block wird aber nicht mehr ausgeführt
Case führt also nicht den Block von "50 And 23" aus! Jetzt verstanden?
Ganz eindeutig: Brett. 
Ein letzter Versuch von mir:
bedeutet NICHT: "Wenn intRaster gleich 50 und intLochhoehe gleich 19".
Es bedeutet: Im Falle, dass "intRaster And intLochhoehe" das Selbe ergibt wie "50 And 19".
Mit intRaster = 19 und intLochhoehe = 50 ergibt "intRaster And intLochhoehe" aber auch das Selbe wie mit intRaster = 50 und intLochhoehe = 19.
Ich wette aber, was Du abfragen wilst ist: "Wenn intRaster gleich 50 und intLochhoehe gleich 19 ist ...". Und das bekommst Du mit einem "Select Case" (in jedem Fall nur "unsauber") nur unter bestimmten Bedingungen hin. Nämlich dass die Ausgangswerte in Ihren Kombinationen eineindeutig sind.
Edit:
Falls Du doch tatsächlich das Ergebnis der logischen Verknüpfung zweier Integer-Werte auswerten willst, dann hast Du mit "Select Case" das Problem, dass nur ein Case-Block abgearbeitet wird, nämlich der erste mit einem entsprechenden Wert. Und wenn Dir das bekannt sein sollte, dann verstände ich nicht, warum Du dann mehrere Case-Blöcke für das gleiche Ergebnis hast.
Edit 2:
Alternative:
Annahme: intLochhoehe hat ein Maximum von 99 (0-99, 100 Werte).
Dann bist Du mit "intRaster * 100 + intLochhoehe" eindeutig. Also
Sinn und Unsinn mal dahingestellt ...
Ein letzter Versuch von mir:
1
2
3
4
2
3
4
...
Select Case intRaster And intLochhoehe
Case 50 And 19
...
Es bedeutet: Im Falle, dass "intRaster And intLochhoehe" das Selbe ergibt wie "50 And 19".
Mit intRaster = 19 und intLochhoehe = 50 ergibt "intRaster And intLochhoehe" aber auch das Selbe wie mit intRaster = 50 und intLochhoehe = 19.
Ich wette aber, was Du abfragen wilst ist: "Wenn intRaster gleich 50 und intLochhoehe gleich 19 ist ...". Und das bekommst Du mit einem "Select Case" (in jedem Fall nur "unsauber") nur unter bestimmten Bedingungen hin. Nämlich dass die Ausgangswerte in Ihren Kombinationen eineindeutig sind.
Edit:
Falls Du doch tatsächlich das Ergebnis der logischen Verknüpfung zweier Integer-Werte auswerten willst, dann hast Du mit "Select Case" das Problem, dass nur ein Case-Block abgearbeitet wird, nämlich der erste mit einem entsprechenden Wert. Und wenn Dir das bekannt sein sollte, dann verstände ich nicht, warum Du dann mehrere Case-Blöcke für das gleiche Ergebnis hast.
Edit 2:
Alternative:
Annahme: intLochhoehe hat ein Maximum von 99 (0-99, 100 Werte).
Dann bist Du mit "intRaster * 100 + intLochhoehe" eindeutig. Also
1
2
3
4
2
3
4
...
Select Case intRaster *100 + intLochhoehe
Case 50 * 100 + 19
...