'entwickelt von Winfried Radner 'e-mail: Wolf.W.Radzinski@onlinehome.de 'Benutzung frei - ohne Gewähr 'bei Excel 97 und dem Event Worksheet_Change gibt es Probleme 'mit Daten > Gültigkeit > Auswahl aus DropDownListe 'bei reiner Auswahl eines Wertes ohne Nutzung der Tastatur 'oder Doppelklick mit der Maus (in die Zelle nach Auswahl) 'wird kein Change Event gestartet, man kann somit nicht 'überprüfen, ob ein Wert eingegeben, oder geändert wurde. 'Folgende KRÜCKE behebt diesen Mangel unter Verwendung des 'Worksheet_SelectionChange Events (der funktioniert auch 'bei Wahl aus der Liste!) 'globale Variablen! 'speichert die gesamte alte Zelle Public t_old As Range 'speichert nur den eigentlichen Zellinhalt Public old_value As Variant Private Sub Worksheet_Activate() Application.ScreenUpdating = True Application.EnableEvents = True 'zu Beginn zeigt der ZellZEIGER ins Nichts! Set t_old = Nothing 'initialisieren! 'um ganz sicher zu gehen, daß die aktive Zelle 'beim Blattwechsel nicht schon im Änderungsbereich 'liegt rufe 1x selectionchange auf! Worksheet_SelectionChange ActiveCell End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) 'so sollte es eigentlich funktionieren, tut es aber 'leider bei Gültigkeitslistenauswahl nicht immer :( ' Select Case Target.Column ' Case 1: 'das wäre dann Spalte A ' Select Case Target.Row ' Case 7 To 18: ' Call Makro1 ' End Select ' End Select End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 'bei jedem Zellwechsel prüfen! 'wenn eine Zelle aus dem gewünschten Bereich 'selektiert wurde, dann ist sie in t_old 'zwischengespeichert! If Not (t_old Is Nothing) Then 'wenn mehr als eine Zelle selektiert führt 'der Vergleich t_old mit old_value zum 'Absturz, darum nächste Zeile eingeführt! 'wenn man mehr als eine Zeile gleichzeitig 'verändert (z.B. löscht), dann wird kein 'Makro gestartet! 'mit set t_old=Activecell bei Mehrfachauswahl wird der Fehler auch 'verhindert, der folgende if Vergleich sollte also immer wahr sein If t_old.Count = 1 Then 'hat auch tatsächlich eine Änderung stattgefunden? If t_old <> old_value Then Application.EnableEvents = False Application.ScreenUpdating = False 'dann rufe mein Makro auf oder tue sonstwas anderes Application.SendKeys (Chr(vbKeyReturn)) Call Makro1 Application.ScreenUpdating = True Application.EnableEvents = True End If End If 'setze t_old wieder zurück auf Nichts Set t_old = Nothing End If 'wenn eine Zelle aus dem Änderungsbereich 'angesprungen wird (hier im Beipiel Bereich A7:A18) Select Case Target.Column Case 1: 'das wäre dann Spalte A Select Case Target.Row Case 7 To 18: If Target.Count = 1 Then 'hier sollte eigentlich mit 'worksheet_change das makro1 starten, 'tut es aber leider nicht immer :( 'deshalb 'setze den Zeiger auf die Zelle Set t_old = Target 'und speichere den Zellinhalt old_value = Target 'und hoffe darauf, daß die Zelle 'auch mal wieder verlassen wird:) Else Set t_old = ActiveCell old_value = ActiveCell End If End Select End Select End Sub