Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
972to976
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
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
bedingte Formatierung in Pivot Datenfeldern
07.05.2008 21:21:00
Andreas
Hallo Herber Fans,
ich mühe mich nun schon eine ganze Weile an einer bedingten Formatierung für alle Pivot Datenfelder. Ich habe es schon geschafft, über eine Inputbox auf die Zelle zu referenzieren (G33), die den Schwellwert enthält. Dieser wird auch korrekt ausgelesen.
Ich schaffe es aber nicht – nicht mit dem VBA Rekorder und der Hilfe – das Makro so zu schreiben, daß der Code „for Each pvField in pvTable.Datafields“ sauber durchläuft und jedem Datenfeld diese bedingte Formatierung gibt.
Ich habe keine Idee, ob das überhaupt realisierbar ist.
Könnt Ihr mit den entscheidenden Hinweis geben?
https://www.herber.de/bbs/user/52214.xls
Vielen Dank und Grüße,
Andreas

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: bedingte Formatierung in Pivot Datenfeldern
08.05.2008 02:24:00
fcs
Hallo Andreas,
die bedingte Formatierung kann nicht den Pivotfeldern, sondenr nur dem zugehörigen Datenbereich zugewiesen werden.
Gruß
Franz

Sub BedingtesFormat()
Dim pvField As PivotField
Dim pvTable As PivotTable
Dim BedFormZelle As Range
Set pvTable = ActiveSheet.PivotTables(1)
On Error Resume Next
Set BedFormZelle = Application.InputBox("Bitte die Zelle mit dem Schwellwert markieren:" &  _
vbLf & _
"Abbrechen verläßt den Vorgang.", "Schwellwert", Type:=8)
On Error GoTo 0
If BedFormZelle Is Nothing Then
Exit Sub
Else
MsgBox BedFormZelle.Value
End If
'pvTable.RefreshTable 'Pivottabelle aktualisieren
For Each pvField In pvTable.DataFields
With pvField.DataRange
.FormatConditions.Delete 'ggf. vorhandenen bed. Formatierungen löschen
.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, _
Formula1:=BedFormZelle.Value
With .FormatConditions(1).Font
.Bold = True
.ColorIndex = 5
End With
End With
Next
End Sub


Anzeige
AW: bedingte Formatierung in Pivot Datenfeldern
08.05.2008 14:28:00
Andreas
Hallo Franz,
vielen Dank für Deine Erläuterung und den Code. Ich habe ihn ausprobiert und noch so verändert, daß nun eine feste Referenzierung auf die Zelle mit dem Schwellwert besteht. Das scheint wirklich hilfreich zu sein. Für diese Deine Hilfe bei der Realisierung vielen Dank!!!
Ich habe nun aber überlegt, wie es wäre, auch negative Werte zu erfassen. Ich habe also eine VBA MsgBox eingebaut in der diese Wahlmöglichkeit kommt. Wenn ja, dann soll auf die Zelle mit dem negativen Werte referenziert und eine Formatkondition hinzugefügt werden. So weit die Theorie. Ich habe mit meinem Verständnis so weit wie möglich Analogien gebildet und war auch hier im Forum suchen. Aber leider bekomme ich immer noch eine Fehlermeldung „Argument ist nicht optional“ in der zweiten Formatierung.
Woran kann das liegen? Auch stelle ich mir die Frage ob dieser lange Code für zwei Formatierungskriterien mit Zwischenfrage überhaupt so lang sein muß. Vielleicht kannst Du mich auch Deine Meinung hierzu wissen lassen. Primär wäre ich aber froh, wenn ich die Fehlermeldung nicht mehr habe.
https://www.herber.de/bbs/user/52233.xls
Vielen Dank!
Grüße, Andreas Hanisch

Anzeige
AW: bedingte Formatierung in Pivot Datenfeldern
08.05.2008 17:23:00
fcs
Hallo Andreas,
Hauptfehler war, dass du in der 2. Bedingung den Parameter "Formula2" setzen wolltest. Muss hier auch Formula1 sein.
Kleiner Fehler war auch noch bei der Berechnung der Adresse für die 2. Bedingungung.
Außerdem sollte man seinen Code etwas übersichtlicher gestaltten, was die Einrückungen für For-Next, With-End With, If-End If Abschnitte angeht. Variablen kann man auch mehrfach neu mit Werten belegen; es ist nicht notwendig für das Setzen der 2. Bedingung eine kompletten Satz Variablen neu anzulegen.
Gruß
Franz

Sub BedingtesFormat_5()
Dim pvField As PivotField
Dim pvTable As PivotTable
Dim BedFormZelle As Range
Dim BedFormadress As String
Set pvTable = ActiveSheet.PivotTables(1)
'# # # Positiven Schwellwert erfassen
On Error Resume Next
Set BedFormZelle = Application.InputBox("Bitte die Zelle mit dem Pos(+)Schwellwert markieren:" _
_
& vbLf & "Abbrechen verläßt den Vorgang.", "Pos. Schwellwert", Type:=8)
On Error GoTo 0
If BedFormZelle Is Nothing Then
Exit Sub
Else
BedFormadress = BedFormZelle.Address
'# # # Bedingte Formatierung positiver Werte durchführen
For Each pvField In pvTable.DataFields
With pvField.DataRange
.FormatConditions.Delete 'ggf. vorhandenen bed. Formatierungen löschen
.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual, _
Formula1:="=" & BedFormadress
With .FormatConditions(1).Font
.Bold = True
.ColorIndex = 5
End With
End With
Next
'# # # Abfrage, ob negative Werte auch angezeigt werden sollen
If MsgBox("Wollen Sie auch ein Kriterium für Negativwerte erfassen?", vbYesNo, _
"NegativWerte") = vbYes Then '### MsgBoxen kann man auch ohne Variable direkt abfragen
'# # # Negativen Schwellwert erfassen
Set BedFormZelle = Application.InputBox("Bitte die Zelle mit dem Neg(-)Schwellwert  _
markieren:" _
& vbLf & "Abbrechen verläßt den Vorgang.", "Neg. Schwellwert", Type:=8)
On Error GoTo 0
BedFormadress = BedFormZelle.Address
For Each pvField In pvTable.DataFields
With pvField.DataRange
.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, _
Formula1:="=" & BedFormadress  'auch bei der 2. Bedingung muss hier Formula1  _
stehen!!
With .FormatConditions(2).Font
.Bold = True
.ColorIndex = 10
End With
End With
Next
Else
Exit Sub
End If
End If
End Sub


Anzeige
AW: bedingte Formatierung in Pivot Datenfeldern
14.05.2008 10:57:30
Andreas
Hallo Franz,
vielen Dank für Deine Erläuterungen zur bedingten Formatierung. Das in beiden Bedingungen „Formula1“ stehen muß war mir wirklich neu. Ich weiß nicht mehr genau, warum ich dort eine 2 setzen wollte, ob mir der VBA Rekorder das so ausgegeben hat?!
Ich habe in dieser Sache auch so noch einige Modifikationen vorgenommen. Beispielsweise arbeite ich gerade daran, über die InputBox einen Range zu definieren. Wenn der Range nur eine Zelle hat, dann wird nur eine positive bedingte Formatierung eingestellt. Wenn Zwei Zellen, dann zwei Formatierungen. So spare ich die Yes/ No Message- und die zweite Inputbox. Das sieht bisher ganz gut aus.
Was mir 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 ja 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$330;$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.
Geht das überhaupt?
Ich würde mich sehr freuen, Deine Meinung hierzu zu erfahren.
Viele Grüße, Andreas

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige