我使用以下代码遍历数据透视表中的每个国家/地区:
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。
答案 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
的名称输出到消息框。
请参阅以下屏幕截图:
如果有帮助,请告诉我们。