通过数据透视表VBA循环以识别零值

时间:2014-10-02 10:53:42

标签: excel vba excel-vba for-loop pivot-table

enter image description here

我正试图找到一种方法来遍历上面的数据透视表。我的三行标签是“Desk”,“Product Type”和“Prod ID”。我要做的是确定B列中的条目在“产品类型”中等于0的任何地方,突出显示“产品ID”,它在B列中等于0。

到目前为止我的尝试是(我意识到这是一团糟,我不是很擅长VBA),

Sub Pivot_Table()

'
' Pivot_Table Macro
'

  Dim PvTable As PivotTable
  Dim PvField As PivotField
  Dim PvField2 As PivotField
  Dim PvItem As PivotItem
  Dim PvItemL As PivotItem
  Set PvTable = ActiveSheet.PivotTables("PivotTable1")
  Set PvField = PvTable.PivotFields("Product Type")
  Set PvField2 = PvTable.PivotFields("Prod ID")
  Dim lRow As Long

  With ws
    lRow = .Range("B" & .Rows.Count).End(xlUp).Row

    For Each PvItem In PvField.PivotItems
      If Range("B2:B" & lRow) = 0 Then
         For Each PvItemL In PvField2.PivotItems
           If Range("B2:B" & lRow) = 0 Then
             LabelRange.Interior.Color = vbYellow
           End If
         Next
      End If
    Next
  End With
End Sub

首先关闭“lrow”我得到一个运行时错误,我不明白,因为我之前使用过这段代码。之后我不确定循环是否会起作用?

任何帮助都非常感谢!!

1 个答案:

答案 0 :(得分:0)

您必须使用Range.Value属性来检查范围是否包含数字零。 VBA中的Range是一个对象,因此无法与数字进行比较(您必须指定要与零比较的Range的哪个属性)。

For Each PvItem In PvField.PivotItems
    If Range("B2:B" & lRow).Value = 0 Then

       For Each PvItemL In PvField2.PivotItems
       If Range("B2:B" & lRow).Value = 0 Then

           LabelRange.Interior.Color = vbYellow

        End If
    End If

Next

关于lrow片段,尝试在Rows.Count之前删除点。

With ws
    lRow = .Range("B" & Rows.Count).End(xlUp).Row