Anzeige
Archiv - Navigation
1188to1192
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
VBA bedingte Formatierung
amintire
Hallo Luc und hallo alle zusammen,
leider bekomme ich es überhaupt nicht hin mit der bedingten Formatierung per VBA und Legende.
Leider ist auch mein Beitrag schon aus der Übersicht weg um darauf schreiben zu können, deswegen neuer Beitrag. Sorry.
Kann mir evtl. jemand Schritt für Schritt erklären wie ich die bedingte Formatierung hinbekomme?
Name Legende wurde vergeben und Code wurde auch wie im Beitrag beschrieben eingepflegt.
Lieben Gruß
Amina
Verlinke bitte ins Archiv zum alten Beitrag,...
15.12.2010 14:23:48
Luc:-?
…Amina,
wo sich wohl auch deine BspDatei befindet. Ansonsten das nächste Mal schneller rückmelden. Du hast hier 6-7 Tage Zeit, je nach Uhrzeit. Dann kann aber rein zeitlich kaum noch jemand antworten…
Alternativ kannst du natürl auch deine BspMappe mit letztem Stand hier einstellen.
Gruß Luc :-?
PS: Eigentl war das ganz einfach, einfacher als das, was sonst so angeboten wird und du nicht verstanden hast…
AW: Verlinke bitte ins Archiv zum alten Beitrag,...
16.12.2010 09:23:24
amintire
Hallo Luc,
leider weiß ich nicht wie ich meinen Beitrag von letztens verlinken kann.
Aber hier mal die Beispieldatei...
https://www.herber.de/bbs/user/72705.xls
Gruß Amina
Anzeige
Das ist ganz einfach,...
16.12.2010 17:23:16
Luc:-?
…Amina,
im Archiv suchen (Deine Beiträge) auf den gewünschten Beitragsbetreff rechts klicken und Linkadresse kopieren aus dem Menü wählen. Das Kopierte dann hier einfügen.
Du hast das, was ich beschrieben habe i.w. gemacht, aber die BedingtFormatierungsFmln vergessen. Ohne die fkt das nämlich nicht. Ist aber nicht weiter schlimm, denn da scheint ohnehin noch ein Denkfehler meinerseits drin zu sein… ;-/
Bis dann! Gruß Luc :-?
Entwarnung! Kein Denk-, sondern nur ein...
16.12.2010 18:50:33
Luc:-?
…Verfahrensfehler meinerseits, Amina;
hatte das eben am Notebook unter xl12 (2007) getestet und da fktt das natürlich nicht, weil xl12 bei Änderungen des BedingtFormats einer Zelle das automatisch in alle Zellen mit der gleichen Bedingung, also den ganzen Anwendungsbereich, übernimmt. In den früheren Versionen wird der Anwendungsbereich dadurch aber gesplittet, so dass lauter BedingtFormat-Einzelfälle entstehen, was die Dynamisierung des BedingtFormats ausnutzt. Die Vereinzelung ist dann an der Anzeige des BedingtFormats des ursprgl Anwendungsbereichs (Gesamtauswahl) zu erkennen → alle Maskenfelder bleiben leer, was bei fehlender BedingtFormatierung bzw Auswahl einer einzelnen Zelle nicht der Fall ist. Ich will hoffen, dass das unter xl11 (2003) auch noch der Fall ist. (Unter xl12ff ist diese Operation ohnehin nicht mehr notwendig, ansonsten müsste auch der Anwendungsbereich geändert wdn, aber die hier evtl darüber hinaus entstehenden Probleme dürften den damit verbundenen Aufwand kaum rechtfertigen.)
Du musst also noch Folgendes tun…
1. den Geltungsbereich des Bereichsnamens Legende auf die Symbole, also Spalte A beschränken (Spalte B einzubeziehen ist überflüssig und deshalb im Pgm nicht berücksichtigt!)
2. Den gesamten Bereich G6:DD200 bei G6 beginnend markieren und die Bedingungen des BedingtFormats nach letztem Stand (s.Archiv-Link im vorherigen Beitrag) eintragen unter Formel ist… mit relativem Bezug auf G6 (wird in den anderen Zellen dann automatisch angepasst). Die 2.Bedingung muss die mit PFBM sein!
3. Wenn die Dynamisierung schon bei Dateneintrag wirksam wdn soll, musst du die gleiche Prozedur auch für Worksheet_Change anlegen. Wie, weißt du ja (hatte ich auch erwähnt).
Tipp: Falls du irgendwann mal Änderungen bzw Erweiterungen des Anwendungsbereichs vornehmen musst — einfach das Format einer Zelle mit dem Pinsel auf alle anderen bzw nur die neu hinzugekommenen Zellen übertragen. Das schuckelt sich bei Dateneintrag schon allein zurecht.
Gruß Luc :-?
Anzeige
Sehe mir das später noch gründlicher an,...
19.12.2010 16:14:48
Luc:-?
…Amina,
auf jeden Fall fktt das so erst bei späterer nochmaliger Zellauswahl, nicht schon beim Dateneintrag. Dazu benötigst du noch eine zweite, identische Ereignisprozedur (hatte ich damals bereits geschrieben), nur mit Namen ohne Selection, also Worksheet_Change. Dann fkt's schon beim Dateneintrag. Auf Worksheet_SelectionChange kannst du normalerweise sogar ganz verzichten.
Gruß+schöVierAd, Luc :-?
Anzeige
So dürfte es jetzt funktionieren,...
19.12.2010 19:01:44
Luc:-?
…Amina,
korrigierte BspDatei ←darauf klicken!
Gruß+FroWeihn, Luc :-?
AW: So dürfte es jetzt funktionieren,...
19.12.2010 19:18:53
amintire
Hallo Luc,
Vielen Dank für Deine Hilfe und Zeit.
Bei der Beispielmappe formatiert er zwar die Zellen nach A1 also z.B. P wird grün, aber die anderen Buchstaben werden nicht mit den entsprechenden vorgegebenen Farben foramiert und die Zahl wird auch nicht rot gefärbt mit weißer Schrift.
Lieben Gruß
Amina
Sieh bitte nach, ob auf Zelle G6 2 unter...
19.12.2010 20:53:16
Luc:-?
…schiedl FormatBedingungen eingetragen sind, Amina!
Wenn das der Fall ist, kopiere die Zelle mit dem Formatpinsel und übertrage dieses Format dann auf alle anderen von dir gewünschten Zellen (maximal G6:DD200). Bei Eingabe der entsprechenden Werte sollte sich dann was tun.
Du hast doch die von mir eingestellte Datei verwendet?! Was die Farben betrifft: Möglicherweise hat xl12 der Legende andere Farben verpasst. Dann in der Legende korrigieren. Von dort wdn sie nämlich in die Zellen übernommen.
Das die BedingtFormatierung nicht auf Zahl reagiert, ist mir verdächtig. Es kann sein, dass das verdammte xl12 das alles beim Speichern entstellt hat. Kann ich evtl erst morgen kontrollieren. Im INet bin ich jetzt am Linux-Ubuntu-PC. Da läuft kein Office.
Gruß Luc :-?
Anzeige
AW: Sieh bitte nach, ob auf Zelle G6 2 unter...
19.12.2010 21:05:21
amintire
Hallo Luc,
also bei Zelle G6 ist nur eine bedingte Formatierung hinterlegt,
mit der Formel:
'=UND(LÄNGE(G6)=1;ISTZAHL(FINDEN(G6;"BFMP"))) mit der Farbe Grün.
Die Farben werden schon übernommen, aber eben nur die Farbe grün egal welchen Wert ich in der Zelle eingebe.
Gruß Amina ;)
AW: momentanter Stand...
20.12.2010 08:52:55
amintire
Hallo Luc,
ich habe jetzt zwei Bedingte Formatierungen eingepflegt, und zwar:
1. Bed. Formatierung: =ISTZAHL(H12)
2. Bed. Formatierung: =UND(LÄNGE(H12)=1;ISTZAHL(FINDEN(H12;"BFMP")))
Die Dritte bedingte Formatierung ist nur für den Rahmen:
'=WENN($A12="x";WAHR) hat nichts weiter mit dem Code zu tun.
So funktioniert die Färbung nach der Legende, also Grün, Grau, hellgrün und orange.
Die bedingte Formatierung wenn eine Zahl rauskommt funktioniert nicht.
Habe aber auch festgestellt das die Färbung erst stattfindet wenn ich auf die Zelle klicke.
Geht es auch automatisch? Weil in den zellen sind Formeln drinnen die sich automatisch aktualisieren wenn sich ein Wert ändert, die Färbung findet aber nicht statt, erst wenn ich auf die Zelle klicke.
Ansonsten funktioniert es teilweise mit einigen (wie oben beschrieben) kleinen Schönheitsfehlern.
Gruß Amina
Anzeige
Tja, dann ist das auch keine Zahl,...
20.12.2010 12:44:16
Luc:-?
…Amina,
sondern ein Text, der aus Ziffern besteht. Das könnte man abfangen, indem man die 1.Bedingung auf =ISTZAHL(--H12) korrigiert (Doppelminus entspricht 1*…).
Die Automatik fktt, wenn neben Worksheet_SelectionChange auch eine ansonsten gleiche Prozedur Worksheet_Change existiert und Daten eingetragen (geändert) wdn. Da es sich bei dir offensichtl um Fmln handelt, die die Werte liefern, muss sich an deren Ausgangswerten etwas ändern°, damit die Automatik anspringt. Deshalb hatte ich im alten Thread in einem meiner ersten Beiträge geschrieben, dass du evtl FmlZellen anklicken musst (hier reicht jetzt auswählen) oder mit Ersetzen aus dem Menü Bearbeiten = durch = in den betroffenen Zellen (vorher alle auswählen) ersetzen musst. Das wäre dann eine Änderung, die die Automatik wirksam wdn lässt. Alle auf einmal auswählen reicht nicht, weil das im Pgm nicht vorgesehen ist. Da bräuchtest du noch 'ne kleine Subroutine die alle Zellen mit Select abklappert. Aber das ist gar nicht notwendig, wenn du die Gleichheitszeichen durch sich selbst ersetzt. Bei allen Fmln (und Daten) die ggf neu im betroffenen Bereich hinzukommen, fktt die Automatik sofort. Das Problem besteht nur, weil die Fmln schon da sind.
° Ergibt das einen neuen Wert, ändert sich auch die Zellfarbe.
Gruß Luc :-?
PS: Damit wäre das die Bestätigung, dass es unter Xl11 genauso fktt wie unter xl9.
Anzeige
AW: Tja, dann ist das auch keine Zahl,...
20.12.2010 13:07:47
amintire
Hallo Luc,
das mit der Zahl und mit den Formatierungen funktioniert jetzt.
Aber wie gesagt das mit der Automatischen Färbung wenn sich die Zellenwerte ändern, funktioniert nicht automatisch.
Würde ja mit dem Makro siehe unten funktionieren, aber kann ja schlecht alle tausende Zellen im VBA einzeln aufschreiben.
Gibt es hier eine VBA Lösung welches mir alle Zellen durchklickt wenn ich auf einen Button klicke?
Sub färben()
Range("H12").Select
Range("H13").Select
Range("H14").Select
Range("H15").Select
End Sub
Gruß Amina
AW: Tja, dann ist das auch keine Zahl,...
20.12.2010 13:10:18
amintire
Achso ja ok, dann mache ich ein Makro und Ersetzt = durch = , oder richtig verstanden?
Gruß Amina
Anzeige
1.Ja und 2.Nein,...
20.12.2010 15:19:53
Luc:-?
…Amina,
habe das noch mal durchdacht und einen Denkfehler festgestellt, der bei meinen bisherigen Arbeiten nicht ins Gewicht fiel. Da die bedingt zu formatierenden Werte durch Fmln erzeugt wdn, wird bei Änderung derselben auch bei Änderung der Ausgangswerte kein Change-Ereignis ausgelöst. Eine triviale und doch etwas unschöne, aber erfolgversprechende Methode wäre das, was du vorschlägst, aber auf einem etwas gehobeneren Niveau, damit das nicht auf lineare Pgmierung hinausläuft… ;-)
1. Lege dazu zusätzl noch das Worksheet_Calculation-Ereignis an und ersetze die _ Leerzeile durch Folgendes…

Dim Zelle As Range
With Application
.ScreenUpdating = False
.For Each Zelle In Range(ZBerAdr): Zelle.Select: Next Zelle
.ScreenUpdating = True
End With
Außerdem solltest du die Konstantendeklaration (Const…) am Anfang der beiden bereits vorhandenen Ereignisprozeduren dort entfernen und nur 1x an den Anfang des Tabellenmoduls in die 2.Zeile stellen. In der 1.Zeile sollte Option Explicit stehen. Damit sind die Konstanten global, aber nur für dieses Modul, deklariert und ihre Deklaration muss nicht in jeder Prozedur wiederholt wdn.
Das Calculation-Ereignis hat kein Target (⇒Zielzelle), weil es erst nach Abschluss aller Berechnungen auftritt.
Wenn diese simple Lösung zu unelegant bzw zeitaufwendig ist, gäbe es noch eine andere Möglichkeit (ohne Calculation) bei Change auf der Basis der Target.Dependants (Nachfolger der Quelldaten, die in die Fmln eingehen; vgl Pfeile zum Nachfolger bzw Vorgänger in den xlMenüs). Dabei wäre es allerdings besser, wenn die Quelldaten auf dem gleichen Blatt stünden, sonst wird es wahrscheinl zu kompliziert. Wenn du lieber die verwenden willst, teile mir das bitte mit.
2. Makro zum Ersetzen ist nicht nötig. Da reicht schon die Funktionalität im xlMenü Bearbeiten - Ersetzen (für's 1.Mal). Bei Änderungen an den Quelldaten würde das automatisch mit dem 1.Vorschlag laufen. Evtl reicht dann auch, wenn du nur einfach eine einzige Zelle anklickst. Dadurch dürfte auch das Calculation-Ereignis ausgelöst wdn.
Gruß Luc :-?
Anzeige
...Und, klappt's nu? owT
21.12.2010 19:06:50
Luc:-?
:-?

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige