Das erste Makro, dass ich Ihnen vorstellen möchte, ist eine Lesehilfe für große Tabellen. Es wird immer automatisch die aktuelle Zeile fett hervorgehoben. Sobald mehr als eine Zeile markiert ist, passiert dagegen nichts. Das Makro hilft Ihnen also dabei, immer leicht die Werte einer Zeile lesen zu können, ohne in der Zeile zu verrutschen.
Den Programmcode fügen Sie im VBA Editor in das jeweilige Tabellenblatt (vgl. Abbildung 1) ein! (nicht als Modul!)
Makro-Programmcode:
Private MeineZeile As Range Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim markierteZeilen As Long markierteZeilen = Selection.Rows.Count If markierteZeilen = 1 Then If Not MeineZeile Is Nothing Then MeineZeile.Font.Bold = False Target.EntireRow.Font.Bold = True Set MeineZeile = Target.EntireRow End If End Sub
Alternative optische Hervorhebungen
Statt einem Fettdruck kann die aktuelle Zeile auch anderweitig hervorgehoben werden. Dafür bietet sich eine farbliche Änderung der Schriftart oder des Hintergrunds an.
Ersetzen Sie hierfür den Programmcode der Zeile
Target.EntireRow.Font.Bold = True
für die Schriftfarbe mit
Target.EntireRow.Font.Color = -16776961
für die Hintergrundfarbe mit
Target.EntireRow.Interior.Color = 65535
Eine weitere Option könnte sein, die Schriftgröße der aktuellen Zeile zu ändern.
Target.EntireRow.Font.Size = 18
Bei der Nutzung der drei vorgenannten Varianten ist jeweils gleichzeitig die Änderung beim Verlassen der Zeile rückgängig zu machen. Hierfür ersetzen Sie den Programmcode der Zeile
If Not MeineZeile Is Nothing Then MeineZeile.Font.Bold = False
für die Schriftfarbe mit
If Not MeineZeile Is Nothing Then MeineZeile.Font.ColorIndex = xlAutomatic
für die Hintergrundfarbe
If Not MeineZeile Is Nothing Then MeineZeile.Interior.Pattern = xlNone
bzw. für die Schriftgröße mit
If Not MeineZeile Is Nothing Then MeineZeile.Font.Size = 10
Bei allen Varianten sollten Sie im Blick haben, dass ggf. vorhandene Formatierungen durch den Wechsel der Zeile überschrieben werden und auch beim Verlassen der Zeile nicht mehr zurückgesetzt werden. Prüfen Sie deshalb zunächst, ob in Ihrer Tabelle bereits Formatierungen vorhanden sind, die erhalten bleiben sollen. Arbeiten Sie z.B. bereits mit Fettdruck um bestimmte Zellwerte hervorzuheben, sollten Sie diese Variante nicht verwenden, sondern dann ggf. alternativ eher die Schriftfarbe ändern. Das gilt natürlich nur dann, wenn bisher keine unterschiedlichen Schriftfarben genutzt werden.
Beim Verlassen der Zeile wird diese immer auf die Standardwerte schwarze Schrift, keine Hintergrundfarbe, ohne Fettdruck oder Schriftgröße 10 zurückgesetzt. Je nachdem welche Variante des VBA Codes Sie in Ihrem Makro verwenden.
Weitere Anpassungsmöglichkeiten
Möglich ist jedoch auch eine Kombination mehrerer Varianten. Fügen Sie dann direkt untereinander die gewünschten Zeilen ein. Vergessen Sie auch hier immer das Gegenstück nicht um beim Verlassen der Zeile die Formatierung wieder zurückzusetzen.
Möchten Sie andere Farben für die Kennzeichnung nutzen, können Sie den zugehörigen Farbcode z.B. über die Aufzeichnung eines Makros ermitteln. Lesen Sie hierzu auch den Artikel Excel Makros mit dem Makro-Rekorder aufzeichnen
Inhalt der Zwischenablage sichern
Eine bekannte Einschränkung von Excel ist es, dass die Zwischenablage beim aktivieren einer Zelle gelöscht wird. Das gleiche gilt, wenn durch ein Makro Zellen verändert werden.
Möchten Sie also die Daten der Tabelle nicht nur lesen, sondern zum Beispiel auch Inhalte kopieren und einfügen ist noch eine Anpassung an der VBA Routine notwendig. Am Anfang des Makros muss zunächst der aktuelle Inhalt der Zwischenablage gesichert werden, damit er am Ende wieder in die Zwischenablage neu kopiert werden kann.
Der angepasste VBA Code enthält nun zusätzlich noch vor und nach der Ausführung der Markierung der aktuellen Zeile die Sicherung und Wiederherstellung der Zwischenablage.
WICHTIG: Die Zwischenablage wird im zweiten Tabellenblatt in Zelle A1 zwischengespeichert. Wenn in Ihrer Datei hier bereits Daten vorhanden sein sollen müssen Sie eine alternative Zelle für die Speicherung der Zwischenablage definieren!
Private MeineZeile As Range Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim markierteZeilen As Long markierteZeilen = Selection.Rows.Count If markierteZeilen <> 1 Then Exit Sub Else Sicherung_Zwischenablage If Not MeineZeile Is Nothing Then MeineZeile.Font.Bold = False Target.EntireRow.Font.Bold = True End If Set MeineZeile = Target.EntireRow If Tabelle2.Range("A1").Value <> "" Then Zwischenablage_Fuellen Tabelle2.Range("A1").Value Tabelle2.Range("A1").Value = "" End If End Sub
Die Funktionen Sicherung_Zwischenablage und Zwischenablage_Fuellen sind zusätzlich in ein Modul einzufügen.
Private Const CF_TEXT As Long = 1 Function Sicherung_Zwischenablage() Dim strZwischenablage As DataObject Set strZwischenablage = New DataObject strZwischenablage.GetFromClipboard If strZwischenablage.GetFormat(CF_TEXT) Then Tabelle2.Range("A1") = strZwischenablage.GetText End Function Function Zwischenablage_Fuellen(ByVal Text As Variant) As Boolean Zwischenablage_Fuellen = CreateObject("htmlfile").ParentWindow.ClipboardData.SetData("Text", Text) End Function
Mustermappen
Die erste Beispieldatei enthält das Grundmakro ohne Sicherung der Zwischenablage.
aktuelle_zeile_fett_hervorheben.xlsm
Wenn Sie den Inhalt der Zwischenablage sichern wollen, nutzen Sie alternativ die angepasste Version.
aktuelle_zeile_fett_hervorheben _mit_zwischenablage.xlsm
WICHTIG: Die Zwischenablage wird im zweiten Tabellenblatt in Zelle A1 zwischengespeichert. Wenn in Ihrer Datei hier bereits Daten vorhanden sein sollen müssen Sie eine alternative Zelle für die Speicherung der Zwischenablage definieren!
Ähm, die Änderung von normal zu fett bleibt aber dann permanent bestehen? Müsste man “meineZeile” nicht auch viel früher initialisieren?
@Alfred: Nein, beim Auswählen einer neuen Zeile wird die bisherige Markierung wieder aufgehoben und die neu ausgewählte Zeile fett hervorgehoben. Wird allerdings mehr als eine Zeile gleichzeitig markiert, wird das Makro nicht ausgeführt und es bleibt bei der markierten Zeile.
Einziges Manko, wird die Datei gespeichert wird die Zeile ggf. beim neuen Öffnen weiterhin fett dargestellt. Das könnte aber auch mit einem weiteren Makro in der Arbeitsmappe mit Private Sub Workbook_Open() abgefangen werden. Davon habe ich in dieser Beispieldatei jedoch abgesehen.
Hallo Marco,
den Trick habe ich inzwischen auch verstanden. Danke nochmals für das Makro, das insbesondere bei kleiner Schrift und umfangreichen Einträgen eine nützliche Hilfe ist.
Hallo Marco,
das Macro funktioniert prima…ich habe nun aber versucht, die Hervorhebung statt auf die ganze Zeile nur auf die Zellen in den Spalten A bis I zu beschränken, scheitere aber immer daran, dass das Zurücksetzen nicht klappt. Ist Dein Programmcode dafür evtl. gar nicht modulierbar?
Hallo zusammen,
wie müsste das Makro aussehen, wenn man nach “entmarkieren” der Zelle wieder das alte Format haben möchte?
Beispiel: Ich habe einige Zeilen, die rot markiert sind, einige grün. Klicke ich sie an, werden sie farblich hervorgehoben, werden danach aber grau. Kann man das Makro bearbeiten, dass das “alte” Format wieder hergestellt wird?
Hallo,
kann es sein, dass in der Beispieltabelle ein kopieren und einfügen von Daten nicht möglich ist, oder mache ich etwas falsch?
@André: Eine Besonderheit bei Excel ist es, dass der Zwischenspeicher beim aktivieren einer Zelle gelöscht wird. Das gleiche gilt, wenn durch ein Makro Zellen verändert werden. Dadurch verhindert das Makro in diesem Fall natürlich auch, dass zuvor in den Zwischenspeicher kopierte Daten eingefügt werden können. Sollen Daten kopiert werden, ist also das Makro für diese Zeit zu deaktivieren.
Danke für die Info Marco. Ich bin noch ein ziemlicher Anfänger was Excel und VBA betrifft, aber ich habe eine funktionierende Lösung für das Problem gefunden. Ich habe das Makro erweitert, so das jetzt zumindest Text aus der Zwischenablage am Anfang gesichert und am Ende wieder hergestellt wird.
Hallo André,
habe gerade genau das selbe Problem, das Makro ist super, aber kopieren funktioniert leider nicht mehr. Du hast dafür eine Lösung? Könntest du mir weiterhelfen?
@Daniel Zeit: Was man natürlich machen kann, ist am Anfang des Makros die Zwischenablage in eine bestimmte Zelle übertragen und am Ende das Makros daraus die Zwischenablage wieder zu befüllen.
Hallo Marco,
danke für die Antwort auf mein Problem,
leider bin ich noch ein echter Anfänger was Excel angeht.
Wie müsste das Makro dann aussehen? Kannst du da helfen?
@Daniel Zeit: Ich habe den Beitrag überarbeitet und eine Alternative mit Sicherung der Zwischenablage bereitgestellt.
Hallo, das ist eine super Idee, danke dafür.
Hi Marco,
vielen Dank fürs Teilen, genau was ich gesucht habe. Bekäme man es auch hin den Text fett UND farbig zu machen in der jeweiligen Zeile.
Herzlichen Dank vroab,
Kim