Excel aktive Zeile farblich markieren ohne VBA?
Ich habe laut einer Anleitung auf YouTube
Hier ist der Link
Kurzgefasst wird dort in einem bestimmten Bereich eine Bedingte Formatierung gemacht, mit der Formel:
=$A$1=ZEILE()
Hierzu wird noch ein VBA Code gebraucht:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("$A$4:$Q$10000")) Is Nothing Then
Range("$A$1").Value = Target.Row
End If
End Sub
Resultat:
Die Zeile der aktiven Zelle wird nun farblich markiert.
Frage:
Mir ist nun aufgefallen, dass ja jedes mal wenn irgendwo geklickt wird der VBA Code abgespielt wird. Dementsprechend kann man die Vorwärts und Rückwärts Buttons nicht mehr verwenden :(
Dies ist leider sehr unpraktisch. Ich habe in die Zellen etwas eingefügt und wollte dann es rückgängig machen und nicht mal das geht.
Daher die Frage, gibt es hier ein Workaround? Oder eventuell eine ganz andere Lösung ohne VBA?
Danke vorab
3 Antworten
Wie IchMalWiederXY bereits geschrieben hat, werden die Buttons unbrauchbar, wenn eine Zelle per VBA geändert wird. Man braucht in deinem Fall also eine Möglichkeit die Zeile der aktiven Zelle per Formel zu ermitteln. (Die Einfärbung kann weiter über die bedingte Formatierung erfolgen) Das was dem Auslesen der Zeile am Nächsten kommt ist:
- in A1: =ZEILE(INDIREKT(ZELLE("adresse");1))
Sie funktioniert aber nur korrekt wenn das Blatt beim Auswählen neu berechnet wird, dazu reicht eine Anpassung deines bisherigen Codes:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, ActiveSheet.Range("A4:Q10000")) Is Nothing Then
Calculate
End If
End Sub
Da keine Zelle mehr geändert wird, funktionieren Rückgängig und Wiederholen weiterhin.
Zelle("adresse") ist so richtig. ZELLE(Infotyp; Bezug) gibt Informationen zu einer Zelle aus, "adresse" ist der gewünschte Infotyp und ohne Bezugsangabe wird die zuletzt geänderte Zelle verwendet.
Da ich sonst keinen Fehler sehe (ich nehme an du hast den Code im richtigen Blatt eingefügt), habe ich es selbst nochmal getestet. Mit einem sehr seltsamen Ergebnis:
Es funktioniert in 2 Fällen korrekt
- die aktive Zelle befindet sich unterhalb des benutzten Bereichs (Strg+Ende springt zur letzten Zelle in diesem)
- die aktive Zelle liegt im benutzten Bereich und eine beliebige Zelle der Zeile wurde bereits irgendwann genutzt (also beschrieben, Farbe geändert, etc)
Danke für deine Bemühung!
Meine Excelsheet schien schon zu vorbelastet zu sein. Ich habe es nun hingekriegt, wie du es beschrieben hast. Die Merkwürdigkeit ist mir ebenfalls zuvor aufgefallen. Stört jedoch weiter nicht. Denn sobald in der Zelle etwas steht, funktioniert es einigermaßen zuverlässig.
Der Rückgängig Button funktioniert nun auch. Echt super dein Workaround! :)
Nur eine Sache ist mir aufgefallen, welches ich beheben müsste, da ich hierauf nicht verzichten kann in der Tabelle. Undzwar kann ich nichts mehr einfügen. Sowohl mit Maus als auch mit STRG+V.
Kopieren geht jedoch.
Bitte :D
:? Das Aktualisieren bricht den Kopiermodus ab (wusste ich vorher auch noch nicht). Also fragen wir doch einfach nach ob der Kopiermodus aktiv ist, bevor wir aktualisieren und tun das dann nicht:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, ActiveSheet.Range("A4:Q10000")) Is Nothing Then
If Application.CutCopyMode = False Then
Calculate
End If
End If
End Sub
Das Hervorheben funktioniert dann natürlich nicht während du gerade kopierst, aber beides gleichzeitig zu ermöglichen wird komplizierter bis nicht möglich.
Vielen Dank hierfür.
Hat alles funktioniert.
Wäre super wenn du ein Blick in meine folgende Frage reinwerfen könntest:
https://www.gutefrage.net/frage/excel--vba-zur-vorherigen-aktiven-zelle-springen
Hallo,
ich war am WE nicht aktiv und hab jetzt reingesehen. Die dort geschriebene Antwort sieht bereits nach einer guten Lösung aus. Es tritt lediglich ein Fehler auf wenn noch nicht mindestens 2 Felder aktiv gewesen sind, weil dann noch nicht beide Variablen gefüllt sind.
Wenn man die Zeilenüberschrift anklickt, wird die Zeile auch farblich hervorgehoben. Weitere "einfache" Möglichkeiten sind mir nicht bekannt. Wenn es um die einfachere Orientierung geht, kann man auch die Tabelle abwechselnd farbig darstellen lassen. Hilft auch.
Ansonsten diese VBA-Beispiele testen:
Danke, jedoch bringen die VBAs nichts. Denn immer wenn ein VBA Code abgespielt wird, verschwindet die "Rückgängig" Taste. Daher funktioniert das nicht.
Der Rückgängig Button verschwindet weil du etwas auf die Zeile schreibst. (oder ggf auch die Farbe veränderst)
Range("$A$1").Value = Target.Row
Du willst doch die Zeile einfärben, oder ?
==
Grundsätzlich kann man auch mit VBA Dinge rückgängig machen:
Application.EnableEvents = False
Call Application.Undo
Application.EnableEvents = True
Ja, ich möchte die Zeilenränder farbig darstellen, sobald eine Zelle in dieser Zeile ausgewählt ist. Dies dient halt zur besseren Orientierung. Die Ränder werden natürlich nicht fest auf die Farbe gesetzt, sondern nur solange die Zelle angeklickt ist.
--
Den VBA Code für Undo verstehe ich nicht. Habe diesen einfach mal auf ein Button gelegt, funktioniert jedoch nicht.
wenn man per VBA eine Zelle ändert. z.B: Im ChangeEvent:
Range("A1").Value = "bla"
Dann kann man mit diesem Code:
Application.EnableEvents = False
Call Application.Undo
Application.EnableEvents = True
dies wieder rückgängig machen.
Wenn du den Eingabe Fokus auf der gewählten zeile haben willst dann könnte man auch per VBA die Zeilenhöhe von meist 12 auf 18 ändern.
Dies sollte den Rückgängig Knopf nicht beeinflussen.
Schade. Rowheight Änderung macht den "Rückgängig Knopf auch blass.
Danke für deine Bemühung. Der "DanKarpin" hat zu meiner Frage eine interessante Antwort geliefert. Findest du weiter unten. Klappt auch ganz gut. Jedoch verschwindet da die "Einfügen" Option. Sowohl per Maus als auch per STRG+V.
Habe das Problem ihm geschildert, mal schauen ob er eine Lösung hat.
Ich habe nun folgendes gemacht:
2 . Wie du oben geschrieben hast, habe ich in Zelle "A1" folgendes eingefügt. Bitte beachte, dass ich "adresse" so belassen habe, da ich den Code nicht genau verstehe. Oder war gemeint, dass ich die "adresse" ausfüllen muss? Wenn ja, dann mit was? Mit der zur Formatierenden Zellen, also A4:Q100000?
3 . Den VBA Code genau so wie oben geschrieben eingefügt:
Resultat: Wenn ich Zellen anklicke, passiert gar nichts. Wo ist mein Fehler?