Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Imp Operator

Betrifft: Imp Operator von: Anton
Geschrieben am: 07.08.2014 17:35:15

Hallo,



ich möchte mit VB/VBA einen Ausdruck mit Logischen Operatoren auswerten lassen.

Beispiel: (1 And 0) Or 1 = 1

Soweit funktioniert auch alles. Für einige Berechnungen benötige ich den Imp Operator, jedoch ermittelt das Programm bei diesem Operator ein falsches Ergebnis. Anstatt False / 0 gibt es -2 aus und für True / 1 ermittelt es -1. Kann mir jemand helfen, wo das Problem liegt?



Grüße

Anton

  

Betrifft: Wie lauten deine VBA Befehle? (owT) von: EtoPHG
Geschrieben am: 07.08.2014 17:48:09




  

Betrifft: Gelöst - Quellcode von: Anton
Geschrieben am: 07.08.2014 20:02:46

Hallo,

Dank des Hinweises von Nepumuk hat sich das Problem erledigt. Zur Vervollständigung der Frage noch der Quellcode.

Ziel des Codes ist einen Ausdurck mit Logischen Operatoren auszuwerten. Da ich diesen Ausruck während des Programmablaufs erst erstelle habe ich mir einen VB Code aus einem anderen Form zu Nutze gemacht (vb-fun.de). Zu nächst wird der Ausruck in einem String gespeichert. In dem String stehen nur noch "True", "False" und die Logischen Operatoren. Diese "Bausteine" sind immer durch ein Leerzeichen getrennt.

Sub BeispielCode
Dim strFormel as String
Dim Ergebnis as Boolean


strFormel = "True Imp False"   ' Bsp. für eine Berechnung

' ScriptControl hinzufügen
Set scrObj = CreateObject("ScriptControl")
' Scriptsprache festlegen
scrObj.Language = "VBScript"
' Ausführen der Anweisung
scrObj.ExecuteStatement ("Ergebnis = " & strFormel)
Ergebnis = scrObj.Eval("Ergebnis")


MsgBox "Das Ergebnis ist " & xErgebnis

End Sub

Vielen Dank
Anton


  

Betrifft: AW: Imp Operator von: Nepumuk
Geschrieben am: 07.08.2014 18:14:56

Hallo,

Imp und Eqv funktionieren nur mit boolschen Werten.

Gruß
Nepumuk
P.S. Warum es in der Hilfe anders steht, weiß ich auch nicht.


  

Betrifft: Alle VBA-Logik-Operatoren fktionieren ... von: Luc:-?
Geschrieben am: 08.08.2014 03:08:15

…grundsätzlich sowohl mit Zahlen als auch mit Booleschen Werten! Will man als Ergebnis nur Letztere haben, müssen die Operanden eben auch in dieser Form vorliegen. Interessant sind aber gerade auch Erstere als Operanden.
Morrn, Luc :-?


  

Betrifft: EDV-Grundlagen: Für das Bsp sähe das so aus, ... von: Luc:-?
Geschrieben am: 12.08.2014 16:16:52

…Anton & Interessierte;
da es sich bei LogikFktt um eine bit-orientierte Operation handelt und eine ganze Dezimalzahl für eine Ziffer mindestens 4 Bits (1 HalbByte, gepackt), normalerweise 8 Bits (1 Byte) beansprucht:
(00000001 and 00000000) or 00000001 ⇒ 00000000 or 00000001 ⇒ 00000001
Analog fktioniert es auch mit den anderen LogikOperatoren, nur muss bedacht wdn, dass Boolesche Werte wie True und False nur 1 Bit benötigen. Wdn diese Werte in VBA in Ganzzahlen konvertiert, ergibt sich -1 und 0, weil bei einer negativen Zahl hier das 1.Bit (von links, es gibt auch noch andere Konventionen) den Wert 1 hat(/haben muss), was dazu führt, dass not 00000000 ⇒ 11111111 ergibt, was nach dieser Konvention dezimal -1 (255-256) entspricht. In Xl wird dagg angenommen, dass sowohl -1 als auch 1 eine Negation von 0 sein können. Ein umgewandelter Wahrheitswert WAHR ergibt somit 1. Das ist aber speziell so pgmiert und entspricht genauso­wenig dem üblichen Bit-Hintergrund wie die Festlegung der Darstellungs­länge einer Dezimal­Ziffer auf 10 Zeichen in XlFktt wie DEZINBIN (da legt dann die 1. von 10 Ziffern die Negativität fest).
-2 (254-256) entspräche übrigens dem Byte 11111110, was man u.a. durch Negation von 00000001 (⇒1) erhält.
Damit sollte auch klar sein, warum DezimalZahlen niemals Wahrheitswerten oder gar TextZahlen gleich sein können, denn die weisen auf Byte-Ebene abweichende Bit-Folgen auf. Man muss diese also stets erst konvertieren (was in VBA fallweise auch automatisch erfolgt).
Luc :-?


 

Beiträge aus den Excel-Beispielen zum Thema "Imp Operator"