2016-09-30 186 views
3

我到处找对谷歌(在这里),并从各种来源,包括这个网站尝试不同的代码组合,Excelguru,excelexperts ,ozgrid,dedicatedatecel,excelcampus,spreadsheetguru等.....等等等等......Excel的VBA来过滤数据透视表和数据透视表的前一天 - 透视过滤器字段

这是我的问题,每一个代码,每一个改动,每一个类型,都不起作用。我在我的工作站点(最新)使用Office 360​​,因此它是excel 2016和VBA 7.1。

什么我希望做的是我们的自动化移位报告结束。具体的过程:

我们将数据输入到Excel表(登录)每隔一小时。在一天结束时,在凌晨5点,我们保存并关闭日志,打开另一个Excel表格,将数据导入到功率数据中,并将数据显示在数据透视表上(为我们的老板打印格式),然后选择使用过滤器的前一个日期的过滤器下拉并打印。我们通过三(3)个报告来完成此工作:2个数据透视表和1个数据透视图。 Power Pivot从日志表中导入所有数据以重新格式化以进行打印。

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

我已经尝试过的代码是巨大的,但这里有一个什么我最近尝试了一个例子(我已经删除并重新复制这么多的代码...)

Sub Filter_PivotField() 
'Description: Filter a pivot table or slicer for a specific date or period 
'Source: excelcampus.com/vba/filter-pivot-table-slicer-recent-date-period 

Dim sSheetName As String 
Dim sPivotName As String 
Dim sFieldName As String 
Dim sFilterCrit As String 
Dim pi As PivotFields 

    'Set the variables 
    sSheetName = "EOS Report" 
    sPivotName = "PivotTable1" 
    sFieldName = "Date" 
    sFilterCrit = "xlDateYesterday" 
    'sFilterCrit = ThisWorkbook.Worksheets("EOS Report").Range("O1").Value 

    With ThisWorkbook.Worksheets(sSheetName).PivotTables(sPivotName).PivotFields(sFieldName) 
     'Clear all filter of the pivotfield 
     .ClearAllFilters 

     'Loop through pivot items of the pivot field 
     'Hide or filter out items that do not match the criteria 
     For Each pi In .PivotFields 
      If pi.Name sFilterCrit Then 
       pi.Visible = False 
      End If 
     Next pi 

    End With 

End Sub 

无济于事....

当我录制宏做手工筛选,我得到这个:

Sub manualfilter() 
' 
' manualfilter Macro 
' 

' 
    ActiveSheet.PivotTables("PivotTable1").PivotFields(_ 
     "[Bi-Hourly Report].[Date].[Date]").VisibleItemsList = Array(_ 
     "[Bi-Hourly Report].[Date].&[2016-09-28T00:00:00]") 
End Sub

但是,当我尝试重新运行,我只是记录了相同的宏(改变后失败追溯)。我已经启用和禁用多项选择选项,等等...每一个提示,我已经找到了... ...虚无缥缈

且不说,试图自动过滤器的图表是一场噩梦,因为表,肯定有吨的文章,但图表?研究中没有多少...

这里是过滤器按钮的图像,因为我研究的几乎所有东西都是对表格的列进行排序,而不是使用数据透视表对过滤器进行排序。

Table Filter

Chart Filter

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

Thanks in提前!

+0

可以HEL我在这? https:// stackoverflow。com/q/48442027/9267058 – MissTeppy

回答

2

检查了这一点。

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 
+0

我修改了我记录的宏,并替换为您发布的代码,并且在debug> show definition下,它表示光标下的标识符无法识别,高亮显示的部分为最后2行,光标置于键入:= xlDateYesterday – DevilzEye

+0

在数据透视表中,您拖动了“日期”列。它必须在“行”部分中才能使用此代码。我怀疑它是在“报告过滤器”部分。请检查。 –

+0

在“字段”列表中,“日期”位于“过滤器”部分。这就是报告设置的方式,因为它是一天的基础,就像OP中的屏幕截图一样。如果需要,我可以再拍一张截图,以便了解它是如何设计的。这份报告是针对我们老板的一天的生产型报告。我发现所有的VBA操纵列,我还没有找到一个修改数据透视表的“过滤器”字段... :( – DevilzEye