2016-09-30 224 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