Variable bleibt auf "False" obwohl Bedingung erfüllt ist und dann auf True gesetzt werden müsste!!

  • VB6

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von ereza.

    Variable bleibt auf "False" obwohl Bedingung erfüllt ist und dann auf True gesetzt werden müsste!!

    Hallo liebe Community!

    Ich weiß echt nicht weiter...

    ich habe eine Schleife in der geprüft wird ob eine Bedingung erfüllt oder nicht erfüllt ist....

    Wenn die Bedingung erfüllt ist, setze ich eine Variable auf True... wenn sie nicht erfüllt ist, passiert gar nix...

    Der Ausgangszustand der Variable ist zuvor, Initial auf False gesetzt und befindet sich auch außerhalb der Schleife... (somit, wird nicht unabsichtlich wieder auf false gesetzt...)

    Das Problem bei dem ganzen ist nun... dass.. die Bedingung erfüllt ist --> Wenn ich Haltepunkte setze und mir die Werte im Lokalfenster anschaue, dann hat alles seine Richtigkeit... somit Bedingung ist erfüllt und er müsste dann die Zeile nach dem "Then" ausführen....

    tut er aber nicht!! - er springt dann ins else.... und das verstehe ich einfach nicht :((

    Vielleicht weiß ja jemand von euch, was da nicht stimmen könnte....

    hier der Ausschnitt vom Code, der nicht geht:

    Visual Basic-Quellcode

    1. 'Prüfe zuerst ob einer von den Spalteneinträgen dem Gesamtbetrag entspricht....
    2. For k = 6 To h
    3. Betrag_aktuell = Tabelle17.Cells(c, k)
    4. If Betrag_aktuell = Gesamtbetrag_BD And Tabelle17.Cells(1, k) <> "Lohnkosten, eigen" Then
    5. kz_BetragGleichGesamtbetrag = True
    6. Else
    7. End If
    8. Next



    Anbei in 1.jpg seht ihr, dass alles erfüllt ist...
    Als nächstes müsste er normalerweise kz_BetragGleichGesamtbetrag = True setzen....

    macht er aber nicht.... sondern geht, im nächsten Schritt, siehe 2.jpg, ins ELSE rein.... :((

    Wäre echt dankbar, wenn mir jemand weiterhelfen könnte, diesen Fehler aufzuklären...

    Vielen Dank!

    LG Tim
    Bilder
    • 2.JPG

      246,52 kB, 1.412×754, 122 mal angesehen
    • 1.JPG

      248,98 kB, 1.414×754, 122 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ereza“ ()

    hallo Bluespide!

    Du meinst, das im Direktfenster eingeben und dann ausführen oder?? - oder muss man da noch eine spezielle tastenkombi etc. ausführen?

    Weil...

    Wenn ich das mache passiert gar nix... also... ganz gleiches verhalten wie davor..


    Nachtrag:


    @Neptun:


    hallo Neptun!

    Ja, hab ich dann leider auch gesehen....

    Sorry! weißt du zufällig wie ich das in den VBA-Teil des Forums verschieben kann?

    Und...

    habs grad ausprobiert... hab die Zellen mit den Werten, als Zahl mit 2 Dezimalstellen nach dem Komma formatiert...

    Aber leider... ändert sich nix am verhalten... :(

    Immer noch gleich leider... :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ereza“ ()

    ereza schrieb:

    Anbei
    6,4 MB für BMPs, die Du lieber im JPG-Format gepostet hättest.
    Bitte editiere Deinen Post entsprechend.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    ist schon erledigt...
    danke fürn hinweis...

    ;)


    und apropo hinweis... hättest du vl. eine Idee bzgl. meinem Problem? :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ereza“ ()

    Hallo Neptun!

    1000 DANK!!!

    Es hat wirklich an dem gelegen!! Das ist ja unfassbar!!!??
    Ich wusste das bis jz noch gar nicht, dass Excel die Zahlen anscheinend unterschiedlich als Double-Wert speichert...

    Aber, ganz ehrlich... Ich versteh das immer noch nicht ganz... weil...
    Wenn Excel, immer nach der gleichen Methode, Werte einließt und die dann dementsprechend als Double-Wert interpretiert und speichert.... dann erfolgt das doch sicherlich auch, wie alles, nach ein und demselben Algorithmus....
    So..
    Wenn ich nun einfach nur als Zahlenwert 220,17 in einer Zelle dastehen habe... und das an 2 verschiedenen Orten.... aber wirklich immer nur, die komplett identen Werte, also: 220,17
    und... Excel ließt die Werte ein und speichert sie, in jeweils 1 Variablen ab.... und beide Variablen haben den gleichen Datentyp, nämlich Double....
    dann muss doch bitte 2 mal der idente Wert abgespeichert werden??!! Weil... auch wenn Excel in Wirklichkeit, beim Einlesen: 220,170000000000123456789 einließt.... dann muss ja bei der zweiten Zahl, der komplett gleiche Betrag herauskommen.... also auch: 220,170000000000123456789 - weil, das ja der gleiche Algorithmus sein muss bzw. das gleiche Rechnungs/bzw./Berechnungsverfahren, mit dem Excel die Zahl erfasst bzw. generiert und speichert....

    Das verstehe ich einfach nicht....??


    und...
    Und falls das wirklich nicht so ist... und tatsächlich jedes mal eine andere Zahl vom Wert her erzeugt wird.... (weil das einlesen mit irgendwelchen Taktgebern funktioniert und sich daraus andere Werte darstellen lassen... etc...) - DANN würde das ja schlussendlich bedeuten, dass sämtliche Gleitkommazahlen, welche man mit Excel einließt und in Variablen speichert... um mit diesen dann zu arbeiten.... - dass man dann jedes mal, zuerst RUNDEN MUSS, wenn man so Vergleichsoperationen durchführen möchte??!! Echt jz?? - Das wäre ja ein Wahnsinn, weil dann muss ich ja wirklich noch einiges umschreiben....!! 8|

    Wäre cool, wenn mir jemand erklären könnte, wie das sein kann, dass unterschiedliche Werte Zustandekommen.... Wenn man, wohl bemerkt, 2 idente Zahlenwerte irgendwo stehen hat... - Weil das sind nicht mal errechnete Zahlenwerte.... also ich mein, so wie es der Kollege Eierlein dargestellt hat... sondern, es sind einfach nur 2 idente Werte, die in unterschiedlichen Zellen stehen....

    Ich würde das wirklich gerne genau verstehen....

    Vielen herzlichen Dank nochmals!!
    Das ist ein Wert der in einer Zelle, auf einem anderen Tabellenblatt steht. Der wird zwar berechnet, jedoch sind die Grunddaten bzw. die Quelle worauf alle errechneten Zahlen basieren, die Gleiche... - das sind wenn, dann Zahlen mit 2 Nachkommastellen.
    hmm... naja... Datentypen wären alle gleich.... also... an dem kanns bei mir zumindest, mal nicht liegen...

    von der Berechnung her, wahrscheinlich dann...

    naja... da wäre es sicherlich interessant zu wissen, wie Excel das eigentlich genau macht... also was eigentlich speicherungstechnisch genau passiert, wenn ein wert in eine deklarierte variable gespeichert wird...
    Wäre cool, wenn mir jemand erklären könnte, wie das sein kann, dass unterschiedliche Werte Zustandekommen.


    Hatte ich doch schon geschrieben.


    Quellcode

    1. Doublewert -> intern gespeichert als
    2. 227.17 -> 227.169998168945312
    3. 200 + 27.17 -> 227.170000076293945


    Wie du siehst:
    227.169998168945312 ist ungleich 227.170000076293945

    Versuch's mit Decimal (statt Double)
    @ereza Du musst nicht auf a = b oder a <> b testen, sondern Du musst den Betrag der Differenz auf kleiner Epsilon testen, wobei der Wert Epsilon sinnvoll festgelegt werden muss:

    VB.NET-Quellcode

    1. Dim Epsilon = 1E-6
    2. If Math.Abs(a - b) < Epsilon Then
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!