2015-12-22 40 views
1

我目前正在處理一組代碼以將數據透視表過濾器設置爲某個日期範圍。在下面的代碼中,日期範圍是從2015年7月12日到2015年12月22日。在數據中僅存在12/7,8,11,18的日期。代碼將正確地標記文件中的這些項目,並按照預期在12/7之前省略和計算日期,但不知何故,它會在12/21/2015日期中提取,然後在Bolded代碼行中給我提供運行時錯誤。我的數據中沒有12/21/2015。這也是說pi.visible應該是錯誤的,我認爲這是錯誤發生的地方,因爲沒有12/21/2015標記爲可見或不可見。有什麼建議?比較數據透視表項值時的運行時1004錯誤

Dim ws As Worksheet, pt As PivotTable, pf As PivotField, pi As PivotItem 
Dim dCurrentDate As Date, dPastDate As Date 

dCurrentDate = Date 
dPastDate = Date - 15 

Set ws = Sheets("Sheet2") 
Set pt = ws.PivotTables("PivotTable1") 
Set pf = pt.PivotFields("Date") 

With pf 
    .ClearAllFilters 
    For Each pi In pf.PivotItems 
    If pi.Value = "(blank)" Then 
    Else 
     If pi.Value <= dCurrentDate And pi.Value >= dPastDate Then 
      **pi.Visible = True** 
     Else 
      pi.Visible = False 
     End If 
    End If 
    Next 
End With 
+1

'PivotTableOptions> Data'選項卡。確保'保留從數據源中刪除的項目>每個字段保留的項目數:'設置爲**無**。否則,緩存將保留可能已經存儲的過去的舊值,並將檢查它們的值,即使在數據中沒有看到它們。 –

+1

@ScottHoltzman - 非常感謝。這解決了我遇到的錯誤。 – Emmerson

回答

0

該代碼不需要任何特定的日期在那裏,它會檢查一個範圍。我沒有收到錯誤,但可以簡化,不需要檢查空白。

Dim ws As Worksheet, pt As PivotTable, pf As PivotField, pi As PivotItem 
Dim dCurrentDate As Date, dPastDate As Date 

    dCurrentDate = Date 
    dPastDate = Date - 15 

    Set ws = Sheets("Sheet2") 
    Set pt = ws.PivotTables("PivotTable1") 
    Set pf = pt.PivotFields("Date") 

    With pf 
     .ClearAllFilters 
     For Each pi In pf.PivotItems 

      pi.Visible = Trim(pi.Value) <= dCurrentDate And Trim(pi.Value) >= dPastDate 
     Next 
    End With 
+1

所有的尊重,這並不真正提供用戶的問題的答案,它只是重構他的代碼,使其更簡單/可讀。 –