2016-01-03 37 views
0

我想在数据透视表中做一些条件格式化,并确保当数据透视字段发生变化时,我的格式保持与需要格式化的内容相关。条件格式化数据透视表vba

这里开始:

到目前为止,我有2列在我的数据集:帐号和销售。我遇到的问题是我的电视机是空的。因此“每个”循环都没有做任何事情。

Sub condformat1() 

Dim ws As Worksheet 
Dim oPvt As PivotTable 
Dim oPvtItm As PivotItem 

Set ws = ActiveSheet 
Set oPvt = ws.PivotTables("pv1") 


For Each oPvtItm In oPvt.PivotFields("sum of sales").PivotItems 

    If oPvtItm > 100000 Then 
    oPvtItm.DataRange.Interior.Color = vbYellow 
    End If 
Next 

End Sub 

一旦解决了这个问题,我想对我的帐户(例如group a,b,c)进行分类。这可能是一行或一列。 (让它成为一个简单的专栏)。因此,我愿意仅分析账户组“a”的销售。

+0

您是否尝试过使用g实际的条件格式? –

+0

是的,但是当你移除一个字段或者改变它的位置时,你会做什么? – OGERWOLF

回答

1

找到了我一直在寻找:

Sub condformat2() 

Dim ws As Worksheet 
Dim oPvt As PivotTable 
Dim oPvtItm As PivotItem 
Dim abc As String 


Set ws = ActiveSheet 
Set oPvt = ws.PivotTables("pv1") 
Set oPvtDataField = oPvt.ColumnFields(1) 
abc = "a" 

For Each oPvtItm In oPvtDataField.PivotItems 
    If oPvtItm = abc Then 
     For Each cell In oPvtDataField.PivotItems(abc).DataRange 
      If cell.Value > 100000 Then 
      cell.Interior.Color = vbYellow 
      End If 
     Next 
    End If 
Next 

End Sub 

感谢道格,以及这些来源作者:

http://www.databison.com/how-to-read-data-from-pivot-table-using-vba/

http://peltiertech.com/referencing-pivot-table-ranges-in-vba/

+0

啊,你找到了Peltier参考!我打算提到这一点。非常好的东西。 –

0

正如我在评论中提到的,我会考虑使用实际的条件格式而不是VBA。然而,这里的一些代码,会做你要求什么:

Sub condformat1() 

Dim ws As Worksheet 
Dim oPvt As PivotTable 
Dim oPvtDataField As PivotField 
Dim cell As Range 

Set ws = ActiveSheet 
Set oPvt = ws.PivotTables("pv1") 
Set oPvtDataField = oPvt.DataFields("sum of sales") 

For Each cell In oPvtDataField.DataRange 
    If cell.Value > 100000 Then 
    cell.Interior.Color = vbYellow 
    End If 
Next 
End Sub 
+0

谢谢!这表明已经为我工作。现在,如何解决我的第二个问题:我的账户分为三组:a,b,c。我只想突出显示组a?枢轴项有什么问题,我很困惑?我试过这个,它不工作:'对于oPvtDataField.PivotItems(“b”)中的每个单元格。“DataRange' – OGERWOLF