Hallo Werner,
es ist nicht klar, ob du diese Änderungen in Spalte C herbeiführst.
Erzeugst du sie unmittelbar oder durch eine externe Verknüpfung, kannst du einfach das Worksheet-Change-Ereignis auswerten:
In einem Modul definierst du: public c_alt()
Im Code der relavanten Tabelle legst du an:
Private Sub Worksheet_Activate()
lz = Cells(Rows.Count, 3).End(xlUp).Row
ReDim c_alt(lz)
For i = 1 To lz
c_alt(i) = Cells(i, 3)
Next i
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c1:c50")) Is Nothing Then
If c_alt(Target.Row) <> Cells(Target.Row, 3) Then
Cells(Target.Row, 1) = ""
Cells(Target.Row, 2) = ""
c_alt(Target.Row) = Cells(Target.Row, 3)
End If
End If
End Sub
Wenn diese Änderung aber durch eine Formel in C1 bis C50 oder durch ein anderes Makro erfolgt, funktioniert das nicht. Dann kannst du den Bereich dauernd überwachen. Das belastet aber die CPU!
Im Code der Tabelle oder unter anderem Namen in einem Modul. Das Makro läuft so lange, die das Workbook geladen ist oder Strg+Pause gedrückt wird.
Private Sub Worksheet_Activate()
WBN = ActiveWorkbook.FullName
lz = Cells(Rows.Count, 3).End(xlUp).Row
Do While WBN = ActiveWorkbook.FullName
ReDim c_alt(lz)
For i = 1 To lz
c_alt(i) = Cells(i, 3)
Next i
Do While WBN = ActiveWorkbook.FullName
lza = lz
lz = Cells(Rows.Count, 3).End(xlUp).Row
If lza <> lz Then
Cells(lz, 1) = ""
Cells(lz, 2) = ""
Exit Do
End If
For i = 1 To lz
If c_alt(i) <> Cells(i, 3) Then
Cells(i, 1) = ""
Cells(i, 2) = ""
c_alt(i) = Cells(i, 3)
Exit For
End If
Next i
DoEvents
Loop
Loop
End Sub
Gruß
Holger
|