数据透视表日期过滤器问题(非有效日期)

时间:2016-11-15 12:22:48

标签: excel excel-vba date filter pivot-table vba

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

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的细胞含量是2016年10月1日,G3的细胞含量是31/10/2016。

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

编辑2:嗯,你不知道吗?多一点谷歌搜索并提出解决方案here。基本上在数据透视过滤器中的日期周围添加clng格式已经成功了吗?

1 个答案:

答案 0 :(得分:1)

以下是修订后的工作代码,遵循@ 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
相关问题