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

Probleme bei bedingter Formatierung per VBA

Probleme bei bedingter Formatierung per VBA
M.
Hallo Forum,
ich versuche per VBA eine bedingte Formatierung zu definieren. Die Bedingungen sind jeweils Formeln, keine Werte. Dabei tritt jedoch das folgende Phänomen auf.
Wenn die Formeln feste Zellbereiche (also z.B. $A$1:$C$3) enthalten, funktioniert die bedingte Formatierung.
Lasse ich die $-Zeichen weg, dann funktioniert die bedingte Formatierung nur, wenn ich das Makro im Einzelschritt-Modus laufen lasse. Starte ich das Makro über einen Button, dann verweisen die Formeln der Bedingungen statt z.B. auf den Bereich A1:C3 auf den Bereich B5:D7.
Wie kann ich es erreichen, dass in beiden Fällen dieselben Ergebnisse erzeugt werden? Der Weg über die $-Zeichen fällt weg, da später die Spalten verschoben werden können und die bedingten Formatierungen dann nicht mehr passen würden.
Vielen Dank im Voraus,
M. Born
AW: Probleme bei bedingter Formatierung per VBA
11.07.2011 10:41:22
Rudi
Hallo,
das ist davon abhängig, welche gerade die aktive Zelle ist. Du musst also dafür sorgen, dass A1 aktiv ist.
Am besten kopieren und Format einfügen. Das klappt auch auf nicht aktiven Blättern.
z.B.
With Sheets(2)
With .Range("A1")
.Copy
.Pastespecial xlPasteFormats
end with
With .Range("A1:C3")
.Formatconditions.delete
....
....
End With
End With
Gruß
Rudi
AW: Probleme bei bedingter Formatierung per VBA
11.07.2011 10:43:43
M.
Hallo Rudi,
danke für den Tipp. Ich muss gleich auf Dienstreise, werde es morgen mal testen.
Viele Grüße,
M. Born
AW: Probleme bei bedingter Formatierung per VBA
11.07.2011 11:00:04
Hajo_Zi
Hallo Born,
warum offen?

Anzeige
Ergänzung zu Rudis AW
11.07.2011 15:56:20
Luc:-?
Hi, allerseits!
Wenn nachträglich Bereiche verschoben wdn können, an die sich ein VBA-Script natürlich nicht von allein anpassen kann, muss man dafür sorgen, dass es das tut, indem man benannte Bereiche verwendet. Zweckmäßig ist es dabei, im VBA-Projekt nur die Namen der Bereiche als String-Konstante global zu definieren.
Bei BedingtFormatFmln ist unbedingt zu beachten, dass diese (bei relativer Adressierung) immer einen fest definierten Bezugspkt benötigen, was bei manuellem Eintrag idR gegeben sein sollte. Bei Eintrag durch ein Pgm, sollte man diesen möglichst einheitl festlegen und die Bedinggsfml darauf ausrichten (wie sieht die Fml aus, wn bspw stets A1 ausgewählt wird?). Man kann diese Fmln dann auch als String-Projektkonstante (global) festlegen und dann später den Konstantennamen verwenden.
Gruß Luc :-?
Anzeige
AW: Ergänzung zu Rudis AW
12.07.2011 11:19:12
M.
Guten Morgen,
vielleicht ist meine Frage nicht ganz richtig verstanden worden. Ich versuche, das Ganze mal an einem konkreten Beispiel darzustellen.
In Zelle J7 werden per Makro folgende Bedingungen in der bedingten Formatierung eingefügt:
Bedingung1: =ODER(ANZAHL2($J$7:$L$7)=0;ANZAHL2($J$7:$L$7)=1)
Bedingung2: =NICHT(ODER(ANZAHL2($J$7:$L$7)=0;ANZAHL2($J$7:$L$7)=1))
In diesem Fall funktioniert alles bestens und die Formeln werden wie gewünscht erzeugt.
Da jedoch später die Spalten, in denen die bedingten Formatierungen stehen, in eine zweite Datei kopiert werden (und dort in eine andere Spalte), beziehen sich dann die bedingten Formatierungen auf die falschen Spalten und erzeugen eine falsche Formatierung. Daher habe ich das Makro so umgebaut, dass folgende Formeln erzeugt werden sollen:
Bedingung1: =ODER(ANZAHL2(J$7:L$7)=0;ANZAHL2(J$7:L$7)=1)
Bedingung2: =NICHT(ODER(ANZAHL2(J$7:L$7)=0;ANZAHL2(J$7:L$7)=1))
Lasse ich das Makro im Einzelschrittmodus ausführen, dann wird die Formel wie gewünscht erzeugt.
Starte ich das Makro jedoch im VBA-Editor über F5 oder über einen Button (so wie es später sein soll), dann erzeugt das Makro folgende Formeln:
Bedingung1: =ODER(ANZAHL2(R$7:T$7)=0;ANZAHL2(R$7:T$7)=1)
Bedingung2: =NICHT(ODER(ANZAHL2(R$7:T$7)=0;ANZAHL2(R$7:T$7)=1))
Rudi Maintaire's Hinweis, die Zelle vorher zu aktivieren, war der richtige Tipp. Ich hatte sie über With ...End with angesprochen, ohne sie vorher mit Activate auszuwählen. Meine Frage ist aber weiterhin, warum dasselbe Makro im Einzelschrittmodus (Start über F8) andere Ergebnisse erzeugt als im normalen Modus (Start über F5 bzw. per Button). Hat hier jemand eine Idee?
Vielen Dank an alle für die tolle Hilfe,
M. Born
Anzeige
Ist das denn jetzt immer noch so? owT
12.07.2011 16:24:31
Luc:-?
:-?
AW: Ist das denn jetzt immer noch so? owT
12.07.2011 16:46:51
M.
Nachdem ich Rudi's Tipp befolgt habe, funktioniert das Makro so wie es soll. Aber mich würde interessieren, warum bei nicht aktiver Zelle dort absoluter Blödsinn generiert wird, wenn das Makro komplett durchläuft, aber korrekte Ergebnisse liefert, wenn es im Einzelschrittmodus läuft. Unterschiedliche Ergebnisse im identischen Makro sollte es eigentlich nicht geben...
da müsste man eigentlich ...
12.07.2011 18:44:29
Rudi
Hallo,
... mal wieder Antworten: Das musst du Bill fragen.
Auch wenn NoNet das nicht passt.
siehe https://www.herber.de/forum/messages/1221338.html
Gruß
Rudi
Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige