2.2k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Zusammen,
ich will die geasmte aktive Zeile einer Tabelle farblich hervorheben. Beim Wechsel in eine andere Zeile sollen alle ursprünglichen Formatierungen der hervorgehobenen Zeile wieder hergestellt werden. Sprich die Formatierung soll nciht verloren gehen beim hervorheben.

Wisst ihr wie das mit VBA geht?
Danke!

2 Antworten

0 Punkte
Beantwortet von
Hallo,

soll wirklich der Hintergrund geändert werden oder reicht es, wenn sich nur die Selektion über die gesamte Zeile erstreckt? Der letztere Fall lässt sich relativ leicht umsetzen. Dazu einfach den folgenden Code in das entsprechende Tabellenmodul des VBA-Editors (Alt+F11) legen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim s As Integer

s = ActiveWindow.ScrollColumn

Application.EnableEvents = False
Application.ScreenUpdating = False
Rows(Target.Row & ":" & Target.Row + Target.Rows.Count - 1).Select
Target.Activate
ActiveWindow.ScrollColumn = s
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub

Falls du aber wirklich den Hintergrund für die Markierung richtig echt umfärben willst - z.B. weil du die aktuell markierte Zeile auf dem Ausdruck sehen willst - kannst du stattdessen folgenden Code im entsprechenden Tabellenmodul hinterlegen:

Dim r As Integer, c As Integer, rng As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim Farbe As Long

Farbe = ActiveWorkbook.Colors(14) '=Colorindex 14 oder z.B. Farbe = 123456

'Ausführung in den Hintergrund schalten
Application.ScreenUpdating = False
Application.EnableEvents = False

'Hilfssheet zum Speichern des Zeilenformats anlegen
On Error Resume Next
If Sheets("Formatspeicher").Name = "" Then
Set fsp = Sheets.Add(After:=Sheets(Sheets.Count))
fsp.Name = "Formatspeicher"
Me.Select
fsp.Visible = False
Else: Set fsp = Sheets("Formatspeicher"): End If

'prüfen ob Hintergrundfarbe absichtlich geändert wurde und übernehmen dieser
If Not rng Is Nothing Then
If rng.Cells(1).Interior.Color <> Farbe Then
With fsp.Range(fsp.Cells(1, rng.Column), fsp.Cells(rng.Rows.Count, rng.Column _
+ rng.Columns.Count - 1)).Interior 'geänderte Farbe in die Kopie übernehmen
If rng.Cells(1).Interior.ColorIndex = xlNone Then .ColorIndex = xlNone _
Else .Color = rng.Cells(1).Interior.Color
End With
End If
End If

If r <> Target.Row Then 'Wenn Zeile ungleich vorheriger Selection
If r > 0 Then
fsp.Rows(1 & ":" & c).Copy 'Holen aus Formatspeicher
Rows(r & ":" & r + c - 1).PasteSpecial xlPasteFormats 'Format wiederherstellen
Target.Select
End If

r = Target.Row: c = Target.Rows.Count 'Merken welche Zeile aktuell ist
Rows(r & ":" & r + c - 1).Copy 'Zeilenformat kopieren und
fsp.Rows(1 & ":" & c).PasteSpecial xlPasteFormats 'im Formatspeicher ablegen
Rows(r & ":" & r + c - 1).Interior.Color = Farbe 'Zeilenhintergrund einheitlich
End If

Set rng = Target
Application.CutCopyMode = False
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

Dabei ist es sogar möglich, während der Bearbeitung die Hintergrundfarbe bestimmter Zellen zu ändern. Nur die Farbe, die für die Markierung verwendet wird, ist für die normale Zellformatierung tabu.

Natürlich kannst du dir auch deine eigene Markierfarbe wählen.

Bei meiner alten Excel-Version läufts prima. Wie sich der Code in neueren Versionen verhält, muss noch getestet werden.

Probiers mal aus.
Gruß Mr. K.
0 Punkte
Beantwortet von
Hallo xlKing,

deine VBA Codes funkttionieren in Excel 2007 wunderbar!

VIELEN DANK!

Der 2. Code ist super, da er die gesamte Zeile einfärbt und diese wieder auf die ursprüngliche Farbe setz, wenn man sich in eine neue Zeile befindet.

Da ich in mehreren Programmen Arbeite und eine Excel Instanz immer geöffnit ist, sollte die Zeile eingefärbt sein. Beim ersten Code wird die aktive Zeile "nur" umrahmt, sobald man ein anderes Programm nutzt, ist diese Umrahmung nicht mehr sichtbar.
Daher der 2. Code :)

Falls du Zeit hast, rundet die Erweiterung um die Textformatierung (Fett/Kursiv/Unterschrichen, Schriftart und Schriftfarbe) deinen 2. Code ab.

(muss aber nicht) Auch ohne ist alles optimal! :)

Super!
Danke nochmal!
Gruß excelnewbie
...