Excel VBA筛选前一天的数据透视表和数据透视表 – 透视筛选字段

我已经search到谷歌(和这里)到处都尝试过各种来源的代码的各种组合,包括本网站,Excelguru,excelexperts,ozgrid,dedicatedtedexcel,excelcampus,spreadsheetguru等…..等等向前…

这是我的问题,每一个代码,每一个改变,每一个types,都不起作用。 我在我的工作站点(最新)使用Office 360​​,所以它是Excel 2016和VBA 7.1。

我正在做的是自动化我们的轮class报告结束。 过程如下:

我们每小时input一个Excel表格(Log)的数据。 在一天结束的时候,上午5:00,我们保存并closures日志,打开另一个Excel表格,将数据导入到功率数据中,并将数据显示在数据透视表上(为我们的老板打印格式),然后select使用filter的前一个date的filter下拉,并打印它。 我们用三(3)个报告做这个:2个数据透视表和1个数据透视图。 Power Pivot从日志表中导入所有数据以重新格式化以进行打印。

我已经成功设法获取和重写代码(初学者在这里)的自动化过程:自动保存日志,closures日志,打开报告工作簿,刷新数据和打印数据,然后closures报告。 现在唯一缺less的部分是自动过滤。

我试过的代码是广泛的,但这里是我最近试过的一个例子(我已经擦除并重新复制了这么多的代码…)

  Sub Filter_PivotField()
 '说明:筛选数据透视表或切片器的特定date或时间段
 '来源:excelcampus.com/vba/filter-pivot-table-slicer-recent-date-period

 Dim sSheetName As String
 Dim sPivotName As String
昏暗的sFieldName作为string
 Dim sFilterCrit As String
 Dim pi As PivotFields

     '设置variables
     sSheetName =“EOS报告”
     sPivotName =“PivotTable1”
     sFieldName =“Date”
     sFilterCrit =“xlDateYesterday”
     'sFilterCrit = ThisWorkbook.Worksheets(“EOS Report”)。Range(“O1”)。Value

     With ThisWorkbook.Worksheets(sSheetName).PivotTables(sPivotName).PivotFields(sFieldName)
         '清除pivotfield的所有filter
         .ClearAllFilters

         '通过枢轴字段的枢轴项循环
         '隐藏或过滤不符合条件的项目
        对于每个pi在.PivotFields
            如果pi.Name sFilterCrit然后
                 pi.Visible = False
            万一
        下一个pi

    结束

结束小组

无济于事…

当我logging一个macros做手动filter,我得到这个:

  Sub手动filter()
 “
手动过滤macros
 “

 “
     ActiveSheet.PivotTables(“PivotTable1”)。PivotFields(_
         “[Bi-Hourly Report]。[Date]。[Date]”)。VisibleItemsList = Array(_
         “[Bi-Hourly Report]。[Date]。&[2016-09-28T00:00:00]”)
结束小组 

但是,当我尝试重新运行我刚刚录制的同一个macros(更改date后)时失败。 我已启用和禁用多个select选项,等等…每一个提示,我已经find…纳达…

更何况,试图自动过滤图表是一个噩梦,因为表,是啊,有很多文章,但图表? 没有太多的研究…

这里是filterbutton的图像,因为我研究的几乎所有东西都是对表格的列进行sorting,而不是使用数据透视表对filter进行sorting。

表格filter

图表filter

任何帮助在这个问题将不胜感激! 我不能发布实际的Excel电子表格,因为它们是公司的专有财产,但是如果需要的话,我可以用假数据复制格式…我已经在这个近一个月了…

提前致谢!

看一下这个。

Dim prev_date As String prev_date = Month(Date - 1) & "/" & Day(Date - 1) & "/" & Year(Date - 1) Thisworkbook.Sheets("Sheet1").Activate 'change this line with your sheet where pivot table is present. Change Sheet name. ActiveSheet.PivotTables("PivotTable1").RefreshTable ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").CurrentPage = prev_date