通过VBA更改数据透视表日期范围过滤器时出错

时间:2015-01-22 22:05:47

标签: vba date excel-vba excel-2010 excel

在Excel 2010中,我在电子表格中创建了以下“SelectionChange”子例程:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect(Target, Range("i3:i4")) Is Nothing Then
    'Error happens here vvvvvvvv
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Date").PivotFilters.Add _
      Type:=xlDateBetween, Value1:=Range("i3").value, Value2:=Range("i4").value
  End If
End Sub

当我尝试执行代码时,我得到Run-time error '1004': Application-defined or object-defined error

我在网上看到了很多这样做的例子,代码是通过cut'n paste来实现的。此代码的一些示例是herehere

我在SO上看过一些类似的问题,特别是herehere,但是,这些问题似乎都没有得到功能性的答案,并且尝试了这些改变并没有帮助

我的日期是'简单'日期,即没有时间组件存储在其中(当我点击下拉列表时,我只得到一个日期列表,他们旁边没有扩展'+'每天多次)。 我输入的有效日期与日期在数据中的格式相同。

我注意到IntelliSense没有大写.value,但错误是

我将数据从工作簿中的一个工作表拉到同一工作簿中另一个工作表的数据透视表中。我计划有第三个工作表或表单,用户将在其中输入日期范围以过滤数据透视中的数据,因为数据透视过滤器不提供选择日期组的简单方法。我知道我可以使用“群组”功能,但是,我不一定会拉一整个月的日期,我需要在上个月通过本月随机的一天随机获取它。

/注意:这是一个标准的数据透视表,而不是Power Pivot。

1 个答案:

答案 0 :(得分:0)

发生在我身上。我的修复是清除透视过滤器并使用像你的代码,除了我转换为值到日期(因为我也按日期过滤)...看起来像这样

ActiveSheet.PivotTables("ptData").PivotFields("Date_Opened").ClearAllFilters

ActiveSheet.PivotTables("ptData").PivotFields("Date_Opened").PivotFilters.Add _
    Type:=xlDateBetween, Value1:=CVDate("2/23/2015"), Value2:=CVDate("4/6/2015")