Excel VBA – 数据透视表筛选器运行时错误'1004'PivotItems

我有下面的代码,它打开一个Excel文件,select工作表,并运行一个macros – 我已经设法使其删除filter的date,但我很难得到它过滤到"01/07/2013"

 Sub Data() Dim oExcel As Excel.Application Dim oWB As Workbook Dim oSheets As Sheets Dim oPi As PivotItem Set oExcel = New Excel.Application oExcel.Workbooks.Open ("\\A79APBRSFACTD\MDSS\FactivityServer\FactShar\OEE_Daily2.xls") oExcel.Visible = True Set oExcel = Excel.Application Set oWB = oExcel.Workbooks("OEE_Daily2.xls") oWB.Sheets("OEE Pivot Daily").Select oExcel.Run ("Update_OEE_Daily") oWB.Sheets("OEE Pivot Daily").Range("B3").Select With oWB.Sheets("OEE Pivot Daily").PivotTables("PivotTable2").PivotFields("Date") .ClearAllFilters .PivotItems("01/07/2013").Visible = True End With Set oExcel = Nothing Set oWB = Nothing End Sub 

我收到以下错误消息Run-time error '1004': Unable to get the PivotItems property of the PivotField class

数据透视表的源数据中有"01/07/2013"的date,我可以手动select它,但不能自动。

这让我感到困惑,因为我只需要显示一个date。

如果你只想显示01/07/2013,那么一旦你清除了filter,你需要隐藏 01/07/2013 之外的所有内容,所以试试这个:

 With oWB.Sheets("OEE Pivot Daily").PivotTables("PivotTable2").PivotFields("Date") .ClearAllFilters For Each oPi In .PivotItems If oPi .Value <> "1/7/2013" Then oPi .Visible = False End If Next pi End With 

确保你删除了零。

如果你通过你的代码,并观看oPi.value,你会发现它是“2013年1月7日”而不是“01/07/2013”​​。 至less这是给我的。

当涉及到区域date时,Excel是一个噩梦,所以如果您使用美国mm / dd / yyyy格式,这应该工作。 如果您使用的是dd / mm / yyyy格式,则需要根据美式格式的date检查oPi.value。 烦人。

编辑23/07/2013:

在应用filter之前search数据的新代码以及大量重新格式化来解决美国date格式问题:

 Sub RunFilter() Dim strFilterDate As String Dim datFilterDate As Date Dim rngDateRange As Range Dim c As Range strFilterDate = InputBox("Enter the filter date in dd/mm/yyyy format.", "Enter date", Format(Now(), "dd/mm/yyyy")) If IsDate(strFilterDate) And Len(strFilterDate) = 10 Then datFilterDate = DateSerial(Right(strFilterDate, 4), Mid(strFilterDate, 4, 2), Left(strFilterDate, 2)) Set rngDateRange = ThisWorkbook.Worksheets("Sheet1").Range("B:B").SpecialCells(xlCellTypeConstants) For Each c In rngDateRange If c.Value2 = datFilterDate Then ApplyPTFilter (datFilterDate) Exit For End If Next c End If End Sub Sub ApplyPTFilter(datDate As Date) Dim pi As PivotItem Dim strDate As String strDate = Format(datDate, "m/d/yyyy") With ThisWorkbook.Sheets("OEE Pivot Daily").PivotTables("PivotTable2").PivotFields("Date") .ClearAllFilters For Each pi In .PivotItems If pi.Value <> strDate Then pi.Visible = False End If Next pi End With End Sub