Vba berücksichtigt Elseif nicht

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Simono.

    Vba berücksichtigt Elseif nicht



    Mein Problem ist das nicht alle elseif Zweige in der Abfrage bereücksichtigt werden woran könnte das liegen?

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

    Simono schrieb:

    wenn ich es mit Value löse findet aber keine Prüfung statt
    Da findet sehr wohl eine Prüfung statt.
    Der Zellinhalt muss aus Excel-Sicht "wahr" sein, damit deine Abfrage zutrifft.
    Ich nehme an, dein "Wahr" resultiert sowieso auf einer in der Zelle enthaltenen boolschen Excel-Formel und nicht aus Text.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Vielen Dank also sollte ich alle "Wahr" bzw. "Falsch durch ein Value ersetzen?
    Bezieht sich auf boolsche Excel Formel und nicht auf ein Text das stimmt.
    Falls ich noch andere Optimierungen am Code durchführen sollte, bin ich für jede Änderung offen.

    Visual Basic-Quellcode

    1. Sub Unterscheidung2()
    2. For Each Regler In Bereich
    3. If Regler = "C04" And Regler.Offset(0, 27) = "Wahr" Or Regler = "C08" And Regler.Offset(0, 27) = "Wahr" _
    4. Or Regler = "C16" And Regler.Offset(0, 27) = "Wahr" Or Regler = "C32" And Regler.Offset(0, 27) = "Wahr" Or _
    5. Regler = "C02 D" And Regler.Offset(0, 27) = "Wahr" Then
    6. a = True
    7. VerModul = Range("Modul2").Copy
    8. Sheets("Versorgung").Range("Versorgungsmodul").PasteSpecial xlPasteValues
    9. PSpitze = Range("Spitzenleistung2").Copy
    10. Sheets("Versorgung").Range("F23").PasteSpecial xlPasteValues
    11. ElseIf Regler = 0 Then
    12. Exit Sub
    13. ElseIf Regler <> "C04" And Regler.Offset(0, 27) = "Wahr" Or Regler <> "C08" And Regler.Offset(0, 27) = "Wahr" _
    14. Or Regler <> "C16" And Regler.Offset(0, 27) = "Wahr" Or Regler <> "C32" And Regler.Offset(0, 27) = "Wahr" Then
    15. b = True
    16. VerModul = Range("Modul1").Copy
    17. Sheets("Versorgung").Range("Versorgungsmodul").PasteSpecial xlPasteValues
    18. PSpitze = Range("Spitzenleistung").Copy
    19. Sheets("Versorgung").Range("F23").PasteSpecial xlPasteValues
    20. End If
    21. If Regler = "C04" And Regler.Offset(0, 27) = "Wahr" Or Regler = "C08" And Regler.Offset(0, 27) = "Wahr" _
    22. Or Regler = "C16" And Regler.Offset(0, 27) = "Wahr" Or Regler = "C32" And Regler.Offset(0, 27) = "Wahr" Or _
    23. Regler = "C02 D" And Regler.Offset(0, 27) = "Wahr" Then
    24. myarr(1) = (Regler.Value)
    25. End If
    26. If myarr(1) <> "C04" And Regler.Offset(0, 27) = "Wahr" Or myarr(1) <> "C08" And Regler.Offset(0, 27) = "Wahr" Or myarr(1) <> "C16" And Regler.Offset(0, 27) = "Wahr" _
    27. Or myarr(1) <> "C32" And Regler.Offset(0, 27) = "Wahr" Or myarr(1) <> "C02 D" And Regler.Offset(0, 27) Or myarr(2) = 0 And Regler.Offset(0, 27) = "Wahr" Then
    28. myarr(2) = (Regler.Value)
    29. End If
    30. If myarr(1) = "C04" And a = True And myarr(2) <> "C04" And b = True Or myarr(1) = "C08" And a = True And myarr(2) <> "C08" And b = True Or _
    31. myarr(1) = "C16" And a = True And myarr(2) <> "C16" And b = True Or myarr(1) = "C32" And a = True And myarr(2) <> "C32" And b = True Or _
    32. myarr(1) = "C02 D" And a = True And myarr(2) <> "C02 D" And b = True Then
    33. MsgBox "g"
    34. myarr(1) = 0
    35. myarr(2) = 0
    36. a = False
    37. b = False
    38. Eintrag = "Falsch"
    39. Regler = 0
    40. Range("AF8") = "Falsch"
    41. Range("AF9") = "Falsch"
    42. Range("AF10") = "Falsch"
    43. Range("AF11") = "Falsch"
    44. Range("AF12") = "Falsch"
    45. Range("AF13") = "Falsch"
    46. Range("AF14") = "Falsch"
    47. Range("AF15") = "Falsch"
    48. Range("AF16") = "Falsch"
    49. Range("AF17") = "Falsch"
    50. Exit For
    51. End If
    52. Next Regler
    53. c = False
    54. End Sub

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

    Simono schrieb:

    sollte ich alle "Wahr" bzw. "Falsch durch ein Value ersetzen?
    Die "Wahr" durch ein .Value ersetzen. Also z.B. If myarr(1) <> "C04" And Regler.Offset(0, 27).Value
    "Falsch" habe ich als Abfrage keine gesehen; die müsstest du mit Not abfragen: If myarr(1) <> "C04" And Not Regler.Offset(0, 27).Value

    Und da wo die sie von Hand setzt, verwende nicht den Text, sondern ein Boolean.
    Range("AF17").Value = False

    Dass du das .Value schreibst, ist nicht zwingend notwendig, weil .Value die Default-Property von Range ist.
    (Range("AF17") ist implizit derselbe Ausdruck wie Range("AF17").Value)
    Aber es gehört einfach zu sauberen Programmierung, dass du die Property mit angibst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --