Passen Sie die Hervorhebungsänderungen von Excel 2010 an

2

Gibt es eine Möglichkeit, die Hervorhebung von Zellen in Excel beim Verfolgen von Änderungen anzupassen? Mein Kunde hat uns gebeten, "alles zu markieren, was Sie durch Ändern der Textfarbe in Rot geändert haben", und ich möchte dies implementieren. Ich suche derzeit nach einer Möglichkeit, dies mit VBA zu tun. Mein Gedanke ist:

if (current cell has changed) and (changed has NOT been approved) then
    set color of current cell = red
else 
    remove color of current cell. 
end if  

Anregungen sind willkommen!

Luke
quelle

Antworten:

5

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.

Hervorragend
quelle