VBA Loop PivotTable

时间:2014-06-11 13:22:05

标签: excel vba loops pivot

我使用以下代码遍历数据透视表中的每个国家/地区:

Sub AutoLoop()

Dim PT As PivotTable
Set PT = ActiveSheet.PivotTables(1)
Dim Country As PivotItem

For Each Country In PT.PivotFields("Country Name").PivotItems

MsgBox PT.PageFields("Country Name").DataRange.Value

Next Country

End Sub

但是,消息框始终返回值'全部'对于每个国家/地区,因为这是“国家/地区名称”中的默认选项。 PageField。它不会循环并为每个国家/地区提供国家/地区名称。如果我手动选择国家/地区,则消息框将始终返回该国家/地区。如何让MsgBox代码考虑循环?

从本质上讲,我需要的是PageField的DataRange更改并显示当前国家/地区,而不是让国家/地区循环而不更改数据透视表中的DataRange。

1 个答案:

答案 0 :(得分:2)

我可能对我如何理解您的目标感到有些偏见,但如果我对您尝试遍历每个国家/地区的情况有所了解,请更改数据透视表的页面字段以显示该国家/地区,并输出这个国家/地区的名称是一个消息框,你有点远。

了解如何循环Country?你没有在循环中使用它。你应该使用它。请参阅下面的代码。

Sub AutoLoop()

Dim PT As PivotTable
Set PT = ActiveSheet.PivotTables(1)
Dim Country As PivotItem

For Each Country In PT.PivotFields("Country").PivotItems
    PT.PivotFields("Country").ClearAllFilters
    PT.PivotFields("Country").CurrentPage = Country.Name
    MsgBox Country.Name
Next Country

End Sub

这是经过试验和测试的(再次,如果我理解正确的话)。它的作用是清除每次迭代的过滤器(只是为了安全),将过滤器更改为当前Country并将该Country的名称输出到消息框。

请参阅以下屏幕截图:

enter image description here

enter image description here

enter image description here

enter image description here

如果有帮助,请告诉我们。