Discussion:
WAHR in VBA anders als in XL ?
(zu alt für eine Antwort)
Wolfgang Habernoll
2006-08-13 10:59:21 UTC
Permalink
Hallo zusammen

folgendes sei gegeben. In A1 steht FALSCH, diese umwandeln wie bekannt
=A1 * 1 oder = --A1 Ergebnis = 0 , OK

das gleiche in VBA
? Range("A1")
Ergebnis = Falsch
? Range("A1") * 1 oder ? --Range("A1")
Ergebnis = 0 , OK

Nun in A1 WAHR
=A1 * 1 oder = --A1 Ergebnis = 1 , OK

das gleiche in VBA
? Range("A1")
Ergebnis = Wahr
? Range("A1") * 1 oder ? --Range("A1")

Ergebnis = -1 ????

wieso, hängt das mit irgendwelchen Einstellungen zusammen, mach ich einen
Gedankenfehler oder sehe den "Wald vor ..". Die einfachste Lösung wäre es mit
ABS(Range("A1") abzufragen, aber eine Erklärung hätte ich schon gern.

mfG
Wolfgang Habernoll
Andreas Preugschat
2006-08-13 11:39:43 UTC
Permalink
Post by Wolfgang Habernoll
wieso, hängt das mit irgendwelchen Einstellungen zusammen, mach ich einen
Gedankenfehler oder sehe den "Wald vor ..". Die einfachste Lösung wäre es mit
ABS(Range("A1") abzufragen, aber eine Erklärung hätte ich schon gern.
Hallo Wolfgang,
in der VBA-Hilfe wird zu Datentyp Boolean unter anderem erläutert:

"Beim Umwandeln anderer numerischer Datentypen in Werte des Typs Boolean
wird 0 zu False, und alle anderen Werte werden zu True. Beim Umwandeln
von Werten des Datentyp Boolean in andere Datentypen wird False zu 0 und
True zu -1."

Im Worksheet werden "WAHR" und "FALSCH" offensichtlich anders behandelt,
als von VBA. Um diese Typen aus einem Arbeitsblatt zu verwenden,
solltest du (nach obigen Ausführungen in der VBA-Hilfe) möglichst
typgleich bleiben. Z.B. so:

Sub testbool()
Select Case Worksheets(1).Cells(1, 1)
Case True: MsgBox "WAHR"
Case False: MsgBox "FALSCH"
Case Else: MsgBox "irgendwas"
End Select
End Sub
--
Mit freundlichen Grüßen aus Berlin
Andreas Preugschat
------------------
Windows XP SP 2 // Office 2003 SP 2
Wolfgang Habernoll
2006-08-13 14:42:56 UTC
Permalink
Hallo Andreas

danke für deine Antwort, damit habe die Stelle in der OH gefunden. Demnach
ist es ja so richtig, wenn auch verwirrend. Nun sind zumindest "die Bäume weg
und ich sehe den Wald wieder :-) "

mfG
Wolfgang Habernoll
Post by Andreas Preugschat
Post by Wolfgang Habernoll
wieso, hängt das mit irgendwelchen Einstellungen zusammen, mach ich einen
Gedankenfehler oder sehe den "Wald vor ..". Die einfachste Lösung wäre es
mit ABS(Range("A1") abzufragen, aber eine Erklärung hätte ich schon gern.
Hallo Wolfgang,
"Beim Umwandeln anderer numerischer Datentypen in Werte des Typs Boolean
wird 0 zu False, und alle anderen Werte werden zu True. Beim Umwandeln von
Werten des Datentyp Boolean in andere Datentypen wird False zu 0 und True
zu -1."
Im Worksheet werden "WAHR" und "FALSCH" offensichtlich anders behandelt, als
von VBA. Um diese Typen aus einem Arbeitsblatt zu verwenden, solltest du
(nach obigen Ausführungen in der VBA-Hilfe) möglichst typgleich bleiben.
Sub testbool()
Select Case Worksheets(1).Cells(1, 1)
Case True: MsgBox "WAHR"
Case False: MsgBox "FALSCH"
Case Else: MsgBox "irgendwas"
End Select
End Sub
--
Mit freundlichen Grüßen aus Berlin
Andreas Preugschat
------------------
Windows XP SP 2 // Office 2003 SP 2
Frank Arendt-Theilen
2006-08-13 16:15:05 UTC
Permalink
Hallo Andreas,
deine Variante funktioniert nur in der deutschen Lokalisierung von XL.
Für die Internatinalisierung folgendes Beispiel:
(für deutsches XL):
A1: WAHR
A2: FALSCH

(für engl. XL):
A1: TRUE
A2: FALSE

usw.

Sub Test()
MsgBox BooleanReturnValue(ActiveSheet.Range("A1").Value)
MsgBox BooleanReturnValue(ActiveSheet.Range("A2").Value)
MsgBox BooleanReturnValue(True)
MsgBox BooleanReturnValue(False)
End Sub

Function BooleanReturnValue(booBoolean As Boolean) As Integer
Dim arrArray()
arrArray = Array(0, 1)
BooleanReturnValue = arrArray(booBoolean * -1)
End Function

MfG Frank
_________________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Microsoft Excel - Die ExpertenTipps: http://tinyurl.com/cmned
Website: http://www.xl-faq.de
1
2
3
--
Andreas Preugschat
2006-08-13 23:30:36 UTC
Permalink
Post by Frank Arendt-Theilen
Hallo Andreas,
deine Variante funktioniert nur in der deutschen Lokalisierung von XL.
Hallo Frank,
bist du dessen sicher? Mangels internationaler Ausgabe von Excel konnte
ich es leider nicht testen, würde aber meine Hand dafür ins Feuer legen,
dass die Auswertung des booleschen Wertes von WAHR oder TRUE bei meiner
Konstruktion unabhängig von der Sprache funktionieren müsste.
(Soll ich vorsichtshalber schon die Brandsalbe holen?)
--
Mit freundlichen Grüßen aus Berlin
Andreas Preugschat
------------------
Windows XP SP 2 // Office 2003 SP 2
unknown
2006-08-14 10:19:54 UTC
Permalink
Hallo Andreas,
au weia, beinahe hättest du deine Hände unnötig verbrannt. Du brauchst
keine Brandsalbe, sondern ich eine bessere Brille.

Ich habe lediglich die Wahrheitswerte in Anführungszeichen gesehen und
dabei gedacht, das du im Makro lediglich auf die entsprechende
Zeichenkette "WAHR" bzw. "FALSCH" abfragst. Und das ginge so nicht.

Nachdem ich nun meine Hirnbrille geputzt und aufgesetzt habe kann ich
dir nur sagen: Dein Makro geht in Ordnung! Meine Aussage bezüglich der
Internationalisierung ist falsch!

Mein beigesteuertes Mako bringt die von XL unterschiedlichen boolschen
Werte auf den gleichen Nenner. WAHR/TRUE etc entspricht
ausmultipliziert 1 und FALSCH/FALSE etc. entspricht ausmultipliziert
dann 0.

Sub Test()
MsgBox BooleanReturnValue(ActiveSheet.Range("A1").Value)
MsgBox BooleanReturnValue(ActiveSheet.Range("A2").Value)
MsgBox BooleanReturnValue(True)
MsgBox BooleanReturnValue(False)
End Sub

Function BooleanReturnValue(booBoolean As Boolean) As Integer
Dim arrArray()
arrArray = Array(0, 1)
BooleanReturnValue = arrArray(booBoolean * -1)
End Function

MfG Frank
_________________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Microsoft Excel - Die ExpertenTipps: tinyurl.com/cmned
Website: xl-faq.de
Herbert Taferner
2006-08-13 11:39:30 UTC
Permalink
Hallo Wolfgang,
Post by Wolfgang Habernoll
das gleiche in VBA
? Range("A1")
Ergebnis = Wahr
? Range("A1") * 1 oder ? --Range("A1")
Ergebnis = -1 ????
wieso, hängt das mit irgendwelchen Einstellungen zusammen, mach ich einen
Gedankenfehler oder sehe den "Wald vor ..". Die einfachste Lösung wäre es mit
ABS(Range("A1") abzufragen, aber eine Erklärung hätte ich schon gern.
das kann ich bei meinem Excel 2003 nicht nachvollziehen
wenn in der Zelle A1 FALSCH steht

ergibt das erste
Post by Wolfgang Habernoll
? Range("A1")
FALSCH

und die beiden anderen
Post by Wolfgang Habernoll
? Range("A1") * 1 oder ? --Range("A1")
jeweils 0

mfg Herbert
Wolfgang Habernoll
2006-08-13 14:30:16 UTC
Permalink
Hallo Herbert
Post by Andreas Preugschat
Hallo Wolfgang,
Post by Wolfgang Habernoll
das gleiche in VBA
? Range("A1")
Ergebnis = Wahr
? Range("A1") * 1 oder ? --Range("A1")
Ergebnis = -1 ????
wieso, hängt das mit irgendwelchen Einstellungen zusammen, mach ich einen
Gedankenfehler oder sehe den "Wald vor ..". Die einfachste Lösung wäre es
mit ABS(Range("A1") abzufragen, aber eine Erklärung hätte ich schon gern.
das kann ich bei meinem Excel 2003 nicht nachvollziehen
wenn in der Zelle A1 FALSCH steht
ergibt das erste
Post by Wolfgang Habernoll
? Range("A1")
FALSCH
und die beiden anderen
Post by Wolfgang Habernoll
? Range("A1") * 1 oder ? --Range("A1")
jeweils 0
ja das ist ja richtig, aber wie ist es mit

Nun in A1 WAHR
=A1 * 1 oder = --A1 Ergebnis = 1 , OK

das gleiche in VBA
? Range("A1")
Ergebnis = Wahr
? Range("A1") * 1 oder ? --Range("A1")

Ergebnis = -1 ??

erhälst du auch -1 in Excel 2003 ?

Andreas hat mit auf die Stelle in der OH hingewiesen und es ist tatsächlich
so.

mfG
Wolfgang Habernoll
Herbert Taferner
2006-08-13 14:42:14 UTC
Permalink
Hallo Wolfgang,
Post by Wolfgang Habernoll
ja das ist ja richtig, aber wie ist es mit
Nun in A1 WAHR
=A1 * 1 oder = --A1 Ergebnis = 1 , OK
das gleiche in VBA
? Range("A1")
Ergebnis = Wahr
? Range("A1") * 1 oder ? --Range("A1")
Ergebnis = -1 ??
erhälst du auch -1 in Excel 2003 ?
Andreas hat mit auf die Stelle in der OH hingewiesen und es ist tatsächlich
so.
ooh - Entschuldigung,
da habe ich den halben Text überlesen

ja das ist sowie Andreas schreibt,
ich habe das vor einiger Zeit mal verwendet
und dabei auf = 0 oder <> 0 geprüft

mfg Herbert
unknown
2006-08-14 12:01:18 UTC
Permalink
Post by Wolfgang Habernoll
Hallo zusammen
folgendes sei gegeben. In A1 steht FALSCH, diese umwandeln wie bekannt
=A1 * 1 oder = --A1 Ergebnis = 0 , OK
das gleiche in VBA
? Range("A1")
Ergebnis = Falsch
? Range("A1") * 1 oder ? --Range("A1")
Ergebnis = 0 , OK
Nun in A1 WAHR
=A1 * 1 oder = --A1 Ergebnis = 1 , OK
das gleiche in VBA
? Range("A1")
Ergebnis = Wahr
? Range("A1") * 1 oder ? --Range("A1")
Ergebnis = -1 ????
wieso, hängt das mit irgendwelchen Einstellungen zusammen, mach ich einen
Gedankenfehler oder sehe den "Wald vor ..". Die einfachste Lösung wäre es mit
ABS(Range("A1") abzufragen, aber eine Erklärung hätte ich schon gern.
mfG
Wolfgang Habernoll
Jetzt möchte ich mir im Nachhinein mal die Finger verbrennen:
Stimmt meine Erinnerung, dass IF (Bedingung) bei "erfüllt" (um "wahr")
zu umschiffen) nicht -1 liefert (und nichterfüllt die Null)?
In Anbetracht dieser Möglichkeit wundern mich die 'fehlgegangenen'
Rechenexempel nicht.
--
Eric March

Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.
Loading...