2016-11-15 72 views
0

我有一个要求,基于用户在另一个工作表(控制)中输入的日期过滤工作簿中的现有数据透视表(数据透视'工作表中的数据透视表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格式已经做到了诀窍?

+0

只是为了有一个更清洁,更有效的代码,你可以声明你的数据透视表像'昏暗PvtTbl为PivotTable',然后将其设置'设置PvtTbl = ActiveSheet.PivotTables(“PivotTable1”)',而以后就可以使用它'PvtTbl.PivotCache.Refresh'等......或者你也可以使用'With PvtTbl'并嵌套在 –

+0

@ShaiRado下的所有命令 - 谢谢,我已经清理了我的代码,现在就完成这个任务。 – bawpie

回答

0

这里是修订后的工作代码,由@ 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 
相关问题