Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1344to1348
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

Registerfarbe per Mini VBA

Registerfarbe per Mini VBA
14.01.2014 07:53:28
Maik
Liebe Foren Gemeinde,
ich bin stiller und heimlicher Fan. Hier haben schon viele top Beiträge und Antworten dafür gesorgt das ich so manches Problem gelöst bekam. An einer Stelle komme ich derzeit nicht weiter.
Folgendes versuche ich:
Wenn in D6 eine "0" steht dann mach die Registerfarbe "grün", wenn in "D6" eine 1 steht dann mach die Registerfarbe "rot"
Das habe ich mir von hier und da zusammengebaut (bescheidene VBA Kenntnisse):

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = 0 And Target.Address = "$D$6" Then ActiveSheet.Tab.ColorIndex = 43
If Target = 1 And Target.Address = "$D$6" Then ActiveSheet.Tab.ColorIndex = 3
End Sub

Funktioniert soweit. Ich schreibe in D6 die 0 es kommt Grün, ich schreibe 1 es kommt rot. Wenn ich den Wert aber nicht direkt selbst reinschreibe sondern errechnen lasse dann geht es nicht.
Beispiel für das was in D6 steht:
=WENN($AD$4="aktiv";0;1)
Entsprechend gibt er mir 0 oder 1 aus, funktioniert auch ---> Nur hat dies leider keine Auswirkung mehr auf die Registerfarbe. Ich beschuldige mich einfach als so unwissend das ich nicht weiss wie ich da nun wirklich keine Ahnung habe wie ich vorgehen muss.
So einfacher wäre wenn das VBA sich einfach direkt aus der Zelle $AD$4 speist. Habe ich auch ausprobiert und ging aber auch nicht. Hier mein Versuch:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = "aktiv" And Target.Address = "$AD$4" Then ActiveSheet.Tab.ColorIndex = 43
If Target = "inaktiv" And Target.Address = "$AD$4" Then ActiveSheet.Tab.ColorIndex = 3
End Sub

Falls ein irgendeine Relevanz hat:
"aktiv" errechnet sich aus einem Datum in Zelle E6. Dort schreibe ich rein wann ein Mitarbeiter entlassen wurde. Steht nichts drin ist das Ergebnis "aktiv", steht ein Entlassungsdatum das in der Vergangenheit liegt wechselt die Anzeige in AD4 einfach auf "inaktiv".
Die Formel dazu lautet:
=WENN(ODER(HEUTE() Ich danke vorab für eure Hilfestellung!
LG Maik

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Registerfarbe per Mini VBA
14.01.2014 08:15:12
Bastian
Hallo Maik,
wenn die Werte in der Zielzelle berechnet werden, und nicht aktiv (durch Eingabe) geändert werden, nimm anstelle des Change- Ereignisses lieber das Calculate- Ereignis.
Gruß, Bastian
Private Sub Worksheet_Calculate()
If Range("$D$6").Value = 0 Then ActiveSheet.Tab.ColorIndex = 43
If Range("$D$6").Value = 1 Then ActiveSheet.Tab.ColorIndex = 3
End Sub

AW: Registerfarbe per Mini VBA
14.01.2014 08:26:16
Maik
Hi Bastian,
danke für die schnelle Antwort. Klappt. Perfekt - Manchmal kann es so einfach sein :D
Hier der Code wie er einwandfrei funktioniert:
Private Sub Worksheet_Calculate()
If Range("$AD$4").Value = "aktiv" Then ActiveSheet.Tab.ColorIndex = 43
If Range("$AD$4").Value = "inaktiv" Then ActiveSheet.Tab.ColorIndex = 3
End Sub

Vielen herzlichen Dank. Tag gerettet :D

Anzeige
als Einzeiler
14.01.2014 11:42:07
Rudi
Hallo,
wozu die 2.Prüfung wenn es nur 2 Möglichkeiten gibt?
Private Sub Worksheet_Calculate()
If Range("AD4") = "aktiv" Then Me.Tab.ColorIndex = 43 Else Me.Tab.ColorIndex = 3
End Sub
Gruß
Rudi

AW: als Einzeiler
14.01.2014 11:44:28
mf@dietaikonauten.com
Sofort getestet! Danke Rudi!
Klappt auch perfekt.
LG Maik

noch einer
14.01.2014 11:53:26
Rudi
Hallo,
Private Sub Worksheet_Calculate()
Me.Tab.ColorIndex = -40 * ([ad4] = "aktiv") + 3
End Sub
Gruß
Rudi

AW: noch einer
14.01.2014 12:04:49
mf@dietaikonauten.com
Auch das klappt :)
Ich verstehe den Aufbau allerdings nicht ganz.
Me.Tab.ColorIndex = -40 * ([ad4] = "aktiv") + 3
Me.Tab steht für "aktueller Tab"?
-40 + 3? :) Also den hinteren Teil verstehe ich nicht ganz.
In jedem Fall funktioniert es - ich möchte aber ja auch nicht dumm sterben :D Könntest du mir
kurz den Aufbau erklären?
LG Maik

Anzeige
Erklärung
14.01.2014 12:27:16
Rudi
Hallo,
([ad4] = "aktiv") ergibt Wahr oder Falsch. Wahr ist in VBA = -1, Falsch = 0
-40 * -1 + 3 = 43
-40 * 0 + 3 = 3
Gruß
Rudi

AW: Erklärung
14.01.2014 12:28:20
mf@dietaikonauten.com
Verstanden! Vielen herzlichen Dank.

Das ist nicht ganz richtig, ...
14.01.2014 15:24:22
Luc:-?
…Rudi;
Zitat: Wahr ist in VBA = -1, Falsch = 0
WAHR ist in VBA = True, FALSCH = False, was aber automatisch in -1 und 0 konvertiert wird, wenn es in einer Berechnung verwendet wird. Ich schreibe dann allerdings der Deutlichkeit zuliebe entweder CInt(Range("AD4") = "aktiv") oder Abs(Range("AD4") = "aktiv") (Letzteres ergibt dann +1|0).
Gruß Luc :-?
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige