vba - Excel VBA - 数据透视表筛选器运行时错误 '1004' 数据透视项

标签 vba excel filter pivot-table

我有以下代码,它打开一个 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/

相关文章:

Range类的VBA排序方法失败

excel - 添加先前单元格和当前单元格功能

vba - 使用 VBA 的图片和图片方法和属性的文档

filter - Twitter 流按位置过滤

javascript - 如何过滤以@开头的单词形成 Angular 2中的字符串

django-filter:使用 request.user 扩展过滤器查询

excel - 总是被踢出潜艇?

excel - 如何在 VBA 中使用 FileSystemObject 替换文本文件行中的字符串?

excel - 将 Excel 工作表范围导入到 Ms Access Table

Python 将 Excel 选项卡转换为 CSV 文件