Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro verbessern - Hintergrundfarbe

Makro verbessern - Hintergrundfarbe
04.03.2020 11:48:24
Kisska
Hallo zusammen,
ich verwende dieses Makro, um die aktive Zeile und Spalte hervorzuheben:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Cells.Interior.ColorIndex = xlColorIndexNone
Target.EntireColumn.Interior.ColorIndex = 37
Target.EntireRow.Interior.ColorIndex = 37
Target.Interior.ColorIndex = xlColorIndexNone
End Sub
Leider werden die ursprüngliche Hintergrundfarben gelöscht, sobald man den aktiven Bereich verlässt.
Gefärbte Bereiche durch bedingte Formatierung werden von dem Makro nicht angesprochen.
Kann man das verbessern?
VG, Kisska

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro verbessern - Hintergrundfarbe
04.03.2020 13:12:39
MCO
Hallo Kisska!
bei neuer selection wird der alte Bereich "entfärbt", ein Gedächtnis für die alte Farbe gibt es nicht.
Bedingte Formatierung überspielt alle Grundfarben.
Vielleicht ist es für dich hilfreicher nicht mit Farben zu arbeiten, sondern die Bereiche zu rahmen...
Kannst du auch mit dem Macrorecorder aufzeichnen...
Gruß, MCO
das stimmt nicht
04.03.2020 15:27:35
Kisska
Hallo MCO,
danke für deine Antwort!
Ich denke, dass das Entfärben doch möglich ist.
Ich habe nämlich dieses Makro gefunden:
Option Explicit
Dim rngVorher As Range
Dim colVorher As Integer
Private Sub Worksheet_Deactivate()
If Not rngVorher Is Nothing Then rngVorher.Interior.ColorIndex = colVorher
Set rngVorher = Nothing
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not rngVorher Is Nothing Then rngVorher.Interior.ColorIndex = colVorher
colVorher = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 6  'Hintergrund Gelb
Set rngVorher = Target
End Sub 

Quelle: http://www.office-loesung.de/ftopic11718_0_0_asc.php
Ich weiß nur nicht, wie ich es auf mein Fall anwende. Es muss die aktive Zeile und Spalte hervorgehoben werden.
Mein Makro steht aktuell in "Diese Arbeitsmappe".
VG, Kisska
Anzeige
AW: das stimmt nicht
04.03.2020 16:27:31
guennih
Hallo Kisska,
mir ist noch nicht klar ob Du die Zelle, oder ein Kreuz aus Zeile und Spalte markieren willst.
bei kreuz würde das nur ohne vorherige Farbe funktionieren, und dann so aussehen:

Option Explicit
Dim rngVorher As Range
Private Sub Worksheet_Deactivate()
If Not rngVorher Is Nothing Then
rngVorher.entirerow.Interior.ColorIndex = xlColorIndexNone
rngVorher.entirecolumn.Interior.ColorIndex = xlColorIndexNone
end if
Set rngVorher = Nothing
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not rngVorher Is Nothing Then
rngVorher.entirerow.Interior.ColorIndex = xlColorIndexNone
rngVorher.entirecolumn.Interior.ColorIndex = xlColorIndexNone
Target.entirerow.Interior.ColorIndex = 6  'Zeile Gelb
Target.entirecolumn.Interior.ColorIndex = 6  'Spalte Gelb
Set rngVorher = Target
end if
End Sub

Anzeige
AW: das stimmt nicht
04.03.2020 17:44:51
Kisska
Hallo guennih,
ja genau, ich möchte eine Art Kreu-Hervorhebung haben.
Sobald ich eine Zelle anklicke, soll sowohl die Zeile als auch die Spalte, in denen sich diese Zelle befindet, durch eine Hintergrundfarbe hervorgehoben werden.
Leider passiert bei mir nichts, wenn ich dein Makro teste.
Übrigens passiert bei mir auch nichts bei dem vorher geposteten Makro. Das Makro funktioniert _ bei mir erst, wenn ich die Zeile

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 
durch

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ersetze.
VG, Kisska
Anzeige
AW: Makro verbessern - Hintergrundfarbe
05.03.2020 00:10:34
Oberschlumpf
Hi,
deine ursprünglichen Hintergrundfarben werden gelöscht, weil du den Befehl
Cells.Interior.ColorIndex = xlColorIndexNone

nutzt - xlColorIndexNone bedeutet = keine Hintergrundfarbe
Ich hab mal eine Bsp-Datei für dich erstellt:
https://www.herber.de/bbs/user/135625.xlsm
Der Bereich A1:M23 ist manuell mit grün gefärbt.
Wenn du in diesem Bereich eine beliebige Zelle auswählst (nur 1 Klick), wird die Zeile + Spalte, in der sich die angeklickte Zelle befindet, in gelb umgefärbt.
Klickst du nun eine andere Zelle an, wird zuerst der gesamte Bereich A1:M23 wieder in grün gefärbt.
Als nächstes folgt wieder die Einfärbung in gelb der Zeile + Spalte von neuer, ausgewählter Zelle...
...usw
Wie schon erwähnt wurde, ist das manuelle oder per Makro durchgeführte Einfärben von Zellen, die einer bedingten Formatierung unterliegen, nicht möglich.
Sollte das doch möglich sein, ist zumindest mir nicht bekannt, wie man bedingte Formatierungen umgehen kann.
Kommt meine Bsp-Datei denn dem nahe, was du erreichen willst?
Ciao
Thorsten
Anzeige
AW: Makro verbessern - Hintergrundfarbe
05.03.2020 20:28:02
Kisska
Hallo Thorsten,
danke für deine Unterstützung!
Wenn ich die Zeile

Cells.Interior.ColorIndex = xlColorIndexNone
weglasse, dann wird überall eingefärbt, wo ich reinklicke und die Farbe bleibt auch dann wenn ich die Zelle verlasse.
Dein Beispiel finde ich sehr interessant. Hätte nicht gedacht, dass man nur in einem bestimmten Bereich hervorheben kann. So toll dieses Beispiel auch ist, ich benötige das Hervorheben über das gesamte Blatt eines beliebigen Tabellenblatts, also die komplette Zeile und Spalte.
Ich habe sehr lange rumprobiert, aber ich schaffe es nicht, umzusetzen.
Kannst du helfen?
VG, Kisska
Anzeige
AW: Makro verbessern - Hintergrundfarbe
05.03.2020 20:34:55
Oberschlumpf
Hi,
Kannst du helfen?
Weiß ich nicht.
Gegenfrage: Kannst du - per Upload - eine Bsp-Datei zeigen, die vom Aufbau her genau so wie dein Original aussieht?
Ciao
Thorsten
AW: Makro verbessern - Hintergrundfarbe
07.03.2020 14:44:48
Kisska
Hallo Thorsten,
bitte entschuldige die verspätete Antwort.
Ein Upload der Datei ist nicht nötig, da das Beispiel zu einfach ist.
Datei besteht aus 3 leeren Tabellenblättern, in der Zeile 1 stehen jeweils die Überschriften, in der Spalte A jeweils Nummern (1 bis 300). Einige der Überschriften haben eine Hintergrundfarbe. In einem Tabellenblatt gibt es die bedingte Formatierung, dass wenn irgendeine Zelle den Textinhalt "storniert" enthält, diese Zeile dann grau hinterlegt wird.
Ich habe dieses Makro gefunden:
Option Explicit
'   erstellt von Hajo.Ziplies@web.de 14.12.02; 29.04.03, 10.10.03, 14.03.04
' http://home.media-n.de/ziplies/
'   gesamte Zeile markieren
'   alte Farbe wieder zur?ckstellen bei wechsel und schliessen
'   farbver?nderungen im markiertem Bereich werden nicht zur?ck gestellt, au?er Rot
'   Abschalten durch Doppelklick
'   Modifiziert von JFreudens
'   Durch Auswertung von Activewindow.ActivePane.VisibleRange
'   wird der Aufwand deutlich reduziert. Es wird jetzt ein "Fadenkreuz" eingef?rbt
Dim StWert() As String ' 1=Farbe der Zelle; 2=Zelle; 3= Register
' Dimensionierung erfolgt sp?ter in Abh?ngigkeit der Anzahl der sichtbaren
' Zellen des Fadenkreuzes
Dim InI As Integer
'   Merker ob Markierung eingeschaltet, geschieht durch Doppelklick
Dim BoAktion As Boolean
Dim ByFarbe As Byte      ' Farbe Markierung
Private Sub Workbook_Open()
ByFarbe = 34 '3 = rot, 4 = hellgr?n, 5 = blau, 15 = grau, 34 = helblau
'   nach Hinweis von Peter Haserodt Vergleich eingef?gt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Auslesen
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If BoAktion = True Or Target.Count > 1 Then Exit Sub
Zur?ck                                                          ' Farben zur?ckstellen
'   nach Hinweis von Peter Haserodt Vergleich eingef?gt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Auslesen            ' Farben der aktuellen  _
Zeile auslesen
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If BoAktion = True Then Exit Sub
'   nach Hinweis von Peter Haserodt Vergleich eingef?gt ob Tabelle
If TypeName(ActiveSheet) = "Worksheet" Then Zur?ck
End Sub
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'   falls Farbe beim Druck wieder zur?ckgestellt werden soll
'   nach Druck ist die aktuelle Zelle nicht markiert
If BoAktion = True Then Exit Sub
'   nach Hinweis von Peter Haserodt Vergleich eingef?gt
If TypeName(ActiveSheet) = "Worksheet" Then Zur?ck
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
BoAktion = False
Zur?ck
'   Nur Bestimmte Zeilen
'   nach Hinweis von Peter Haserodt Vergleich eingef?gt
If TypeName(ActiveSheet) = "Worksheet" Then Auslesen
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If BoAktion = True Then Exit Sub
If TypeName(ActiveSheet) = "Worksheet" Then Zur?ck
End Sub
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel  _
As Boolean)
BoAktion = Not BoAktion
If BoAktion = True Then
'       nach Hinweis von Peter Haserodt Vergleich eingef?gt
If TypeName(ActiveSheet) = "Worksheet" Then Zur?ck
Else
If TypeName(ActiveSheet) = "Worksheet" Then Auslesen
End If
Cancel = True
End Sub
Sub Zur?ck()
On Error GoTo Ende_Zur?ck
If StWert(1, 1, 1)  "" Then
'        Worksheets(StWert(1, 3, 3)).Unprotect
For InI = 1 To UBound(StWert, 1)
If Worksheets(StWert(InI, 3, 3)).Range(StWert(InI, 2, 2)).Interior.ColorIndex =  _
ByFarbe Then
Worksheets(StWert(InI, 3, 3)).Range(StWert(InI, 2, 2)).Interior.ColorIndex =  _
CInt(StWert(InI, 1, 1))
End If
Next InI
'        Worksheets(StWert(1, 3, 3)).Protect
End If
Ende_Zur?ck:
End Sub
Sub Auslesen()
'    ActiveSheet.Unprotect
Dim FadenKreuz As Range
Dim Zelle As Range
' Bestimmt den Fadenkreuz-Bereich, der durch die aktive Zelle definiert wird.
' Anschlie?end wird der bereich beschnitten, um nur die zellen des Fadenkreuzes
' zu behalten, die derzeit sichtbar sind
Set FadenKreuz = Intersect(Union(ActiveCell.EntireRow, ActiveCell.EntireColumn), _
ActiveWindow.ActivePane.VisibleRange)
ReDim StWert(1 To FadenKreuz.Cells.Count, 3, 3)
InI = 0
For Each Zelle In FadenKreuz.Cells
InI = InI + 1
StWert(InI, 1, 1) = Zelle.Interior.ColorIndex
StWert(InI, 2, 2) = Zelle.Address
StWert(InI, 3, 3) = ActiveSheet.Name
If Zelle.Interior.ColorIndex = xlNone Then
Zelle.Interior.ColorIndex = ByFarbe
End If
Next
'    ActiveSheet.Protect
End Sub

Quelle: https://www.herber.de/forum/archiv/820to824/823442_Fadenkreuz_fuer_aktive_Zelle.html
Der Code ist viel komplexer als bei dir und wahrscheinlich brauche ich viel weniger davon, aber es geht in die Richtung, was ich es haben möchte und zwar:
Egal in welcher Zelle ich mich befinde, soll ein Fadenkreuz zur Hervorhebung temporär gemacht werden, und zwar über das gesamte aktive Tabellenblatt. Hier im Code ist der Fadenkreuz leider abgeschnitten.
Wichtig ist mir, dass vorherigen Hintergrundfarben nicht gelöscht werden bzw. neu gefärbte Zellen ihre Farbe nicht verlieren.
VG, Kisska
Anzeige
ich kenne keine Lösung
07.03.2020 14:50:18
Oberschlumpf
Hi,
Ein Upload der Datei ist nicht nötig, da das Beispiel zu einfach ist.
Na, wenn das Bsp so (zu) einfach ist, dann kriegst du die Lösung doch hin.
Ich zumindest mag - ohne eine Bsp-Datei von dir! - nicht den ganzen, von dir gezeigten Code, überprüfen . ohne - dass ich eine (Bsp-Datei)Möglichkeit zum Testen habe.
Und noch mal werde ich für dich nicht eine Datei erstellen.
Weiter noch viel Erfolg.
Ciao
Thorsten
P.S...jetzt brauch ich auch keine Bsp-Datei mehr...
AW: Makro verbessern - Hintergrundfarbe
10.03.2020 09:56:00
guennih

Wichtig ist mir, dass vorherigen Hintergrundfarben nicht gelöscht werden bzw. neu gefärbte Zellen ihre Farbe nicht verlieren.

Das ist ein prinzipielles Problem, und für mich ein NoGo
Dazu müsstest Du von jeder betroffen Zelle die Formate zwischenspeichern, und bei Verschiebung des Fadenkreuzes wiederherstellen.
Excel hat viele Spalten und Zeilen....
Wenn Du eine Formateigenschaft hast, die sonst nicht benutzt wird kannst Du die Ein- und Ausschalten, und es sieht so aus, wie Du meinst, auch wenn es was anderes ist.
vielleicht das Muster?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige