运行时错误 1004:无法获取工作表 class 的数据透视表 属性

Runtime Error 1004: Unable to get the PivotTables property of the Worksheet class

我录制了这个宏来更新16个图表的日期范围。但是,如您所见,我遇到了 运行 时间错误。

我查看了 Whosebug 上与此相关的其他线程,但 none 接近。 excel 上该死的帮助按钮也没有帮助。你能给些建议么?这是代码:

ActiveSheet.ChartObjects("Chart 18").Activate
ActiveChart.Axes(xlCategory).Select
ActiveSheet.ChartObjects("Chart 18").Activate
With ActiveSheet.PivotTables("PivotTable2").PivotFields("Date")
    .PivotItems("Sep-15").Visible = False
    .PivotItems("Aug-14").Visible = True
End With

没有您的工作簿示例很难知道,但我会尝试命名 sheet 而不是使用 "activesheet"。激活或 select 任何东西通常也是一个坏主意,相反,您应该允许代码在不 select 任何东西的情况下尽可能多地工作。 这样的东西可能效果更好:

With Sheets("MySheet").PivotTables("PivotTable2").PivotFields("Date")
.PivotItems("Sep-15").Visible = False
.PivotItems("Aug-14").Visible = True
End With

正如 Josh 所说,您应该引用确切的 sheet 名称,甚至可能引用确切的 Pivot table 名称。

此外,您应该避免使用 .Select,而是为每个数据透视图声明一个变量,例如。

这里有一些简单的代码,应该可以帮助您关闭。您需要将此代码中的 "MySheet" 更改为工作簿中包含枢轴 table 的 sheet 的名称,并且您的日期字段必须确实是 [=14= 中的文本格式]格式。

Sub ShowThirteenDatesStartingLastMonth()
    Sheets("MySheet").PivotTables("PivotTable2").PivotCache.Refresh

    Dim Dt As String

    With Sheets("MySheet").PivotTables("PivotTable2").PivotFields("Date")        
    For h = 1 To .PivotItems.Count - 1
        On Error Resume Next
        .PivotItems(h).Visible = False
    Next h

    For i = 1 To 13
        On Error Resume Next
        Dt = Format(DateSerial(Year(Date), Month(Date) - i, 1), "Mmm-YY")
        .PivotItems(Dt).Visible = True
    Next i
    End With
End Sub