【问题标题】:Error changing Pivot Table date range filters via VBA通过 VBA 更改数据透视表日期范围过滤器时出错
【发布时间】:2015-01-22 22:05:46
【问题描述】:

在 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。

【问题讨论】:

  • 数据存储在哪里? ActiveSheet 中是否存在任何数据透视表?
  • 最后一段详细说明了数据的存储位置,是的,最后一行中提到了一个数据透视表。

标签: vba date excel excel-2010


【解决方案1】:

它发生在我身上。我的解决方法是清除数据透视过滤器并使用像你这样的代码,除了我将值转换为日期(因为我也在按日期过滤)......看起来像这样

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")

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 2015-04-18
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多