|
|
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:
- Drücken Sie die Tastenkombination ALT+F11,
um in die Entwicklungsumgebung von Excel zu gelangen.
- Im Projekt-Explorer führen Sie einen
Doppelklick auf den Eintrag "DieseArbeitsmappe" durch.
Damit haben Sie Zugriff auf alle Ereignisse der Arbeitsmappe.
- 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".
|
|