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