| Autor |
Nachricht |
Nicht-Profi
Einsteiger
Verfasst am: 10. Feb 2010, 10:50 Rufname:
|
|
| Version: Office 2k (2000) |
|
Hallo,
ich bin gerade bei der Logik am Verzweifeln. Ich habe eine einfache Verzweigung:
| Code: |
If Ausdruck_A = Ausdruck_B Then
Mach_dies
Else
Mach_das
End If
|
Eigentlich sollte er, wenn
- Ausdruck_A wahr ist und Ausdruck_B wahr ist -> Mach_dies ausführen
- Ausdruck_A wahr ist und Ausdruck_B falsch ist -> Mach_das ausführen
- Ausdruck_A falsch ist und Ausdruck_B wahr ist -> Mach_das ausführen
- Ausdruck_A falsch ist und Ausdruck_B falsch ist -> Mach_dies ausführen.
Tut er nur leider nicht, er führt immer Mach_dies aus....
Ich habe zum Testen mal an selbiger Stelle folgende Zeilen dazugeschrieben:
| Code: |
Msgbox "A = " & CStr(Ausdruck_A)
Msgbox "B = " & CStr(Ausdruck_B)
Msgbox "(A=B) = " & CStr(Ausdruck_A=Ausdruck_B)
|
Und was gibt unser schlaues Makro aus?
Das hier:
A = WAHR
B = FALSCH
(A=B) = WAHR
Es ist zum Verzweifeln..... wo ist hier mein Denkfehler?!?
Gruß
der Nicht-Profi
|
|
Nicht-Profi
Einsteiger
Verfasst am: 10. Feb 2010, 11:06 Rufname:
|
| |
| Version: Office 2k (2000) |
|
Hallo nochmal,
ich kopiere einfach mal die Phrase, wie sie bei mir Makro steht:
| Code: |
MsgBox "A = " & CStr(((PRItypData(intIndex).DATblnPts = True) And (PRItypData(intIndex).DATdblP = 0)) Or ((PRItypData(intIndex).DATblnPts = False) And (PRItypData(intIndex).DATdblC = 0) And (PRItypData(intIndex).DATdblF = 0)))
MsgBox "B = " & CStr(blnIsNull)
MsgBox "(A=B) = " & CStr(((PRItypData(intIndex).DATblnPts = True) And (PRItypData(intIndex).DATdblP = 0)) Or ((PRItypData(intIndex).DATblnPts = False) And (PRItypData(intIndex).DATdblC = 0) And (PRItypData(intIndex).DATdblF = 0)) = blnIsNull)
If ((PRItypData(intIndex).DATblnPts = True) And (PRItypData(intIndex).DATdblP = 0)) Or ((PRItypData(intIndex).DATblnPts = False) And (PRItypData(intIndex).DATdblC = 0) And (PRItypData(intIndex).DATdblF = 0)) = blnIsNull Then
blnDataOK = True
MsgBox "Ich mache DIES. Wahr."
Else
blnDataOK = False
intIndex = PRIintDataNumber
MsgBox "Ich mache DAS. Falsch."
End If
|
Hier kommen die Zeilen:
A = WAHR
B = FALSCH
(A=B) = WAHR
Ich mache DIES. Wahr.
Gruß,
der Nicht-Profi
|
|
Mäxchen_
Gast
Verfasst am: 10. Feb 2010, 11:25 Rufname:
|
|
| Version: Office 2k (2000) |
|
Also, die MsgBox-Ausdrücke am Anfang werden nur angezeigt, aber nicht inhaltlich in der If-Else-Verknüpfung ausgewertet. Diese ist ja nur:
| Code: | If ((PRItypData(intIndex).DATblnPts = True) And (PRItypData(intIndex).DATdblP = 0)) Or ((PRItypData(intIndex).DATblnPts = False) And (PRItypData(intIndex).DATdblC = 0) And (PRItypData(intIndex).DATdblF = 0)) = blnIsNull Then
blnDataOK = True
MsgBox "Ich mache DIES. Wahr."
Else
blnDataOK = False
intIndex = PRIintDataNumber
MsgBox "Ich mache DAS. Falsch."
End If |
Man sollte besser folgende Details als Msgbox ausgeben:
DATblnPts
DATdblP
DATdblC
DATdblF
blnIsNull
um zu ermitteln, ob nicht - unabhängig von der Textausgabe der MsgBoxen - doch blnDataOK = True ist, und somit der 1. If-Zweig folgerichtig angesprungen wird. In Unkenntnis der Variablenzuweisungen kann ich das allerdings nicht beurteilen.
|
|
Nicht-Profi
Einsteiger
Verfasst am: 10. Feb 2010, 11:37 Rufname:
|
|
| Version: Office 2k (2000) |
|
Hallo,
das dachte ich mir schon. Deswegen habe ich mir die Mühe gemacht, schon einmal ein Beispiel zusammenzubasteln. Als Anhang kann es runtergeladen werden.
Gruß,
der Nicht-Profi
| Beschreibung: |
|
 Download |
| Dateiname: |
TesteDieLogik.xls |
| Dateigröße: |
31.5 KB |
| Heruntergeladen: |
9 mal |
|
|
Mäxchen_
Gast
Verfasst am: 10. Feb 2010, 11:43 Rufname:
|
| |
| Version: Office 2k (2000) |
|
Eben:
Teilbedingung:
(PRItypData(intIndex).DATblnPts = True) And (PRItypData(intIndex).DATdblP = 0)
wird ja erfüllt. Die zweite Teilbedingung (Or) braucht nicht mehr erfüllt zu werden, folglich wird der erste If-Verzweigungsast angesprungen. Stimmt doch.
|
|
Nicht-Profi
Einsteiger
Verfasst am: 10. Feb 2010, 11:51 Rufname:
|
|
| Version: Office 2k (2000) |
|
Ich glaube nicht, weil da steht ja (sinngemäß):
If (Ausdruck_A or Ausdruck_B) = Ausdruck_C Then
DIES
Else
DAS
End If
Ausdruck_A ist wahr, wie Du schon richtig gesehen hast. Ausdruck_B ist dann, wie Du richtig schreibst, egal, weil der Gesamtausdruck (Ausdruck_A or Ausdruck_B) wahr sein muss. Nun wird dieser Gesamtausdruck aber mit Ausdruck_C verglichen. Ausdruck_C aber ist blnIsNull und blnIsNull = False! Also WAHR = FALSCH und das sollte falsch sein.... oder habe ich immer noch einen Denkfehler?
Gruß,
der Nicht-Profi
|
|
Mäxchen_
Gast
Verfasst am: 10. Feb 2010, 12:03 Rufname:
|
|
| Version: Office 2k (2000) |
|
ok. Da steht sinngemäß:
If ((Ausdruck_A) or (Ausdruck_B)) = (Ausdruck_C) Then
DIES
Else
DAS
End If
Nun ist Ausdruck A = WAHR, Ausdruck B = FALSCH. Ausdruck C = FALSCH.
Wenn einer der beiden Ausdrücke A oder B falsch ist, dann ist der Vergleich mit Ausdruck C = falsch folglich wahr. Das trifft natürlich auch in umgekehrter Konstellation zu. Es heißt doch, falls Ausdruck A oder Ausdruck B dem Ausdruck C entspricht, ergibt sich WAHR.
So jedenfalls sagt es mir meine weibliche Logik.
|
|
Nicht-Profi
Einsteiger
Verfasst am: 10. Feb 2010, 12:12 Rufname:
|
|
| Version: Office 2k (2000) |
|
Hallo Mäxchen,
ich wusste noch nicht, dass es "weibliche" und "männliche" Logik gibt, ich dachte bisher immer, es gibt einfach nur "Logik"...
Ich verstehe das anders. Es gilt ja: Immer die Klammern zuerst! Also erst den Ausdruck in der Klammer auswerten: (Ausdruck_A or Ausdruck_B) ergibt wahr. WAHR wird dann mit FALSCH verglichen. Also WAHR = FALSCH. Wahr kann aber nicht gleich falsch sein. Also ist der Vergleich falsch.
Wenn die Klammernregeln hier nicht gelten würden, dann hätte ich ja nur über Umwegen eine Chance, den Vergleich zu machen, etwa so:
Ausdruck_D = Ausdruck_A or Ausdruck_B
"Prüfe" Ausdruck_D = Ausdruck_C
Gruß,
der Nicht-Profi
|
|
Mäxchen_
Gast
Verfasst am: 10. Feb 2010, 12:17 Rufname:
|
|
| Version: Office 2k (2000) |
|
| Das ist auch so, wenn du den Gesamtausdruck "Ausdruck A oder Ausdruck B" in deinem Makro nochmals mit einer Klammer umgibst. Dann werden nicht die beiden Teilausdrücke mit Ausdruck C verglichen, sondern ihr gemeinsamer Wahrheitswert. Setze einfach noch mal ein umschließendes Klammernpaar darum. Dann gehts in die Else-Verzweigung.
|
|
Nicht-Profi
Einsteiger
Verfasst am: 10. Feb 2010, 14:53 Rufname:
|
| |
| Version: Office 2k (2000) |
|
Hallo,
es entzieht sich zwar meiner (zugegeben männlichen ) Logik, zwei Klammernpaare drumherum packen zu müssen, aber es funktioniert! Danke!
Gruß
der Nicht-Profi
|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Excel VBA (Makros): Computer hängt nach VBA-Ausführung |
4 |
Tom Bombadil |
85 |
04. Jul 2010, 14:28 ransi  |
 |
Excel VBA (Makros): Farbfüllung der Zellen nach Logik |
4 |
sebastian231 |
59 |
22. Apr 2010, 13:06 sebastian231  |
 |
Excel VBA (Makros): Zellen nach Logik mit Farbe füllen |
5 |
sebastian231 |
331 |
20. Apr 2010, 12:01 sebastian231  |
 |
Excel VBA (Makros): Makros funktionieren auf fremdem Computer nicht |
6 |
myUrmel |
284 |
15. Feb 2010, 16:23 Thomas Ramel  |
 |
Excel VBA (Makros): Makro funktioniert nach Neustart des Computer nicht mehr |
3 |
Justmicha |
91 |
27. Jan 2010, 14:36 Justmicha  |
 |
Excel VBA (Makros): Makro kann auf anderem Computer nicht ausgeführt werden |
2 |
styleworker |
409 |
21. Okt 2009, 16:47 styleworker  |
 |
Excel Hilfe: Computer stürzt bei Excel 2007 ab |
3 |
existence |
220 |
23. Mai 2009, 09:18 Kaltenstein  |
 |
Excel Hilfe: Es scheitert schon an der einfachen Mathematik/Logik |
7 |
kugelschreiber |
171 |
24. Nov 2008, 18:21 silex1  |
 |
Excel Formate: Hilfe bei Excel........ Frauen und Computer |
2 |
Guest Nina |
155 |
18. Nov 2008, 07:53 < Peter >  |
 |
Excel VBA (Makros): ComboBox Logik |
3 |
Gast |
195 |
10. Nov 2008, 22:29 Gast  |
 |
Excel Formeln: "Beschränkungen auf diesem Computer" - Links in Of |
0 |
Weltenreiter |
180 |
29. Feb 2008, 13:25 Weltenreiter  |
 |
Excel VBA (Makros): Schleifen Logik problem ! komm einfach nicht drauf !? |
12 |
JeremiasP |
450 |
13. Jun 2007, 16:56 Bobby  |
| |