11.10.2019, 21:03
(Dieser Beitrag wurde zuletzt bearbeitet: 11.10.2019, 21:13 von WillWissen.
Bearbeitungsgrund: Codetags
)
Hallo liebe VBA Profis,
Ich arbeite an einem Excelprojekt und habe mir folgende Aufgabenstellung gestellt:
Ich habe eine Tabelle, in der Zeilenweise viele Daten angezeigt werden. Zur besseren Sichtbarkeit bzw. um nicht in der Zeile zu verrutschen möchte ich, dass ein bestimmter Teil der Zeile farblich hervorgehoben wird, wenn eine Zelle dieser Zeile angeklickt wird.
Folgende Parameter/Vorgaben sollen berücksichtigt werden:
1) Nur im Bereich "B8:AA653" soll es die Möglichkeit geben, per Klick die Zeile zu markieren.
2) Die farbliche Markierung soll nur im Zeilenbereich "E:AA" erscheinen, wobei unterschiedliche Farben zu berücksichtigen wären. Für "E:H" und für "Y:AA" gilt hellblau und für "I:X" gilt mittelblau.
3) Die Markierung darf nicht die ursprüngliche Farb-Formatierung einer Zeile entfernen, nachdem man eine nächste Zeile markiert.
4) Der VBA-Code muss das Tabellenblatt mit unprotect/protect entsperren und wieder sperren.
Ich selber bin schon mit Hilfe diverser teils älterer Beiträge hier aus dem Forum soweit gekommen, dass ich Punkt 3 (mit Hilfe einer zusätzlichen Tabelle) und 4 lösen konnte. Leider verzweifele ich an Punkt 1 und 2. (bisheriger VBA Code siehe unten)
Hat jemand von Euch hierfür eine Hilfestellung bzw. auch einen ganz tollen Lösungsweg, der auch möglicherweise sich komplett von meinem bisherigen und nicht vollständigem Lösungsansatz unterscheidet?
Vielen lieben Dank für Eure Hilfe!!!!
Patrick
So sieht die bisherige Programierung aus:
https://forum.chip.de/discussion/1891800...u-loeschen
Ich arbeite an einem Excelprojekt und habe mir folgende Aufgabenstellung gestellt:
Ich habe eine Tabelle, in der Zeilenweise viele Daten angezeigt werden. Zur besseren Sichtbarkeit bzw. um nicht in der Zeile zu verrutschen möchte ich, dass ein bestimmter Teil der Zeile farblich hervorgehoben wird, wenn eine Zelle dieser Zeile angeklickt wird.
Folgende Parameter/Vorgaben sollen berücksichtigt werden:
1) Nur im Bereich "B8:AA653" soll es die Möglichkeit geben, per Klick die Zeile zu markieren.
2) Die farbliche Markierung soll nur im Zeilenbereich "E:AA" erscheinen, wobei unterschiedliche Farben zu berücksichtigen wären. Für "E:H" und für "Y:AA" gilt hellblau und für "I:X" gilt mittelblau.
3) Die Markierung darf nicht die ursprüngliche Farb-Formatierung einer Zeile entfernen, nachdem man eine nächste Zeile markiert.
4) Der VBA-Code muss das Tabellenblatt mit unprotect/protect entsperren und wieder sperren.
Ich selber bin schon mit Hilfe diverser teils älterer Beiträge hier aus dem Forum soweit gekommen, dass ich Punkt 3 (mit Hilfe einer zusätzlichen Tabelle) und 4 lösen konnte. Leider verzweifele ich an Punkt 1 und 2. (bisheriger VBA Code siehe unten)
Hat jemand von Euch hierfür eine Hilfestellung bzw. auch einen ganz tollen Lösungsweg, der auch möglicherweise sich komplett von meinem bisherigen und nicht vollständigem Lösungsansatz unterscheidet?
Vielen lieben Dank für Eure Hilfe!!!!
Patrick
So sieht die bisherige Programierung aus:
Code:
[color=#20292a]Private Sub Worksheet_Activate()
ActiveSheet.Unprotect
Application.EnableEvents = True
ActiveSheet.Protect
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect
Application.EnableEvents = False 'Rekursiven Aufruf verhindern
Dim Alt As Long, Neu As Long, Farbe1 As Integer, Farbe2 As Integer, Farbe3 As Integer
Dim Rg As Range
Set Rg = Range.Cells(Target.Row, Target.Column)
Farbe1 = 42
Farbe3 = 42
Farbe2 = 42
Neu = Target.Row
'Alte Zeile identifizieren
Alt = Sheets("Tabelle1").Cells(1, 1).Value
If Alt < 1 Then GoTo Skipit 'Es gibt noch keine Sicherung
'Alte Zeile wiederherstellen
Sheets("Tabelle1").Rows(Alt).Copy
Sheets("TP 304L").Rows(Alt).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Skipit:
'Jetzt die Formatierung (und nur die) der aktiven Zeile kopieren
Rows(Neu).Copy
Sheets("Tabelle1").Rows(Neu).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Sheets("Tabelle1").Cells(1, 1) = Target.Row 'Zeilennummer sichern
With Rows(Neu)
'Diese Abfrage bewirkt, dass die Zeile in Farbe2 gefärbt wird, wenn
'die gewählte Zelle bereits die Farbe1 hat:
If .Interior.ColorIndex = Farbe1 Then
.Interior.ColorIndex = Farbe2
Else
.Interior.ColorIndex = Farbe1
End If
End With
'Diese Abfrage bewirkt, dass die ZELLE in Farbe2 gefärbt wird, wenn
'die gewählte Zelle bereits die Farbe3 hat:
With Cells(Neu, Target.Column)
If .Interior.ColorIndex = Farbe3 Then
.Interior.ColorIndex = Farbe2
Else
.Interior.ColorIndex = Farbe3
End If
End With
Rg.Activate
Application.EnableEvents = True
ActiveSheet.Protect
End Sub[/color]
https://forum.chip.de/discussion/1891800...u-loeschen