我有以下代码,它打开一个excel文件,选择工作表并运行一个宏 - 然后我设法让它删除Date的过滤器,但是我很难将它过滤到{{1 }}
"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
在数据透视表的源数据中可用,我可以手动选择它,但不能自动选择。
这令我感到困惑,因为我只需要它来显示一个日期。
答案 0 :(得分:2)
我意识到我在原始帖子发布后就碰到了类似的问题,尽管该主题非常鼓舞人心-帮助我的是:
.PivotCache.MissingItemsLimit = xlMissingItemsNone
从数据透视表列表中清除保留的项目后-我成功地执行了我的代码,之后发生的事情是:
FiltrArr = Array("wymagalne", "wymagalne na jutro", "przeterminowane", "puste")
For Each PivotItem In .PivotFields("status").PivotItems
If Not IsError(Application.Match(PivotItem.Caption, FiltrArr, 0)) Then
PivotItem.Visible = True
Else
PivotItem.Visible = False
End If
Next PivotItem
答案 1 :(得分:1)
如果您尝试仅显示 01/07/2013,那么一旦您清除过滤器,您需要隐藏除之外的所有内容2013年7月1日,请试试这个:
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,您会看到它是&#34; 1/7/2013&#34;而不是&#34; 01/07 / 2013&#34;。至少这是给我的。
对于区域日期来说,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