Was ich erreichen möchte, ist die aktive Zeile oder Spalte hervorzuheben. Ich habe VBA-Lösungen verwendet, aber bei jedem Selection_change
-Ereignis verliere ich die Möglichkeit, Änderungen in meinem Arbeitsblatt rückgängig zu machen.
Gibt es eine Möglichkeit, die aktive Zeile/Spalte irgendwie hervorzuheben, ohne VBA zu verwenden?
Ich denke nicht, dass dies ohne VBA möglich ist, aber can kann ohne Rückgängig-Historie erledigt werden
Fügen Sie Ihrem Arbeitsblattobjekt in VBA Folgendes hinzu:
Public SelectedRow as Integer
Public SelectedCol as Integer
Private Sub Worksheet_SelectionChange(ByVal Target as Range)
SelectedRow = Target.Row
SelectedCol = Target.Column
Application.CalculateFull ''// this forces all formulas to update
End Sub
Erstellen Sie ein neues VBA-Modul und fügen Sie Folgendes hinzu:
Public function HighlightSelection(ByVal Target as Range) as Boolean
HighlightSelection = (Target.Row = Sheet1.SelectedRow) Or _
(Target.Column = Sheet1.SelectedCol)
End Function
Verwenden Sie schließlich die bedingte Formatierung, um Zellen basierend auf der Formel 'HighlightSelection' hervorzuheben:
Das Beste, was Sie bekommen können, ist die Verwendung der bedingten Formatierung.
Erstellen Sie zwei formelbasierte Regeln:
=ROW()=CELL("row")
=COLUMN()=CELL("col")
Wie gezeigt in:
Der einzige Nachteil ist, dass Sie jedes Mal, wenn Sie eine Zelle auswählen, Ihr Blatt neu berechnen müssen. (Sie können "F9" drücken)
Sie können die aktuelle Zeile vorübergehend markieren (ohne die Auswahl zu ändern), indem Sie Shift+Space
Drücken. Aktuelle Spalte mit Ctrl+Space
.
Scheint in Excel, Google Sheets, OpenOffice Calc und Gnumeric zu funktionieren (alle Programme, in denen ich es ausprobiert habe). (Vielen Dank an https://productforums.google.com/forum/#!topic/docs/gJh1rLU9IRA für diesen Hinweis.)
Leider nicht so gut wie die formelbasierten und makrobasierten Lösungen (die bei mir übrigens auch funktionierten), da die Hervorhebung beim Bewegen des Cursors verschwindet, aber es ist auch nicht mühsam, sie jedes Mal einzurichten oder eine zu erstellen Vorlage damit (was ich nicht zur Arbeit bekommen konnte).
Außerdem habe ich festgestellt, dass Sie die bedingte Formatierungsformel (für Excel) aus den anderen Lösungen in eine einzige Formel für eine einzige Regel wie folgt vereinfachen können:
=OR(CELL("col")=COLUMN(),CELL("row")=ROW())
Wenn Sie dies auf diese Weise tun, müssen die hervorgehobene Spalte und Zeile dieselbe Formatierung verwenden. Dies ist jedoch in den meisten Fällen mehr als ausreichend und erfordert weniger Arbeit. (Danke an https://trumpexcel.com/highlight-active-row-column-Excel/ für die Kurzformel)
Erstmal Danke! Ich hatte gerade eine Lösung mit Hervorheben von Zellen erstellt, mit Selection_Change und dem Ändern eines Zelleninhalts. Ich wusste nicht, dass es Rückgängig machen würde. Ich habe einen Weg gefunden, dies zu tun, indem ich bedingte Formatierungen, Cell () und das Selection_Change -Ereignis kombiniere. So habe ich es gemacht.
Range("A1").Calculate
. Auf diese Weise wird es jedes Mal ausgeführt, wenn sich der Benutzer bewegt, und da Selection_Change KEINE Werte/Formate usw. im Arbeitsblatt ändert, ist Undo nicht deaktiviert. Das funktioniert für mich.
Eine Alternative zu Range.Calculate
ist die Verwendung von ActiveWindow.SmallScroll
Der einzige Nachteil ist, dass der Bildschirm nach einer neuen Auswahl für einen Sekundenbruchteil flimmert. Wenn Sie manuell scrollen, müssen Sie sicherstellen, dass die neue Auswahl aus dem Bildschirm (Fenster) verschoben wird ) vollständig, damit es funktioniert. Aus diesem Grund müssen Sie im folgenden Code so weit scrollen, dass alle sichtbaren Zeilen aus der Bildschirmansicht entfernt werden, und dann zurück an dieselbe Position scrollen, um eine Bildschirmaktualisierung für die bedingte Formatierung zu erzwingen.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ScreenUpdating = False
ActiveWindow.SmallScroll Down:=150 'change these values to total rows displayed on screen
ActiveWindow.SmallScroll Down:=-150 'change these values to total rows displayed on screen
'DoEvents 'unable to use this to remove the screen flicker
ScreenUpdating = True
End Sub
Credits: Rory Archibald https://www.experts-exchange.com/questions/28275889/When-is-Excel-conditional-formatting-refreshed.html
Rufen Sie auf dem Sheet Selection_change-Ereignis Folgendes auf:
Function highlight_Row(rngTarget As Range)
Dim strRangeRow As String
strRangeRow = rngTarget.Row
strRangeRow = strRangeRow & ":" & strRangeRow
Rows(strRangeRow).Select
rngTarget.Activate
End Function
Dies ist ein langes Format für Klarheit!
Bei der bedingten Formatierung kann nicht die gesamte Zeile und Spalte hervorgehoben werden, sondern es ist möglich, die Zeile links von der Zelle und die Spalte über der Zelle mit dem folgenden Code hervorzuheben:
=OR(AND(CELL("col")=COLUMN();(CELL("row")-1)>=ROW());AND(CELL("col")>=COLUMN();(CELL("row")-1)=ROW()))