【发布时间】: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