Excel 透视表要刷新活动工作簿,请选择“项目”;句号“;,清除所有选择并选择最后2个值

Excel 透视表要刷新活动工作簿,请选择“项目”;句号“;,清除所有选择并选择最后2个值,excel,vba,pivot-table,selection,Excel,Vba,Pivot Table,Selection,在执行了一些操作之后,这部分代码进入名为“概述”的工作表,刷新一个巨大的数据透视表-只有一个数据透视表,它被称为“数据透视表2”(实际上,它不刷新数据透视表,我不知道为什么)。前面向源添加行的部分可以工作,因此手动刷新后,一切都可以工作。接下来,它将选择每个具有值“Period”的单元格,我需要它做的是清除选择“Period”中的过滤器,并选择刷新透视表后弹出的最后两个值 ActiveWorkbook.Sheets("Overview").Activate Dim pi

在执行了一些操作之后,这部分代码进入名为“概述”的工作表,刷新一个巨大的数据透视表-只有一个数据透视表,它被称为“数据透视表2”(实际上,它不刷新数据透视表,我不知道为什么)。前面向源添加行的部分可以工作,因此手动刷新后,一切都可以工作。接下来,它将选择每个具有值“Period”的单元格,我需要它做的是清除选择“Period”中的过滤器,并选择刷新透视表后弹出的最后两个值


ActiveWorkbook.Sheets("Overview").Activate

Dim pi As PivotItem
Dim pt As PivotTable
Dim pf As PivotField

For Each pt In ActiveSheet.PivotTables
    pt.RefreshTable

Set pf = pt.PageFields("PivotTable2").PivotFields("Period")
    
    For Each pf In pt.PageFields
        pf.ClearManualFilter
        pf.ClearAllFilters
        pf.EnableMultiplePageItems = True
        pf.AutoSort xlAscending, pf.SourceName
        pf.CurrentPage = pf.PivotItems(pf.PivotItems.Count).Name
        If pf.CurrentPage = "(blank)" And pf.PivotItems.Count > 2 Then
            pf.CurrentPage = pf.PivotItems(pf.PivotItems.Count - 2).Name
        End If
        If pf.CurrentPage = "(blank)" And pf.PivotItems.Count > 1 Then
            pf.CurrentPage = pf.PivotItems(pf.PivotItems.Count - 1).Name
        End If
    Next pf
Next pt


End Sub

运行时错误“1004”:

无法获取数据透视表类的PageFields属性


如果你指出问题或提出解决方案,我会很高兴。谢谢大家!

这段代码可以工作,但不是像我的代码所建议的那样只处理字段“Period”,而是对透视表中的所有字段执行操作,并在过滤器中选择最后2个值

Dim pi As PivotItem
Dim pt As PivotTable
Dim pf As PivotField


For Each pt In ActiveSheet.PivotTables
    pt.RefreshTable

Set pf = ActiveSheet.PivotTables("PivotTable2").PivotFields("Period")
    
        For Each pf In pt.PageFields
        pf.ClearManualFilter
        pf.ClearAllFilters
        pf.EnableMultiplePageItems = True
        pf.AutoSort xlAscending, pf.SourceName
        pf.CurrentPage = pf.PivotItems(pf.PivotItems.Count).Name
        If pf.CurrentPage = "(blank)" And pf.PivotItems.Count > 2 Then
            pf.CurrentPage = pf.PivotItems(pf.PivotItems.Count - 2).Name
        End If
        If pf.CurrentPage = "(blank)" And pf.PivotItems.Count > 1 Then
            pf.CurrentPage = pf.PivotItems(pf.PivotItems.Count - 1).Name
        End If
    Next pf
  Next pt

谢谢,但是仍然有一个错误。谢谢。现在的问题是行
Set pf=pt.PageFields(“Period”)
,无法获取PageFields属性。但它是有效的!但ClearManualfilter没有。我选择的东西比我需要的多