2016-06-09 139 views
0

我正在編寫一個宏,以根據 年份過濾器更改我的數據透視表中的數據。只要數據透視表中的數據在以下字符串格式的2年 - 月 之內,就應該顯示。使用VBA按日期間隔過濾數據透視表

2016 - 01 
2016 - 05 

日期間隔也是這種格式。 這根本沒有更新數據透視表。我感謝任何反饋或替代更新數據透視表給定兩個日期間隔作爲其過濾器。

私人小組Worksheet_Change(BYVAL目標作爲範圍)

Dim shPT As Worksheet 
    Dim pt As PivotTable 
    Dim pi As PivotItem 

    Dim d As Date 
    Dim dStart As Date 
    Dim dEnd As Date 

    '' G4 and G7 are the cell locations of the start and ending year-months. 
    dStart = DateSerial(Left(Range("G4"), 4), Right(Range("G4"), 2), 15) 
    dEnd = DateSerial(Left(Range("G7"), 4), Right(Range("G7"), 2), 15) 


    '' Calendar Filter in the Pivot Tables 
    Dim strCal 

    strCal = "Date Entered UTC" 

    On Error Resume Next 
    Application.EnableEvents = False 
    Application.ScreenUpdating = False 


      Set shPT = ActiveWorkbook.Worksheets("PivotTables") 

       For Each pt In shPT.PivotTables 


        With pt.PageFields(strCal) 

         For Each pi In .PivotItems 

          '' Loop through all year-month for each pi. 
          For d = dStart To dEnd Step 30 
           If pi.Value = Year(d) & " - " & Month(d) Then 
            .CurrentPage = Year(d) & " - " & Month(d) 
            Exit For 
           Else 
            .CurrentPage = "(All)" 
           End If 
          Next d 
         Next pi 
        End With 
      Next pt 


    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

結束子

回答

0

我發現工作的替代方案。 更換

For Each pt In shPT.PivotTables 
      With pt.PageFields(strCal) 

        For Each pi In .PivotItems 

         '' Loop through all year-month for each pi. 
         For d = dStart To dEnd Step 30 
          If pi.Value = Year(d) & " - " & Month(d) Then 
           .CurrentPage = Year(d) & " - " & Month(d) 
           Exit For 
          Else 
           .CurrentPage = "(All)" 
          End If 
         Next d 
        Next pi 
       End With 
     Next pt 

隨着

Dim i As Integer 
       Dim checkDate As Date 

       For Each pt In shPT.PivotTables 

        Set pf = pt.PivotFields(strCal) 
        pf.ClearAllFilters 
        pf.EnableMultiplePageItems = True 

        '' Loop through the dates in the Pivot Table. 
        For i = 1 To pf.PivotItems.Count 

         checkDate = DateSerial(Left(pf.PivotItems(i), 4), Right(pf.PivotItems(i), 2), 15) 

         '' If each date is outside the boundaries of the date intervals, then 
         '' turn them off. 
         If checkDate < dStart Or checkDate > dEnd Then 
          pf.PivotItems(i).Visible = False 
         End If 
        Next i 

克里斯·紐曼的blog有樞軸tabless過濾多種選擇好的建議。