我需要根据用户在另一个工作表(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格式已经成功了吗?
答案 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