[Gelöst] Excel bleibt hängen. Nichts geht mehr. Wo ist der Fehler im Quellcode?

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Sandman.

    [Gelöst] Excel bleibt hängen. Nichts geht mehr. Wo ist der Fehler im Quellcode?

    Hallo,

    ich bin nicht wirklich begabt was die VBA Programmierung angeht und hoffe deshalb auf eure Hilfe. Ich möchte folgendes erreichen:

    Wenn in der Spalte "L" der Registerkarte "Daten" die Zahl 14 steht, soll in Spalte "T" XYZ stehen. Wenn eine 28 in Spalte "L" steht, soll in Spalte "T" "ABC" stehen. usw. Nun ist das meine Idee....

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. 'Bei Zeile 2 starten
    3. zeile = 2
    4. 'Letzte Zahl in Spalte L ermitteln
    5. Zeilemax = Range("L" & Rows.Count).End(xlUp).Row
    6. 'Alle Zeilen durchlaufen
    7. For zeile = 1 To Zeilemax
    8. Select Case Range("L" & zeile)
    9. Case "14": Range("T" & zeile) = "XYZ"
    10. Case "28": Range("T" & zeile) = "ABC"
    11. End Select
    12. Next
    13. End Sub


    Das ganze funktioniert 2-5 Zeilen und dann geht in Excel als auch im VB Editor nichts mehr...kann ich nur noch über den Task Manager beenden.

    Ihr könnt mir sicher weiterhelfen? :D

    MfG

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Sandman“ () aus folgendem Grund: Problem gelöst

    Moin,

    Du startest nicht bei Zeile 2 (For zeile = 1 To Zeilemax ).

    rows.count ist unzuverlässig, falls die Werte durchgängig(!) gefüllt sind, versuch doch lieber

    Visual Basic-Quellcode

    1. for i = 2 to 65000
    2. v_Inhalt = cells(i,5) ' 5 ist Deine Spalte
    3. select case v_inhalt
    4. case "" ' Ausstieg, wenn erste leere Zelle erreicht ist
    5. end
    6. case 14
    7. cells(i,12) = "XYZ" ' 12 ist Deine Spalte
    usw.

    Außerdem hast Du eine Rekursion drin, denn wenn Du etwas änderst (was Du ja tust), dann wird ja wieder das Ereignis Worksheet_Change ausgelöst.

    Vermutlich schmiert er deshalb ab. Aber eigentlich sollte sich eine Rekursion mit ESC abfangen lassen.
    Es gibt verschiedene Möglichkeiten, Rekusionen abzufangen oder zu vermeiden, mußte einfach mal googeln, was für Dich am besten paßt.

    Gruß
    Timo
    Vielen Dank Timo! :thumbsup:

    Das mit der ESC Taste ist wirklich so....wusste ich nur nich :D



    Hab nun die Änderungen vorgenommen und siehe da...es läuft. 8o

    Das löst das Problem im Grunde auch...

    Visual Basic-Quellcode

    1. Application.EnableEvents = False
    2. Application.EnableEvents = True