Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Aktive Zelle farbig - bestehende Formatierung bleibt





Frage

Hallo an alle Hab ein Problem mit einer VBA. Ich möchte in der Aktiven Zelle eine andere Farbe. In diesem Fall Grün. Soweit so gut aber durch die Zeile Cells.Interior.ColorIndex = xlNone löscht er mir mein mehrfarbig Formatiertes Blatt. Gibt es einen Code in der nur die Aktive Zelle farbig geändert wird und nicht jedesmal danach mein ganzes Blatt Weiß wird, sondern so bleibt wie es ist? Wäre echt schön wenn mir jemand weiterhelfen kann. Hier nochmal der komplette Code... Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range) Static Zelle As Range If Not Zelle Is Nothing Then Cells.Interior.ColorIndex = xlNone End If Target.Interior.ColorIndex = 4 ' Grün Set Zelle = Target End Sub Schon mal Vielen Dank... MfG Fischi

Antwort 1 von coros

Hi Fischi,

das geht. Da das aber etwas umfangreicher ist, habe ich Dir mal eine Beispieldatei hochgeladen, die Du hier und dort dann die Datei Zeilen werden farblich markiert wenn angewaehlt ansehen kannst. Wenn Du Fragen haben solltest, dann melde Dich.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Fischi40

Hallo Coros und alle anderen am Bildschirm,

Deine Beispielddatei ist echt super. Leider ist es mir nicht gelungen den letzten Teil so umzuschreiben das er mir nur eine einzelne Zelle andersfarbig formatiert (die aktive Zelle). Ausserdem funktioniert das Makro nicht bei eingeschaltenten Blattschutz (habe ein paar freigegebene Zellen in den Eingaben gemacht werden sollen) die anderen aber sind gesperrt.

Ist eben doch etwas umfangreicher...

Wäre schön wenn mir jemand weiterhelfen könnte

MfG Mario

Antwort 3 von schnallgonz

Hallo Fischi40

sieht doch ganz gut aus, nimm oben ein bisschen weg und schreib unten was dazu, sieht dann so aus:


Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Static Zelle As Range
If Not Zelle Is Nothing Then
Cells.Interior.ColorIndex = xlColorIndexNone
End If
Target.Interior.ColorIndex = 4 ' Grün
Set Zelle = Target
End Sub


Viel Spaß mit Deiner grünen aktiven Zelle

mfg
schnallgonz

Antwort 4 von coros

Moin Fischi,

da habe ich doch überlesen, dass nur die aktive Zelle die Farbe ändern sollte. Dann geht das auch etwas einfacher als in der Beispieldatei mit einer gesamten Zeile. Eine Lösung hast Du ja schon von @schnallgonz, allerdings stellt diese Lösung die alte Zellefarbe, wenn Zelle schon mal gefärbt war, nicht wieder her. Daher hier noch eine andere Lösung. Kopierde den Code in das VBA Projekt der Tabelle, in der er wirken soll.

Option Explicit
Dim AlteFarbe As Integer, MarkierteZelle As String

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Count > 1 Then Exit Sub
ActiveSheet.Unprotect "Test"
If MarkierteZelle = "" Then
MarkierteZelle = Target.Address
AlteFarbe = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 4
Else
If Range(MarkierteZelle).Interior.ColorIndex = 4 Then
Range(MarkierteZelle).Interior.ColorIndex = AlteFarbe
End If
AlteFarbe = Target.Interior.ColorIndex
MarkierteZelle = Target.Address
Target.Interior.ColorIndex = 4
End If
ActiveSheet.Protect "Test"
End Sub


Bei dem Code wird die aktive Zelle grün gefärbt. Hatte die Zelle vorher schon eine andere Hintergrundfarbe (was sie ja eigentlich immer hat, auch wenn sie weiß bzw. farblos ist), wird diese bei verlassen der Zelle wieder hergestellt.

Ich hoffe, die Lösung hilft Dir. Bei Fragen, melde Dich wieder.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 5 von Fischi40

Hallo an alle,

Hallo coros,

der Code funzt super nur leider habe ich vergessen zu erwähnen das die meisten Zellen in denen Eingaben gemacht werden im Zellverbund mit 2,3 oder mehr Zellen liegen und da wird dann nicht die Farbe geändert.

Ist das dann überhaupt noch möglich?








Antwort 6 von coros

Nabend Fischi,

wenn Du mit verbundenen Zellen arbeitest, ist das so eine Sache mit VBA. Denn VBA und verbundene Zellen sind sich spinne Feind. Im Moment fällt mir da auch keine richtige Lösung ein. Das einzige wäre, wenn die Zellen verbunden sind, ermitteln, um wieviele Zellen es sich handelt, die da verbunden sind. Bei denen dann den Verbund aufheben, einfärben und dann wieder zu verbinden. Das alles kann man mit VBA machen, aber so auf die schnelle weiß ich auch nicht, ob das dann reibungslos funktioniert. Sollte ich am Wochende Zeit haben, kann ich mal versuchen da einen Code zu erstellen.

Sorry, dass ich Dir im Moment nicht weiterhelfen kann.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 7 von coros

Hi Fischi,

also manchmal ist man richtig blind. Wenn Du die erste Zeile aus dem Code, also Zeile

If Target.Count > 1 Then Exit Sub


herauslöscht, dann funktioniert er so, wie Du es Dir vorstellst. Diese Zeile dient eigentlich nur dazu, dass wenn mehr als eine Zelle markiert wird, der Code sofort beendet wird. Das ist eine Sicherheitsfunktion, die ich immer standardmäßig einarbeite, wenn ich mit Target hantiere, da es da schon öfters zu Problemen gekommen ist. In diesem Fall ist es aber das verkerteste, was man einbauen kann, da ja verbundene Zellen eigentlich mehrere markierte Zellen sind (streng gesehen). Wenn also die aktive zelle eine verbundene Zelle war, hat die obige Anweisung das als mehr als eine markierte Zelle angesehen und den Code beendet. Durch das herauslöschen der Zeile, wird nun auch eine verbundene Zelle farblich markiert, wenn angewählt.

Also dann, viel Spaß mit dem Code.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 8 von Fischi40

Hallo coros....


Dankefür deine Hilfe leider funzt der Code nur wenn ich keine andere VBA Codes in der Tabelle nutze... (bei mir behält er die angenommene Farbe bei)

Hier mal die komplette VBA aus der Tabelle:



Private Sub ComboBox1_Change()
If ComboBox1.ListIndex = 0 Then
Range("E14") = 1
Else
If ComboBox1.ListIndex = 1 Then
Range("E14") = 2
Else
If ComboBox1.ListIndex = 2 Then
Range("E14") = 3
Else
If ComboBox1.ListIndex = 3 Then
Range("E14") = 4
Else
If ComboBox1.ListIndex = 4 Then
Range("E14") = 5
Else
If ComboBox1.ListIndex = 5 Then
Range("E14") = 6
Else
If ComboBox1.ListIndex = 6 Then
Range("E14") = 7
Else
If ComboBox1.ListIndex = 7 Then
Range("E14") = 8
Else
If ComboBox1.ListIndex = 8 Then
Range("E14") = 9
Else
If ComboBox1.ListIndex = 9 Then
Range("E14") = 10
Else
If ComboBox1.ListIndex = 10 Then
Range("E14") = 11
Else
If ComboBox1.ListIndex = 11 Then
Range("E14") = 12
Else
If ComboBox1.ListIndex = 12 Then
Range("E14") = 13
Else
If ComboBox1.ListIndex = 13 Then
Range("E14") = 14
Else
If ComboBox1.ListIndex = 14 Then
Range("E14") = 15
Else
If ComboBox1.ListIndex = 15 Then
Range("E14") = 16
Else
If ComboBox1.ListIndex = 16 Then
Range("E14") = 17
Else
If ComboBox1.ListIndex = 17 Then
Range("E14") = 18
Else
If ComboBox1.ListIndex = 18 Then
Range("E14") = 19
Else
If ComboBox1.ListIndex = 19 Then
Range("E14") = 20
Else
If ComboBox1.ListIndex = 20 Then
Range("E14") = 21
Else
If ComboBox1.ListIndex = 21 Then
Range("E14") = 22
Else
If ComboBox1.ListIndex = 22 Then
Range("E14") = 23
Else
If ComboBox1.ListIndex = 23 Then
Range("E14") = 24
Else
If ComboBox1.ListIndex = 24 Then
Range("E14") = 25
Else
If ComboBox1.ListIndex = 25 Then
Range("E14") = 26
Else
If ComboBox1.ListIndex = 26 Then
Range("E14") = 27
Else
If ComboBox1.ListIndex = 27 Then
Range("E14") = 28
Else
If ComboBox1.ListIndex = 28 Then
Range("E14") = 29
Else
If ComboBox1.ListIndex = 29 Then
Range("E14") = 30
Else
If ComboBox1.ListIndex = 30 Then
Range("E14") = 31
Else
If ComboBox1.ListIndex = 31 Then
Range("E14") = 32
Else
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub

Private Sub ComboBox2_Change()
If ComboBox2.ListIndex = 0 Then
Range("K14") = 1
Else
If ComboBox2.ListIndex = 1 Then
Range("K14") = 2
Else
If ComboBox2.ListIndex = 2 Then
Range("K14") = 3
Else
If ComboBox2.ListIndex = 3 Then
Range("K14") = 4
Else
If ComboBox2.ListIndex = 4 Then
Range("K14") = 5
Else
If ComboBox2.ListIndex = 5 Then
Range("K14") = 6
Else
If ComboBox2.ListIndex = 6 Then
Range("K14") = 7
Else
If ComboBox2.ListIndex = 7 Then
Range("K14") = 8
Else
If ComboBox2.ListIndex = 8 Then
Range("K14") = 9
Else
If ComboBox2.ListIndex = 9 Then
Range("K14") = 10
Else
If ComboBox2.ListIndex = 10 Then
Range("K14") = 11
Else
If ComboBox2.ListIndex = 11 Then
Range("K14") = 12
Else
If ComboBox2.ListIndex = 12 Then
Range("K14") = 13
Else
If ComboBox2.ListIndex = 13 Then
Range("K14") = 14
Else
If ComboBox2.ListIndex = 4 Then
Range("K14") = 15
Else
If ComboBox2.ListIndex = 15 Then
Range("K14") = 16
Else
If ComboBox2.ListIndex = 16 Then
Range("K14") = 17
Else
If ComboBox2.ListIndex = 17 Then
Range("K14") = 18
Else
If ComboBox3.ListIndex = 18 Then
Range("K14") = 19
Else
If ComboBox2.ListIndex = 19 Then
Range("K14") = 20
Else
If ComboBox2.ListIndex = 20 Then
Range("K14") = 21
Else
If ComboBox2.ListIndex = 21 Then
Range("K14") = 22
Else
If ComboBox2.ListIndex = 22 Then
Range("K14") = 23
Else
If ComboBox2.ListIndex = 23 Then
Range("K14") = 24
Else
If ComboBox2.ListIndex = 24 Then
Range("K14") = 25
Else
If ComboBox2.ListIndex = 25 Then
Range("K14") = 26
Else
If ComboBox2.ListIndex = 26 Then
Range("K14") = 27
Else
If ComboBox2.ListIndex = 27 Then
Range("K14") = 28
Else
If ComboBox2.ListIndex = 28 Then
Range("K14") = 29
Else
If ComboBox2.ListIndex = 29 Then
Range("K14") = 30
Else
If ComboBox2.ListIndex = 30 Then
Range("K14") = 31
Else
If ComboBox2.ListIndex = 31 Then
Range("K14") = 32
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub


Private Sub CommandButton1_Click()
Worksheets("Kontierung").Select
End Sub


Private Sub CommandButton2_Click()
Worksheets("Dateneingabe (2)").Select
End Sub


Private Sub Label1_Click()
  If Label1.Caption = Chr$(163) Then
    Label1.Caption = "R"
    globalBoolLabel1Ausgewählt = True
  Else
    Label1.Caption = Chr$(163)
    globalBoolLabel1Ausgewählt = False
  End If
End Sub

Private Sub Label2_Click()
  If Label2.Caption = Chr$(163) Then
    Label2.Caption = "R"
    globalBoolLabel2Ausgewählt = True
  Else
    Label2.Caption = Chr$(163)
    globalBoolLabel2Ausgewählt = False
  End If
End Sub



Option Explicit
Dim AlteFarbe As Integer, MarkierteZelle As String

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
ActiveSheet.Unprotect "Test"
If MarkierteZelle = "" Then
MarkierteZelle = Target.Address
AlteFarbe = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 19
Else
If Range(MarkierteZelle).Interior.ColorIndex = 19 Then
Range(MarkierteZelle).Interior.ColorIndex = AlteFarbe
End If
AlteFarbe = Target.Interior.ColorIndex
MarkierteZelle = Target.Address
Target.Interior.ColorIndex = 19
End If
ActiveSheet.Protect "Test"
End Sub




Wäre echt super wenn du den Fehler findest...

Danke schonmal....

MfG Fischi


Antwort 9 von coros

Hi Fischi,

zunächst einmal müsstest Du die Zeilen

Option Explicit
Dim AlteFarbe As Integer, MarkierteZelle As String

in Deinem Code dort wo sie jetzt stehen ausschneiden und ganz am Anfang des VBA Projekt's, also ganz oben auf der Seite, wieder einfügen. Sonst dürfte an Deinem Code nichts hinderlich sein, dasss die Zellen nicht gefärbt werden. Wenn es dann immer noch nicht funktioniert, wäre es schön, wenn Du mir Deine Datei mal zukommen lassen würdest. Du kannst alles, was mich nichts angeht aus der Datei löschen. Schicke die Datei dann an die E-Mail:coros@excelbeispiele.de.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 10 von Fischi40

Hallo, coros....

echt super funzt 1a ich danke dir...

MfG Mario :)

Antwort 11 von Fischi40

Hallo...

muss doch nochmal was Fragen.

Nachdem ich abgespeichert habe speichert er die Farbe der aktiven Zelle als normale Zellfarbe sodass die Zellfarbe in der einen Zelle nach dem neuöffnen nicht mehr wechselt da die aktive Farbe und die Zellfarbe nun identisch sind.

Für einen Rat wäre ich echt dankbar...

MfG Mario

Antwort 12 von coros

Moin Mario,

kopiere nachfolgenden Code in das VBA Projekt "DieseArbeitsmappe".

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveCell.Interior.ColorIndex = AlteFarbe
End Sub


Mit dem Code wird bevor gespeichert wird, wieder die alte Farbe hergestellt.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 13 von woher

Hallo,
ich möchte das Makro so wie in Antwort 4 auch gerne benutzen. Aber ebenfalls ohne "If Target count......" und ohne "Protect......", "Unprotect......". Diese Zeilen habe ich gelöscht.
Wenn der markierte Bereich aber unterschiedlich farbig markierte Zellen enthält, kommt folgende Fehlermeldung: "Laufzeitfehler 94
Unzulässige Verwendung von Null"
Wie unterbinde ich die?
mfg
woher

Antwort 14 von minimaxler

@fischi
Hab dein Code eingegeben und es funzt soweit.
wie kann ich denn das Ekelhafte Grün wechseln?
und ist es nun nicht mehr möglich die anderen Zellen mit Füllfarbe zu füllen?
Hab keine Füllfarbe mehr zur Verfügung.
Danke Ingo

Antwort 15 von minimaxler

Achso
Die schaltfläche rückgängig geht jetzt auch nicht mehr

Antwort 16 von woher

Halo Minimaxler,
folgender Link wurde mir kürzlich auf eine andere Frage hin geschickt:
http://excelabc.de/excel/et/excel.php?Seite=et00026

im Makro steht 3x ColuorIndex 19, lösche die 19 und ersetze sie durch eine Zahl aus der ColourIndex-Übersicht.

Zur Füllfarbe: Am Beginn des Makros wird der Blattschutz aufgehoben, am Ende neu gesetzt! Lösche diese Zeilen wenn du sie nicht brauchst.

mfg
woher

Antwort 17 von woher

Hallo,
noch eine Ergänzung erbeten:
Ich möchte das Makro in das VBA-Projekt "DieseArbeitsmappe" einfügen, damit es in allen Tabellenblättern aktiv ist. Was muss geändert werden?

Vielen dank im voraus
mfg
woher

Antwort 18 von minimaxler

@woher
Der Link funzt nicht

Antwort 19 von woher

Hallo,

als Link funktioniert das tatsächlich seltsamerweise nicht.
Markiere den Text, kopiere + füge ins Adressfeld ein, dann gehts.
http://excelabc.de/excel/et/excel.php?Seite=et00026
mfg
woher

Antwort 20 von minimaxler

Jepp
Funzt.
Aber was muß ich tun damit die anderen zellen ihre farbe behalten.
Und das feld rückgängig geht auch nimmer

Antwort 21 von woher

Hallo Minimaxler,
unmittelbar nach dem Ausführen eines Makro funktioniert "Rückgängig" NIE.
Da dieses Makro permanent aktiv ist funktioniert "Rückgängig" NIE.
Was meinst du mit:
Aber was muß ich tun damit die anderen zellen ihre farbe behalten. Welche anderen Zellen?
In Antwort 14 hast du geschrieben:
und ist es nun nicht mehr möglich die anderen Zellen mit Füllfarbe zu füllen? Hab keine Füllfarbe mehr zur Verfügung.
Wie sieht das Makro bei dir im Moment aus?
mfg
woher

Antwort 22 von minimaxler

so sieht das Makro aus:
Option Explicit
Dim AlteFarbe As Integer, MarkierteZelle As String

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
ActiveSheet.Unprotect "Test"
If MarkierteZelle = "" Then
MarkierteZelle = Target.Address
AlteFarbe = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 4
Else
If Range(MarkierteZelle).Interior.ColorIndex = 4 Then
Range(MarkierteZelle).Interior.ColorIndex = AlteFarbe
End If
AlteFarbe = Target.Interior.ColorIndex
MarkierteZelle = Target.Address
Target.Interior.ColorIndex = 4
End If
ActiveSheet.Protect "Test"
End Sub


und da geht kein rückgängig mehr falls man mal was falsches eingibt.
Und es gibt keine füllfarbe mehr wenn ich was Kennzeichnen will.
ich wäre auch bereit die datei per Mail zu senden.

Danke für die Hilfe.

gruß Ingo

Antwort 23 von woher

Hallo,
lies mal meine Antwort betreffs Rückgängig und lies weiter oben zu Blattschutz.
mfg
woher

Antwort 24 von minimaxler

Mit dem rückgängig muß ich dann wohl Leben.
Aber was muß ich löschen für den Blattschutz
wenn ich auf Blattschutz Aufheben gehe will er immer ein Passwort.

Antwort 25 von woher

Hallo,
bitte immer erst lesen! Das hilft!
ActiveSheet.Unprotect "Test"
ActiveSheet.Protect "Test"

Lösch dies 2 Zeilen aus dem Makro.
mfg
woher

Antwort 26 von minimaxler

Ja ich weiss
Aber mit dem englisch isses a Weile her

Antwort 27 von minimaxler

Jetzt kommt Laufzeitfehler 1004
die ColorIndex eigenschaft des interior-Objekts kann nicht festgelegt werden.
Was immer das auch heisst

Antwort 28 von woher

Hallo,
so sieht das Makro bei mir z.Z. aus:

Option Explicit
Dim AlteFarbe As Integer, MarkierteZelle As String

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If MarkierteZelle = "" Then
MarkierteZelle = Target.Address
AlteFarbe = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 4
Else
If Range(MarkierteZelle).Interior.ColorIndex = 4 Then
Range(MarkierteZelle).Interior.ColorIndex = AlteFarbe
End If
AlteFarbe = Target.Interior.ColorIndex
MarkierteZelle = Target.Address
Target.Interior.ColorIndex = 4
End If

End Sub


Beachte aber bitte auch die Antworten11, 12
und die 13 wegen der Fehlermeldung bei mir.

mfg
woher

Antwort 29 von allesbesserwiss

Da nicht-Memer keine veralteten threads fortführen können sei
an dieser stelle auch ´mal auf https://supportnet.de/threads/1345202 verwiesen...

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: