用于运行数据透视表和更改过滤器/标签的VBA代码

时间:2017-09-06 10:32:12

标签: excel vba excel-vba

实际上我正在尝试创建一些VBA代码,它将循环遍历带有数据透视表的一堆工作表,将某些条件应用于数据透视表(即根据变量更改字段/根据单元格值更改过滤器,正如我试图在下面的代码中演示)。这甚至没有接近运行(我是一个完整的初学者试图更新遗留代码),所以我正在寻找如何使用为我想要的结果定义的变量的指针。

我目前的问题是我似乎无法调用数据透视表来开始更改字段等。

Option Explicit
Dim MySheet As Worksheet
Dim MyPivot As PivotTable
Dim NewCat As String

Sub RefreshPivots()

 For Each MySheet In ActiveWorkbook.Worksheets
    For Each MyPivot In MySheet.PivotTables
        NewCat = Worksheets("WorkingSheet").Range("B44").Value
        MyPivot.RefreshTable

        With ActiveSheet
         .MyPivot.AddDataField
         .MyPivot.PivotFields ("GuidelinePercent"), "Count of GuidelinePercent", xlCount
        End With

    Next MyPivot
 Next MySheet

(循环中会有更多内容,这只是我遇到的第一个问题)。

我收到了:Run-time error '438' Object doesn't support this property or method在线

With ActiveSheet.MyPivot.AddDataField

任何帮助都会很棒!

EDIT;

尝试时

With ActiveSheet
.PivotTables(MyPivot).AddDataField
.PivotTables(MyPivot).PivotFields ("GuidelinePercent"), "Count of GuidelinePercent", xlCount
End With

我在Run-time error'1004': Unable to get the Pivot Tables property of the Worksheet class行上获得了.MyPivot.AddDataField

1 个答案:

答案 0 :(得分:3)

您的循环为For Each MySheet In ActiveWorkbook.Worksheets,因此当您稍后使用With ActiveSheet时,它与MySheet不同,因此您不需要使用ActiveSheet },您可以直接使用您命名为PivotTable的{​​{1}}对象。

尝试以下代码:

MyPivot

修改1

 With MyPivot
     .AddDataField .PivotFields("GuidelinePercent"), "Count of GuidelinePercent", xlCount
 End With