ich hoffe, ihr könnt mir helfen oder mich zumindest auf den richtigen Weg bringen.
Ich habe wenig Ahnung und folgendes Szenario:
1. Tabellenblatt: Dateneingabe über ActiveX-Kombinationsfelder (Vorauswahl und Freitext möglich). LinkedCell jeweils in Spalte C.
2. Tabellenblatt: Ausgabeliste zur Abarbeitung (in völlig anderer Reihenfolge). Der Inhalt aus Tabelle1 wird per Formel, evtl. auch mit Zusatztext oder frei übersetzt übertragen. Range A1:BA54, ca. 150 Felder, diese bestehen aus verbundenen Zellen.
Nun möchte ich beim Abarbeiten meiner Ausgabeliste die erledigten Aufgaben grün kennzeichnen. _
Dies habe ich mit "per Klick grün einfärben" umgesetzt, das funktioniert für sich alleine prima. _
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set changeRange = Range("a2:ba54")
intColor = RGB(216, 228, 188)
If Not Application.Intersect(changeRange, Target) Is Nothing Then
With Target.Interior
.Color = IIf(.Color = intColor, xlNone, intColor)
End With
End If
End Sub
Jetzt mein Problem:
Nun kann es vorkommen, dass sich Tage/Wochen/Monate später Änderungen ergeben. Diese Auswahl möchte ich auf Tabellenblatt1 über die ActiveX Kombinationsfelder vornehmen und auf Tabellenblatt2, der Abarbeítungsliste, sollen sich die geänderten Felder dann wieder entfärben, so dass man auf einen Blick die Änderungen erkennen, einarbeiten und erneut grün / erledigt markieren kann.
Dies hatte ich versucht über:
1.) Modul plus CommandButton. Kurzzeitig funktionierte es.
Option Explicit
Sub IfThenElse()
Dim alterWert As Variant
If Worksheets("AB + BA").Cells(2, 8).Value alterWert Then
Worksheets("AB + BA").Cells(2, 8).Interior.ColorIndex = xlColorIndexNone
End If
If Worksheets("AB + BA").Cells(2, 18).Value alterWert Then
Worksheets("AB + BA").Cells(2, 18).Interior.ColorIndex = xlColorIndexNone
End If
If Worksheets("AB + BA").Cells(2, 24).Value alterWert Then
Worksheets("AB + BA").Cells(2, 24).Interior.ColorIndex = xlColorIndexNone
End If
End Sub
2) Modul und CommandButton
Private Sub CommandButton2_Click()
Call ÄnderungenFärben
End Sub
Sub ÄnderungenFärben()
Dim rngPruefbereich As Range, rngCell As Range
On Error GoTo errEXIT
Application.EnableEvents = False
If rngBereich Is Nothing Then Set rngBereich = ActiveCell
Set rngPruefbereich = Intersect(rngBereich.Parent.Range("a2:bz100"), rngBereich)
If rngPruefbereich Is Nothing Then Exit Sub
For Each rngCell In rngPruefbereich
With rngCell
If .Value alterWert Then
Interior.Color = vbRed
End If
End With
Next rngCell
errEXIT:
Application.EnableEvents = True
End Sub
3) So funktioniert das Änderungen einfärben, aber ich kann es nicht mehr händisch grün färben:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B1").Value alterWert Then
Range("B1").Interior.Color = vbRed
ElseIf Range("B1").Value = alterWert Then
Range("B1").Interior.Color = x1None
End If
Set changeRange = Range("A1:ZZ1000")
intColor = RGB(216, 228, 188)
If Not Application.Intersect(changeRange, Target) Is Nothing Then
With Target.Interior
.Color = IIf(.Color = intColor, xlNone, intColor)
End With
End If
End Sub
Nun habe ich hier auf der Seite folgendes gefunden:
Die Excel/VBA-Beispiele
Bei Eingaben oder Änderungen von Formelwerten soll eine Überprüfung mit den Vorgängerwerten stattfinden. Ist der neue Zellwert höher, soll die Hintergrundfarbe auf rot, ist er niedriger, soll sie auf gelb gesetzt werden.
https://www.herber.de/mailing/Setzen_der_Hintergrundfarbe_nach_Wertevergleich.htm
Ich dachte das für mein Problem anpassen zu können, scheitere aber kläglich.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim vNew As Variant, vOld As Variant
If Intersect(Target, Range("a2:ba54")) Is Nothing Then Exit Sub
vNew = Target.Value
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
Application.Undo
vOld = Target.Value
Target.Value = vNew
If vNew vOld Then
Target.Interior.ColorIndex = 3
Else
Target.Interior.ColorIndex = xlColorIndexNone
End If
ERRORHANDLER:
Application.EnableEvents = True
End Sub
Kann mir bitte, bitte irgendjemand einen Tipp geben, in welche Richtung ich laufen muss?!
Kann ich WorksheetChange in ein Modul auslagern und es bei Änderungen gezielt und einmalig über einen CommandButton die geänderten Zellen entfärben lassen?
Vielen Dank für die Mühe
Marimi