AW: Änderungen in Excel Arbeitsblatt kennzeichnen
04.05.2014 13:47:13
fcs
Hallo Miststueck,
nachfolgend Makros zur Überwachung der Selektion und Änderung von Zellen.
nach dem Öffnen der Datei muss Blatt immer erst eine andere Zelle selektiert werden, damit die Altdaten der Zelle zwischengespeichert werden. Zur Zeit werden Änderungen in allen Spalten überwacht - hier musst du ggf. die Case-Zeilen der beiden Makros anpassen.
Gruß
Franz
'Code unter dem Modul des Tabellenblattes, dessen Zellen überwacht werden sollen
Option Explicit
Private objZelle As Range, varAlt As Variant, varAltGesamt
'ich möchte alle Änderungen die in einem Excel-Arbeitsblatt vorgenommen werden, _
in einer bestimmten Farbe sofort sehen können.
'Die Zeichenfarbe der Zelle, in der ich eine Änderung ("neuen Text") vornehme, _
soll grün sein. Zudem soll der "alte Text" der Zelle in blau und durchgestrichen _
dargestellt werden.
Private Const FarbeNeu As Long = 39168 'Grün
Private Const FarbeAlt As Long = 13382400 'Blau
Private Sub Worksheet_Change(ByVal Target As Range)
Dim varNeu
If objZelle Is Nothing Then
'do nothing - mehr als eine Zelle wurde selektiert/geändert
Else
If Target.Cells.Count = 1 Then
Select Case Target.Row
Case Is >= 2 'anpassen, wenn andere Zeilen überwacht werden sollen
Select Case Target.Column
Case Is >= 1 'anpasen, wenn nur bestimmte Spalten überwacht werden sollen
varNeu = Target.Text
Application.EnableEvents = False
If varAlt = varNeu Then 'keine Änderung
With Target
.Font.Strikethrough = False
If varNeu = varAltGesamt Then 'in leere Zelle wurde etwas eingetragen
.Value = "'" & varNeu
Else
.Value = "'" & varAltGesamt
End If
With .Characters(1, Len(varNeu)).Font
.Color = FarbeNeu
End With
With .Characters(Len(varNeu) + 1, Len(varAltGesamt) - Len(varNeu)).Font
.Color = FarbeAlt
.Strikethrough = True
End With
End With
Else
With Target
.Font.Strikethrough = False
.Value = "'" & varNeu & varAlt
With .Characters(1, Len(varNeu)).Font
.Color = FarbeNeu
End With
With .Characters(Len(varNeu) + 1, Len(varAlt)).Font
.Color = FarbeAlt
.Strikethrough = True
End With
End With
End If
Application.EnableEvents = True
End Select
End Select
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Pos As Integer, strText As String
'ggf. alten Text einer einzelnen selektierten Zelle merken
Set objZelle = Nothing
varAlt = ""
If Target.Cells.Count = 1 Then
Select Case Target.Row
Case Is >= 2 'anpassen, wenn andere Zeilen überwacht werden sollen
Select Case Target.Column
Case Is >= 1 'anpasen, wenn nur bestimmte Spalten überwacht werden sollen
Set objZelle = Target
varAltGesamt = Target.Text
varAlt = ""
With Target
For Pos = 1 To Len(.Text)
If .Characters(Pos, 1).Font.Color FarbeAlt Then
strText = Left(.Text, Pos)
Else
Exit For
End If
Next
End With
varAlt = strText
End Select
End Select
End If
End Sub