Excel 刷新数据透视表日期

Excel 刷新数据透视表日期,excel,vba,pivot-table,Excel,Vba,Pivot Table,我需要修改以下代码以刷新透视表并更改日期筛选器,每个月末,我的日期过滤器中都会有一个新项目。例如,本月是20190531,上一个项目是20190430,我需要取消选择20190430,下一个月选择20190531。我想要相同的情况,但我已经取消选择20190531,并选择新项目20190630……我需要有此动态,以避免每月手动更改 Sub PivotBraunRefresh() Sheets("Report-Inv-Actual").Select With ActiveShee

我需要修改以下代码以刷新透视表并更改日期筛选器,每个月末,我的日期过滤器中都会有一个新项目。例如,本月是20190531,上一个项目是20190430,我需要取消选择20190430,下一个月选择20190531。我想要相同的情况,但我已经取消选择20190531,并选择新项目20190630……我需要有此动态,以避免每月手动更改

Sub PivotBraunRefresh()

    Sheets("Report-Inv-Actual").Select
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Dt")
        .PivotItems("20190430").Visible = False
        .PivotItems("20190531").Visible = True
    End With

End Sub 

您必须使用当前月份的最后一天构建字符串,
检查,如果存在这样一个
数据透视项

将其可见性设置为true(因为至少有一个数据透视项必须始终可见)
然后循环所有其他数据透视项并将其切换为不可见:

Sub PivotBraunRefresh()
    Dim pi As PivotItem
    Dim strMonthEnd As String

    ' last day of current month as string
    strMonthEnd = Format(DateSerial(Year(Date), Month(Date), 1) - 1, "YYYYMMDD")

    ' refresh pivottable
    Sheets("Report-Inv-Actual").PivotTables("PivotTable1").PivotCache.Refresh

    With Sheets("Report-Inv-Actual").PivotTables("PivotTable1").PivotFields("Dt")
        On Error Resume Next
        ' check, if pivotfield exists
        Set pi = .PivotItems(strMonthEnd)
        On Error GoTo 0
        If Not pi Is Nothing Then
            pi.Visible = True
            For Each pi In .PivotItems
                If pi.Name <> strMonthEnd Then pi.Visible = False
            Next pi
        End If
    End With
End Sub
Sub-PivotBraunRefresh()
Dim pi作为数据透视项
作为字符串的Dim strMonthEnd
'当前月份的最后一天作为字符串
strMonthEnd=格式(日期序列(年(日期)、月(日期),1)-1,“YYYYMMDD”)
'刷新数据透视表
工作表(“报表库存实际”)。数据透视表(“数据透视表1”)。数据透视缓存。刷新
数据表(“报表库存实际”)。数据透视表(“数据透视表1”)。数据透视字段(“Dt”)
出错时继续下一步
'如果数据透视字段存在,请选中
设置pi=.PivotItems(strMonthEnd)
错误转到0
如果不是pi,那么pi什么都不是
pi.Visible=True
对于.PivotItems中的每个pi
如果pi.Name strMonthEnd,则pi.Visible=False
下一个pi
如果结束
以
端接头

如果您想进一步自动化它,您可以将它放在
工作簿\u Open()
事件例程中。

您必须用当前月份的最后一天构建一个字符串,
检查,如果存在这样一个
数据透视项

将其可见性设置为true(因为至少有一个数据透视项必须始终可见)
然后循环所有其他数据透视项并将其切换为不可见:

Sub PivotBraunRefresh()
    Dim pi As PivotItem
    Dim strMonthEnd As String

    ' last day of current month as string
    strMonthEnd = Format(DateSerial(Year(Date), Month(Date), 1) - 1, "YYYYMMDD")

    ' refresh pivottable
    Sheets("Report-Inv-Actual").PivotTables("PivotTable1").PivotCache.Refresh

    With Sheets("Report-Inv-Actual").PivotTables("PivotTable1").PivotFields("Dt")
        On Error Resume Next
        ' check, if pivotfield exists
        Set pi = .PivotItems(strMonthEnd)
        On Error GoTo 0
        If Not pi Is Nothing Then
            pi.Visible = True
            For Each pi In .PivotItems
                If pi.Name <> strMonthEnd Then pi.Visible = False
            Next pi
        End If
    End With
End Sub
Sub-PivotBraunRefresh()
Dim pi作为数据透视项
作为字符串的Dim strMonthEnd
'当前月份的最后一天作为字符串
strMonthEnd=格式(日期序列(年(日期)、月(日期),1)-1,“YYYYMMDD”)
'刷新数据透视表
工作表(“报表库存实际”)。数据透视表(“数据透视表1”)。数据透视缓存。刷新
数据表(“报表库存实际”)。数据透视表(“数据透视表1”)。数据透视字段(“Dt”)
出错时继续下一步
'如果数据透视字段存在,请选中
设置pi=.PivotItems(strMonthEnd)
错误转到0
如果不是pi,那么pi什么都不是
pi.Visible=True
对于.PivotItems中的每个pi
如果pi.Name strMonthEnd,则pi.Visible=False
下一个pi
如果结束
以
端接头

如果要进一步自动化,可以将其放在
工作簿\u Open()
事件例程中。

您研究了什么?您研究了什么?运行时错误1004'无法获取数据透视表类的数据透视字段属性'i change PageFields(“Dt”)with PivotFields(“Dt”)我无法得到错误,但什么也没有发生我用20190430检查了透视图,我希望取消选择并检查20190531我编辑了我的答案,正如我错误地认为,
PivotField
被用作筛选字段。如果它对您工作正常,请按说明将其标记为答案。代码没有运行错误,也没有作业我的代码来自recorder use.PivotItems(“20190430”).Visible=False.PivotItems(“20190531”).Visible=TrueNow我已将其更改为上个月的月末。运行时错误1004“无法获取数据透视表类的数据透视字段属性”我更改带有数据透视字段(“Dt”)的页面字段(“Dt”)我无法得到错误,但什么也没有发生我用20190430检查了透视图,我希望取消选择并检查20190531我编辑了我的答案,正如我错误地认为,
PivotField
被用作筛选字段。如果它对您工作正常,请按说明将其标记为答案。代码没有运行错误,也没有作业我的代码来自recorder use.PivotItems(“20190430”).Visible=False.PivotItems(“20190531”).Visible=TrueNow我将其更改为上个月的月末。