我有一个要求,基于用户在另一个工作表(控制)中输入的日期过滤工作簿中的现有数据透视表(数据透视'工作表中的数据透视表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消息框在两种情况下都会返回为'True',但是,在运行宏时,一旦发现数据透视表被过滤的部分,我会收到消息'运行时错误'1004' :您输入的日期不是有效日期,请重试。'
我想知道这个问题是否与英国的区域设置有关,因为我知道我以前有过这个问题
此外,为了澄清,E3的单元格内容为01/10/2016,G3的单元格内容为2016年10月31日。
编辑:我试过了以下建议here,但它没有任何区别。我的数据透视表的来源也包括空行,但我试图限制它只是数据,它没有任何区别。
编辑2:那么,你不知道它。多一点谷歌搜索,并提出了解决方案here。基本上在透视过滤器的日期周围添加clng格式已经做到了诀窍?
只是为了有一个更清洁,更有效的代码,你可以声明你的数据透视表像'昏暗PvtTbl为PivotTable',然后将其设置'设置PvtTbl = ActiveSheet.PivotTables(“PivotTable1”)',而以后就可以使用它'PvtTbl.PivotCache.Refresh'等......或者你也可以使用'With PvtTbl'并嵌套在 –
@ShaiRado下的所有命令 - 谢谢,我已经清理了我的代码,现在就完成这个任务。 – bawpie