Excel aktive Zeile farblich markieren ohne VBA?

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.

abdun 
Fragesteller
 16.12.2020, 09:20

Ich habe nun folgendes gemacht:

  1. Eine bedingte Formatierung erstellt über die Zellen A4:Q100000. Die Formel zur Ermittlung der zu formatierenden Zellen ist:
=$A$1=ZEILE()

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?

 =ZEILE(INDIREKT(ZELLE("adresse");1))

3 . Den VBA Code genau so wie oben geschrieben eingefügt:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, ActiveSheet.Range("A4:Q10000")) Is Nothing Then
 Calculate
End If

End Sub

Resultat: Wenn ich Zellen anklicke, passiert gar nichts. Wo ist mein Fehler?

1
DanKirpan  16.12.2020, 09:46
@abdun

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

  1. die aktive Zelle befindet sich unterhalb des benutzten Bereichs (Strg+Ende springt zur letzten Zelle in diesem)
  2. die aktive Zelle liegt im benutzten Bereich und eine beliebige Zelle der Zeile wurde bereits irgendwann genutzt (also beschrieben, Farbe geändert, etc)
2
abdun 
Fragesteller
 16.12.2020, 13:49
@DanKirpan

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.

1
DanKirpan  16.12.2020, 14:18
@abdun

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.

3
DanKirpan  25.01.2021, 08:50
@abdun

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.

0

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:

https://docs.microsoft.com/de-de/office/vba/excel/concepts/cells-and-ranges/highlight-the-active-cell-row-or-column

abdun 
Fragesteller
 15.12.2020, 20:55

Danke, jedoch bringen die VBAs nichts. Denn immer wenn ein VBA Code abgespielt wird, verschwindet die "Rückgängig" Taste. Daher funktioniert das nicht.

1

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

abdun 
Fragesteller
 16.12.2020, 09:33

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.

1
IchMalWiederXY  16.12.2020, 13:04
@abdun

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.

1
abdun 
Fragesteller
 16.12.2020, 13:50
@IchMalWiederXY

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.

1