HERBERS Excel-Forum - das Archiv
Dreifach Bedingte Formatierung über VBA in Pivot
Andreas

Hallo Herber Fans,
mit Hilfe des Forums konnte ich schon die Idee der bedingten Formatierung in einer Pivottabelle mit Hilfe einer Inputbox realisieren. Diese Bedingte Formatierung wird über VBA nach dem Prinzip „Zellwert ist gleich“ für jedes Feld im Pivot Datenbereich erstellt. Tatkräftig unterstütz hat dabei Franz (fcs)!
Was mir in den letzten Tagen jedoch aufgefallen ist:
Da die bedingte Formatierung als Verweis auf eine Zelle angelegt wird, greift sie auch, wenn der Zellwert 0 oder LEER ist. Das ist an sich auch korrekt. Optimal wäre es jedoch, wenn die Bedingte Formatierung nicht fix nur auf den Zellwert referenziert, sondern über eine Formel auch noch prüft, ob der Referenzwert ungleich 0 und ungleich LEER ist. Als Trockenübung habe ich das schon realisieren können.
In diesem Fall wird die Zelle „F4“ dreifach bedingt formatiert: "=UND($G$33<>0;$G$33<>"""";F4>$G$33)". „$G$33“ ist wieder die Zelle, die den Referenzwert enthält.
Und hier der erste Versuch, das in eine Form zu überführen, die vom Makro als Formatbedingung verstanden wird:



.FormatConditions.Add Type:=xlExpression, Formula1:= "=UND("&bedformaddress1&""<>0;""&bedformaddress1&"<>"""";"&pvField&">"&bedformaddress1&")"



Ich hatte auch schon mit „AND“ probiert, aber die Formel muß ja für eine deutsche Excel Applikation lesbar sein. Ich vermute also „UND“ ist schon korrekt. Auch in eine Zelle habe ich es schon eingegeben, um meine Schreibweise mit den Operatorenzeichen zu überprüfen. Aber ich bekomme es leider nicht hin, daß diese Formel über das Makro korrekt in die bedingte Formatierung geschrieben wird. Im VBA Editor blieben alle meine Versuche rot eingefärbt.
Ist es überhaupt möglich, eine solche diffizile bedingte Formatierung über VBA zu realisieren.
https://www.herber.de/bbs/user/52793.xls
Ich würde mich sehr über Eure Ideen und Anregungen freuen, die zur Lösung beitragen.
Viele Grüße,
Andreas Hanisch

AW: Dreifach Bedingte Formatierung über VBA in Piv
Renee

Hi Andreas,
Mit folgender Anpassung deines Codes, läuft Bed.Formatierung 1. Die 2te entsprechend anpassen:


Dim rC as Range
For Each pvField In pvTable.DataFields
For Each rC In ActiveSheet.Range(pvField.DataRange.Address)
With rC
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, _
Formula1:="=UND(" & BedFormadress & "<>0;" & _
BedFormadress & "<>"""";" & _
rC.Address & ">" & BedFormadress & ")"
With .FormatConditions(1).Font
.Bold = True
.ColorIndex = 5
End With
End With
Next
Next


GreetZ Renée

AW: Dreifach Bedingte Formatierung über VBA in Piv
Andreas

Hallo Renée,
vielen Dank für Deine Antwort. Ich habe es in meinen Code integriert und auch für zwei Optionen zum Laufen bekommen. Funktioniert super.
Was ich nun noch einbauen wollte, war eine Prüfung, die zählt, wie viele Zellen, über den Range der Inputbox erfaßt werden. Wenn diese mehr als zwei, dann kommt eine Messagebox die informiert, daß nur zwei Optionen möglich sind (pos./ neg.).
Ich habe aber nun leider den Effekt, daß die Inputbox sich nicht mehr über „Abbrechen“ oder Schließkreuz beenden läßt, sobald die Prüfung der Zellen Anzahl einmal erfolgte. Ich hänge dann in einer Schleife fest. Ich habe schon geguckt, ob irgendwo eine IF Schleife nicht korrekt abgeschlossen wurde, aber konnte nichts finden.
Liegt es an der Sprungmarke?
Auch ist das Phänomen, daß bei zwei markierten Zellen im Range beide Formatierungen sauber eingestellt werden. Wähle ich nur eine, wird die andere Formatierung, die dann ja überflüssig ist, nicht weggenommen.
Wäre es günstiger mit Case Select zu arbeiten?
https://www.herber.de/bbs/user/52813.xls
Vielen Dank für Deine Meinung.
Grüße, Andreas

AW: Dreifach Bedingte Formatierung über VBA in Piv
Renee

Hi again,
Nach der 'Warnung'-Msgbox hilft diese Zeile:


Set BedFormZelle = Nothing


GreetZ Renée

AW: Dreifach Bedingte Formatierung über VBA in Piv
Andreas

Hi Renée,
Danke Dir für Deine Hilfe! Das wars gewesen. Es läuft nun alles genial durch.
Einen Schönen Tag Dir noch, Grüße
Andreas Hanisch