VBA If -Then - ElseIf -> gibt immer gleichen Wert aus

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    VBA If -Then - ElseIf -> gibt immer gleichen Wert aus

    Hallo Zusammen,

    wahrscheinlich sehe ich vor lauter Bäumen keinen Wald mehr...

    Eigentlich soll der folgende Code den Zweck haben in Zelle "C32" den Wert 0.5, 1 oder1.5 zu schreiben, je nach dem, was in C29, C30 und C31 steht. Aber egal was ich auswähle, der Ergebnis ist immer 0.5.

    Als Anfänger zum verzweifeln... Für die Cracks hier wohl eher einen Kleinigkeit, oder?

    Quellcode

    1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. If Range("C29").Value = "Ja" Then
    3. Range("C32").Value = 0.5
    4. ElseIf Range("C30").Value = "Ja" Then
    5. Range("C32").Value = 0.5
    6. ElseIf Range("C31").Value = "Ja" Then
    7. Range("C32").Value = 0.5
    8. ElseIf Range("C29").Value = "Ja" And Range("C30").Value = "Ja" Then
    9. Range("C32").Value = 1
    10. ElseIf Range("C30").Value = "Ja" And Range("C31").Value = "Ja" Then
    11. Range("C32").Value = 1
    12. ElseIf Range("C29").Value = "Ja" And Range("C31").Value = "Ja" Then
    13. Range("C32").Value = 1
    14. ElseIf Range("C29").Value = "Ja" And Range("C30").Value = "Ja" And Range("C31").Value = "Ja" Then
    15. Range("C32").Value = 1.5
    16. End If



    Vielen, vielen Dank für Eure Hilfe!
    Steve
    das Problem liegt daran dass du in der falschen Reihenfolge vorgehst ...

    wenn ich den ersten Part mit dem letzten vergleiche fällt mir auf dass der letzte Part
    nie! eintreffen wird weil Part1 bereits wahr ist ...

    Als Lösung kannst du das ganze umdrehen und die Abfrage auf C29 und C30 zuerst ausführen.
    Ich würde auch immer alle werte Abfragen sprich die 3 Quellfelder und das ganze in ein Select Case
    einbauen:

    Select Case C29 & C30 & C31
    Case "JaJaJa" : Range (...) = ...
    Case "JaJaNein" : Range ...
    Case Else Range ... = 0.5
    End select

    Im Debugger solltest du ganz gut sehen können wieso er dir immer 0.5 ausgibt.

    Die ganzen Werte mit 0.5 würde ich in den Else-Part reinpacken
    Hallo Phreak87,

    wie vermutet war das Problem recht einfach. Wenn die erste Bedingung erfüllt ist, greift der Rest natürlich nicht mehr. Dafür schon einmal ein dickes Danke!

    Auch die Idee mit Case = ... klingt sehr plausibel. Allerdings kommt mein fundiertes Anfänger-Halbwissen aber mit der Ausführung nicht klar :S

    Darf ich um ein konkretes Beispiel bitten nachdem ich mir dann den Rest erarbeiten kann?
    Das wäre echt super!

    Beste Grüße
    Steve
    Guten Morgen Zusammen,

    ich bekomme es einfach nicht hin... ;(

    Folgenden Code habe ich jetzt "gebastelt":+

    Quellcode

    1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    2. Dim i As Double
    3. i = WorksheetFunction.CountIf(Range("C29:C31"), "Ja")
    4. Select Case i
    5. Case 1
    6. .Range(C32).Value = 0.5
    7. 'nur 1 mal "Ja"
    8. Case 2
    9. .Range(C32).Value = 1
    10. 'genau 2 mal "Ja"
    11. Case 3
    12. .Range(C32).Value = 1.5
    13. 'überall "Ja"
    14. End Select
    15. End Sub


    Sobald ich nun in meiner Tabelle in eine der Zellen klicke, die überwacht werden, kommt eine Fehlermeldung. Hab mal einen Screenshot angehangen.
    Die genaue Meldung lautet:
    "Compile error:
    Invalid or unquaslified reference."

    Und ich dachte, das wäre mal eben so nebenbei zu realisieren...

    Vielen lieben Dank für Eure Geduld und Antworten!
    Steve
    Bilder
    • 2012-09-24-Screenshot-001.png

      120,03 kB, 1.388×1.040, 201 mal angesehen
    Das Event nur auswerten, wenn die fraglichen Zellen geändert worden sind!

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. If Not Intersect(Target,Range("C29:C31")) Is Nothing Then
    3. Range("C32").Value=WorksheetFunction.CountIf(Range("C29:C31"), "Ja")*0.5
    4. End If
    5. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --