Tipps "n" Tricks
Anwender-Software - Excel

Der dynamische Mauszeiger

Thema:

Excel 97, 2000 und 2002
Standardmässig wird die momentan aktive Zelle in einer Tabelle markiert. Diese Zelle wird dann mit einem Rahmen umgeben, der wieder verschwindet, wenn Sie den Mauszeiger an eine andere Stelle der Tabelle bewegen. Gerade in sehr grossen Tabellen wäre es übersichtlicher, wenn mit der aktiven Zelle gleich die gesamte Zeile markiert werden würde. Besser noch, die jeweils aktive Zeile müsste in einer helleren Hintergrundfarbe ausgegeben werden. Dabei darf die Färbung nicht zu dunkel sein, um die Daten noch lesbar zu halten. Der farbige Zeilen-Mauszeiger müsste dann jeweils wandern, wenn Sie eine andere Zelle aktivieren. Das bedeutet, dass Sie ein wenig mit den Hintergrundfarben spielen müssen. Beim folgenden Beispiel habe ich mich für die Hintergrundfarbe Hellgrau entschieden, die den eindeutigen Farbindex 15 hat. Da dieser Mechanismus für alle Tabellen der Arbeitsmappe gelten soll, können Sie ein Arbeitsmappen-Ereignis dafür einsetzen:
  1. Drücken Sie die Tastenkombination ALT+F11, um in die Entwicklungsumgebung von Excel zu gelangen.
  2. Im Projekt-Explorer führen Sie einen Doppelklick auf den Eintrag "DieseArbeitsmappe" durch. Damit haben Sie Zugriff auf alle Ereignisse der Arbeitsmappe.
  3. Erfassen Sie das folgende Ereignismakro:
Private Sub Workbook_SheetSelectionChange( _
ByVal sh As Object, ByVal Target As Excel.Range)

Static AlteZelle As Range

  If Not AlteZelle Is Nothing Then
    AlteZelle.EntireRow.Interior.ColorIndex = _
    xlColorIndexNone
  End If

  Target.EntireRow.Interior.ColorIndex = 15
  Set AlteZelle = Target
End Sub


Dieses Ereignis überwacht alle Mausbewegungen in Ihren Tabellen. Immer wenn Sie den Mauszeiger in einer Tabelle verschieben, sei es mit der Maus oder mit den Pfeiltasten der Tastatur, wird diese Veränderung von Excel registriert. Über die Eigenschaft ColorIndex weisen Sie jeweils den Grauwert zu, wenn die Zeile gefärbt werden soll. Sie entfärben davor die bereits vorher gefärbte Zeile, indem Sie die Konstante xlColorIndexNone der Eigenschaft ColorIndex zuweisen.

Noch ein kleiner Tip: Möchten Sie zusätzlich in der Statusleiste sehen, wie sich Ihr Mauszeiger gerade befindet, dann bauen Sie die folgende Anweisung direkt nach der Einfärbung der Zeile in Ihr Ereignis ein:

Application.StatusBar = Target.Address

Weitere Möglichkeit:

Unser Kolumnist Bernd Held hat mit seinem "Dynamischen Mauszeiger" aus Ausgabe 47/2001 eine kleine Lawine losgetreten, denn es folgte eine Flut von Leseranfragen. Viele hatten schon lange nach genau so einer Lösung gesucht, aber sie waren mit der Umsetzung noch nicht so ganz zufrieden. Wir haben uns die Anregungen zu Herzen genommen und möchten Ihnen in dieser Ausgabe eine optimierte Version des dynamischen Mauszeigers vorstellen, die unter tatkräftiger Mitwirkung von Günther Abel und Bernd Held zustande gekommen ist.

Kurz zur Erinnerung: der dynamische Mauszeiger sorgt dafür, dass Excel automatisch die Zeile in der aktuellen Tabelle gelb hinterlegt, in der sich der Zellzeiger zur Zeit befindet. Die Orientierung in umfangreichen Kalkulationsmodellen und Listen wird damit zum Kinderspiel. Im wesentlichen gab es dabei zwei Probleme:
  • Vorhandene Schattierungen in der Tabelle gingen verloren
  • Die Funktionen zum Kopieren und Ausschneiden stehen nicht zur Verfügung
Die neue Lösung wurde daher so konzipiert, dass sie vor dem Markieren einer Zeile die vorhandenen Schattierungen speichert und später wiederherstellt. Ausserdem lässt sich die Funktion jetzt nach Belieben ein- und wieder ausschalten. Kopieren Sie dazu den folgenden Code in ein neues Modul der Arbeitsmappe, in der Sie die Funktion nutzen möchten:

Dim ranAltBereich As Range
Dim lngColorIndex(1 To 256) As Long
Dim bolDynMauszeiger As Boolean

Sub MarkierungEin(ByVal Target As Excel.Range)
  Dim ranZelle As Range
  Dim x As Integer

  If bolDynMauszeiger = False Then Exit Sub

  If Not ranAltBereich Is Nothing Then
    x = 0
    On Error Resume Next

    For Each ranZelle In ranAltBereich
      x = x + 1
      ranZelle.Interior.ColorIndex = lngColorIndex(x)
    Next

  End If

  Set ranAltBereich = _
  Range("A" & Target.Row & ":IV" & Target.Row)
  x = 0

  For Each ranZelle In ranAltBereich
    x = x + 1
    lngColorIndex(x) = _
    ranZelle.Interior.ColorIndex
  Next

  
Target.EntireRow.Interior.Color = RGB(255, 255, 200)

End Sub

Sub MarkierungAus()
  Dim x As Integer
  Dim ranZelle As Range

  If Not ranAltBereich Is Nothing Then
    x = 0

    For Each ranZelle In ranAltBereich
      x = x + 1
      ranZelle.Interior.ColorIndex = lngColorIndex(x)
    Next

  End If
End Sub

Sub MauszeigerEinschalten()
  bolDynMauszeiger = True
End Sub

Sub MauszeigerAusschalten()
  MarkierungAus
  bolDynMauszeiger = False
End Sub


Die Prozedur "MarkierungEin" sorgt dafür, dass dieSchattierungen der bisherigen Zeile wiederhergestellt, die Einstellungen der neuen Zeile gespeichert und die gelbe Hinterlegung zugewiesen wird. "MarkierungAus" kommt beim Deaktivieren der Funktion und beim Schliessen der Arbeitsmappe zum Einsatz: die alten Schattierungen werden wiederhergestellt.

Das Ein- und Ausschalten des Mauszeigers steuert die globale Variable "bolDynMauszeiger", die über die beiden kleinen Prozeduren am Ende des Listings gesetzt wird. Damit schliesslich die Markierung bei jedem Verschieben des Mauszeigers neu gesetzt und beim Schliessen der Arbeitsmappe entfernt wird, verwenden Sie die beiden folgenden Prozeduren, die unbedingt in das Modul von "DieseArbeitsmappe" eingefügt werden müssen:

Private Sub Workbook_SheetSelectionChange(ByVal sh _
As Object, ByVal Target1 As Excel.Range)
  MarkierungEin Target1
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  MarkierungAus
End Sub


Zum schnellen Zugriff auf den dynamischen Mauszeiger erstellen Sie nun noch zwei neue Symbole, die die Prozeduren "MauszeigerEinschalten" und "MauszeigerAusschalten" aufrufen".

 

Tipps "n" Tricks
Anwender-Software - Excel