3

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

我想做的是自动化我们的轮班结束报告。这是过程:

我们每小时将数据输入到 Excel 表 (Log) 中。在一天结束时,早上 5:00,我们保存并关闭该日志,打开另一个将数据导入 power pivot 的 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

但是当我尝试重新运行我刚刚记录的同一个宏时它失败了(在更改日期之后)。我已启用和禁用多项选择选项等。

更不用说,尝试自动过滤图表是一场噩梦,因为表格,是的,上面有很多文章,但是图表呢?没有太多的研究。

这是过滤器按钮的图像,因为我研究的几乎所有内容都是对表的 COLUMN 进行排序,而不是使用数据透视表对过滤器本身进行排序。

表过滤器

图表过滤器

我无法发布实际的 Excel 电子表格,因为它们是公司的专有财产,但如果需要,我可以使用虚假数据复制格式。

4

1 回答 1

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
于 2016-10-01T06:58:28.267 回答