我有以下代码,它打开一个 Excel 文件,选择工作表并运行一个宏 - 然后我设法让它删除日期过滤器,但我无法将其过滤到 “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
我收到以下错误消息运行时错误“1004”:无法获取 PivotField 类的 PivotItems 属性
日期“01/07/2013”
在数据透视表的源数据中可用,我可以手动选择它,但不能自动选择。
这让我感到困惑,因为我只需要它来显示一个日期。
最佳答案
如果您尝试仅显示 01/07/2013,那么清除过滤器后,您需要隐藏除 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,您将看到它是“1/7/2013”而不是“01/07/2013”。至少对我来说是这样。
对于区域日期,Excel 是一场噩梦,因此如果您使用美国 mm/dd/yyyy 格式,这应该可行。如果您使用 dd/mm/yyyy 格式,则需要根据美国格式的日期检查 oPi.value。烦人。
编辑于 2013 年 7 月 23 日:
在应用过滤器之前搜索数据的新代码以及大量重新格式化以解决美国日期格式问题:
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
关于vba - Excel VBA - 数据透视表筛选器运行时错误 '1004' 数据透视项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17467029/