Sie können dies mit einem Worksheet Change-Ereignis in VBA tun. Ich habe angefangen, ein einfaches Beispiel für Sie zu erstellen, aber ich habe festgestellt, dass Ihr Kunde möglicherweise alle Hervorhebungen rückgängig machen möchte, nachdem er Ihre Änderungen überprüft hat. Also habe ich beschlossen, ein ganzes Arbeitsmodell zu entwickeln, das alles kann. Hier sind die Schritte, die Sie befolgen müssen:
Drücken Sie Alt+ F11, um den VBA-Editor in Excel zu öffnen. Doppelklicken Sie im Objektbrowser (auf der linken Seite des VBA-Fensters) auf ein Blatt, das Sie bearbeiten möchten. Fügen Sie den folgenden Code in das sich öffnende Textfeld ein.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet, ws2 As Worksheet
Dim i As Boolean
Application.ScreenUpdating = False
'Create Change Log if one does not exist.
i = False
For Each ws In ThisWorkbook.Worksheets
If ws.Name = "Change Log" Then
i = True
Exit For
End If
Next ws
If Not i Then
Set ws2 = ThisWorkbook.Worksheets.Add
ws2.Visible = xlSheetHidden
ws2.Name = "Change Log"
ws2.Range("A1") = "Sheet"
ws2.Range("B1") = "Range"
ws2.Range("C1") = "Old Text Color"
Else
Set ws2 = Sheets("Change Log")
End If
'Store previous color data in change log for rollback.
ws2.Range("A1").Offset(ws2.UsedRange.Rows.Count, 0) = Target.Worksheet.Name
ws2.Range("B1").Offset(ws2.UsedRange.Rows.Count - 1, 0) = Target.Address
ws2.Range("C1").Offset(ws2.UsedRange.Rows.Count - 1, 0) = Target.Font.Color
'Change font color to red.
Target.Font.Color = 255
Application.ScreenUpdating = True
End Sub
Dieser Code ändert die Schriftfarbe in Rot für jede Zelle, in der Sie den Wert bearbeiten. Die Schriftfarbe wird nicht geändert, wenn Sie nur das Format einer Zelle ändern. Außerdem wird die Schriftfarbe abhängiger Zellen nicht automatisch geändert. Letzteres könnte getan werden, aber ich überlasse es Ihnen, wenn Sie dieses Verhalten wollen.
Dieser Code erstellt auch ein verborgenes Änderungsprotokoll und zeichnet die Adresse und die ursprüngliche Schriftfarbe der Zelle auf, die geändert wurde.
Beachten Sie, dass dieser Code nur für Änderungen in diesem bestimmten Blatt funktioniert. Wenn Sie Änderungen in der gesamten Arbeitsmappe nachverfolgen möchten, können Sie denselben Code für jedes Blatt in das Arbeitsblattmodul einfügen.
Der Code zum Zurücksetzen von Hervorhebungen muss in einem separaten Modul platziert werden. Gehen Sie im VBA-Editor zu Einfügen >> Modul. Fügen Sie den folgenden Code in das neue Modul ein.
Sub rollbackHILITE()
Dim sht As Worksheet, cl As Worksheet
Dim j As Long, roll() As Variant
Dim del As Integer
Application.ScreenUpdating = False
'Find Change Log. If it doesn't exist, user is prompted and exits sub.
For Each sht In ThisWorkbook.Worksheets
If sht.Name = "Change Log" Then
Set cl = sht
Exit For
End If
Next sht
If cl Is Nothing Then
MsgBox "Change Log not found!"
Exit Sub
End If
'Return font colors to original form by stepping backward through change log.
If cl.UsedRange.Rows.Count > 1 Then
roll = cl.Range("A2:C2").Resize(cl.UsedRange.Rows.Count - 1, 3)
For j = UBound(roll, 1) To 1 Step -1
Set sht = Sheets(roll(j, 1))
sht.Range(roll(j, 2)).Font.Color = roll(j, 3)
Next j
End If
Application.ScreenUpdating = True
'Prompt User to keep or delete change log after rollback.
del = MsgBox("Delete Change Log?", vbOKCancel, "Finish Rollback")
If del = 1 Then
cl.Delete
End If
End Sub
Dieser Code kann über das Menü "Makros" in Excel ausgeführt werden. Die Schriftfarbe der markierten Zellen wird einfach auf die ursprünglichen Farben zurückgesetzt und das Änderungsprotokoll wird gelöscht, wenn der Benutzer damit einverstanden ist.