【发布时间】:2020-12-23 10:54:50
【问题描述】:
我正在尝试编写一个 VBA 脚本来根据两个单元格中的值更新数据透视表的过滤器,但我不断收到 1004 运行时错误。我已经根据其他问题的答案尝试了各种方法,但我仍然无法弄清楚问题所在。
注意:我读到有时会发生错误,因为数据透视表需要至少一个可见值,但即使我设置 Visible = True 也会发生此错误
VBA 代码:
Private Sub PageItemFilter()
Dim pvtF As PivotField
Dim pvtI As PivotItem
Dim startDate As Date
Dim endDate As Date
Dim filterDate As Date
startDate = Range("start_date").Value
endDate = Range("end_date").Value
Set pvtF = Worksheets("selection").PivotTables("PivotTable1").PivotFields("[tbl_Main].[TransactionDate].[TransactionDate]")
pvtF.ClearAllFilters
For Each pvtI In pvtF.PivotItems
filterDate = DateValue(Mid(pvtI.Name, 24, 10))
If filterDate >= startDate And filterDate <= endDate Then
Debug.Print (pvtI.Name)
Debug.Print (TypeName(pvtI))
Debug.Print (pvtI.Visible)
pvtI.Visible = True
Else
pvtI.Visible = False
End If
Next pvtI
End Sub
输出(第一项):
[tbl_Main].[TransactionDate].&[2019-08-05T00:00:00]
PivotItem
True
错误:Run-time error '1004': Application-defined or object-defined error
【问题讨论】:
-
我不明白为什么我可以读取变量
pvtI.Visible但我无法设置它。如果有其他方法可以解决这个问题,即使它不是 VBA 解决方案,我也很乐意尝试 -
如果 visible 属性已经可见,为什么不跳过设置(并且您刚刚清除了所有过滤器,所以在您进入循环之前所有项目都可见)?
-
@TimWilliams 我可以,但它仍然会在
pvtI.Visible = False上引发错误。我发现代码只遍历已经可见的项目(如果我不清除所有过滤器),我想知道这是否不是问题所在的线索? -
对不起,我没有想法,没有数据透视表就无法真正进行测试。也许看看这里:stackoverflow.com/questions/49453039/…
-
@TimWilliams 非常感谢!!看起来这就是答案。我会尝试一下,然后发布我的发现。感谢您的帮助!