【问题标题】:Pivot Table Date Filter Issue (Not a valid date)数据透视表日期过滤器问题(无效日期)
【发布时间】:2017-03-29 07:57:15
【问题描述】:

我需要根据用户在另一个工作表(控件)中输入的日期过滤工作簿中的现有数据透视表(“数据透视”工作表中的数据透视表 1)。我应该补充一点,控制表中的单元格对它们进行了数据验证,以仅在单元格中强制日期。我到目前为止的代码是这样的:

Sub FilterPivotfromCell()

Dim Invoice_Start_Date As Date
Dim Invoice_End_Date As Date

Invoice_Start_Date = CDate(Worksheets("Control").Cells(3, "E").Value)

Invoice_End_Date = CDate(Worksheets("Control").Cells(3, "G").Value)

Sheets("Pivot").Select

MsgBox IsDate(Invoice_End_Date)
MsgBox IsDate(Invoice_Start_Date)

ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add _
Type:=xlDateBetween, Value1:=Invoice_Start_Date, Value2:=Invoice_End_Date

End Sub

当使用 F8 单步执行代码并监视变量 Invoice_Start_Date 和 Invoice_End_Date 时,所有内容都指向作为日期的变量(类型在监视窗口中显示为日期,并且 isdate 消息框在两个实例。但是,在运行宏时,一旦涉及到数据透视表被过滤的部分,我就会收到消息“运行时错误'1004':您输入的日期不是有效日期。请尝试再次。'

我想知道这个问题是否与英国区域设置有关,因为我知道我过去曾遇到过这个问题。

另外,澄清一下,E3 的单元格内容是 01/10/2016,G3 的单元格内容是 31/10/2016。

编辑:我已经尝试遵循here 的建议,但没有任何区别。我的数据透视表的来源也确实包含空白行,但我尝试将其限制为仅数据并且没有任何区别。

编辑 2:嗯,你不知道吗。多用谷歌搜索,想出了解决方案here。基本上在数据透视过滤器中的日期周围添加 clng 格式就可以了?

【问题讨论】:

  • 只是为了有一个更干净和更有效的代码,你可以将你的数据透视表声明为Dim PvtTbl as PivotTable,然后设置它Set PvtTbl = ActiveSheet.PivotTables("PivotTable1"),然后你可以使用它PvtTbl.PivotCache.Refresh等等...... . 或者你也可以使用With PvtTbl 并将所有命令嵌套在下面
  • @ShaiRado - 谢谢,我已经清理了我的代码来执行此操作。

标签: excel date filter pivot-table vba


【解决方案1】:

解决此问题的方法是,我们应该在过滤之前清除应用于该字段的所有过滤器,以便清除该字段的所有过滤器。 像这样……

set pf = pt.pivotfields("FilmReleaseDate")
pf.clearallfilters

【讨论】:

    【解决方案2】:

    这是修改后的工作代码,遵循@MP24 在此question 中提供的答案。

    Sub FilterPivotfromCell()
    
    Dim Invoice_Start_Date As Date
    Dim Invoice_End_Date As Date
    
    
    Invoice_Start_Date = CDate(Worksheets("Control").Cells(3, "E").Value)
    
    Invoice_End_Date = CDate(Worksheets("Control").Cells(3, "G").Value)
    
    Sheets("Pivot").Select
    
    MsgBox IsDate(Invoice_End_Date)
    MsgBox IsDate(Invoice_Start_Date)
    
    
    ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").ClearAllFilters
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add _
    Type:=xlDateBetween, Value1:=CLng(Invoice_Start_Date), Value2:=CLng(Invoice_End_Date)
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 2012-04-04
      • 1970-01-01
      • 2021-11-28
      • 2015-04-18
      • 1970-01-01
      相关资源
      最近更新 更多