Excel 筛选出日期范围时出现类型不匹配错误

Excel 筛选出日期范围时出现类型不匹配错误,excel,excel-2013,vba,Excel,Excel 2013,Vba,在我运行下面的代码后,它完美地完成了过滤,但随后返回: 运行时错误13:类型不匹配 在加粗的一行。我试图研究这个问题,但找不到任何真正的解决办法 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(

在我运行下面的代码后,它完美地完成了过滤,但随后返回:

运行时错误13:类型不匹配

在加粗的一行。我试图研究这个问题,但找不到任何真正的解决办法

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 <= dCurrentDate And pi.Value >= dPastDate Then**
         pi.Visible = True
      Else
         pi.Visible = False
      End If
   Next
End With
Dim ws作为工作表,pt作为数据透视表,pf作为数据透视字段,pi作为数据透视项
Dim dCurrentDate作为日期,dPastDate作为日期
dCurrentDate=日期
dPastDate=日期-15
设置ws=图纸(“图纸2”)
Set pt=ws.PivotTables(“PivotTable1”)
设置pf=pt.数据透视字段(“日期”)
与pf
.ClearAllFilters
对于pf.PivotItems中的每个pi
**如果pi.Value=dPastDate,则**
pi.Visible=True
其他的
pi.Visible=False
如果结束
下一个
以

我能够用以下代码解决我的问题:

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

dCurrentDate = Date
dPastDate = Date - 5

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
Dim ws作为工作表,pt作为数据透视表,pf作为数据透视字段,pi作为数据透视项
Dim dCurrentDate作为日期,dPastDate作为日期
dCurrentDate=日期
dPastDate=日期-5
设置ws=图纸(“图纸2”)
Set pt=ws.PivotTables(“PivotTable1”)
设置pf=pt.数据透视字段(“日期”)
与pf
.ClearAllFilters
对于pf.PivotItems中的每个pi
如果pi.Value=“(空白)”则
其他的
如果pi.Value=dPastDate,则
pi.Visible=True
其他的
pi.Visible=False
如果结束
如果结束
下一个
以

您确定所有数据透视项都是有效日期吗?尝试使用IsDate(pi.Value)检查它是否是有效日期。即使不是。。。它们只需要是数字就可以进行比较。。“运行时错误13”表示存在“nothing”、“null”或任何对象/字符串。。只需为
pi.Value
添加手表即可。。。虽然日期总是可以用数字进行比较,但pi.value不是。。。或者简单地将
Debug.Print IsNumeric(pi.Value)&“-”&pi.Value
放在“`For Each…”和
之间,如果pi.Value所有的值都是日期,除了“blank”值,它似乎也会被引入。在代码中有什么可以让它跳过任何空白值吗?我可以通过添加一个<代码>如果PI值=“(空白)”<代码>作为一个IF,在开始时让PI.Valk检查嵌套的IF值,过滤掉我所拥有的空白问题。