【问题标题】:Excel VBA Error 1004 cant set visibilityExcel VBA 错误 1004 无法设置可见性
【发布时间】:2015-11-22 20:42:40
【问题描述】:

我在使用 excel vba 时遇到了一个奇怪的错误。我正在尝试在日期值的数据透视表中将可见性设置为 false。我的代码在虚拟表上运行良好,但在我的真实表上返回错误 (1004)。

Sub MultiItemPivotFilter2()
Dim PI As PivotItem


Sheets("Pivot_stocks_1").PivotTables("Pivot_Stocks_1").RefreshTable


 For Each PI In Sheets("Pivot_stocks_1").PivotTables("Pivot_Stocks_1").PivotFields("date2").PivotItems


 If DateValue(PI.Name) < DateValue(Sheets("Pivot_stocks_1").Range("J13").Value) Then

             PI.Visible = False
          Else
              PI.Visible = True
          End If

    Next PI
End Sub

错误发生在PI.Visible = False

(无法设置 PivotItem 类的 Visible 属性)

【问题讨论】:

  • 尝试在RefreshTable之前添加pt.PivotCache.MissingItemsLimit = xlMissingItemsNone

标签: vba excel


【解决方案1】:

您应该始终执行 select true 循环,然后执行 select false 循环。原因是 Excel 一次只做一个,并且不允许您将所有内容都隐藏在数据透视表中,它会出错(或者您有什么错误),所以:

Sub MultiItemPivotFilter2()
    Dim PI As PivotItem

    With Sheets("Pivot_stocks_1").PivotTables("Pivot_Stocks_1")
        .RefreshTable

        'Loop first setting all to "True"
        For Each PI In .PivotFields("date2").PivotItems
            PI.Visible = True
        Next PI

        'Loop then setting any "False"
        For Each PI In .PivotFields("date2").PivotItems
            If DateValue(PI.Name) < DateValue(Sheets("Pivot_stocks_1").Range("J13").Value) Then
               PI.Visible = False
            End If
         Next PI
    End With
End Sub

希望这是有道理的!

编辑

即使它不能解决您的问题,您也应该在隐藏 pivotItems 时始终实现此逻辑

【讨论】:

    【解决方案2】:

    也许这会对你有所帮助:

    unable to set the visible property of the pivotitem class

    Excel 有时不会从数据透视表所基于的数据透视缓存中删除旧条目。因为某些项目可能存在于源数据中,但 Excel 将其保存在缓存中以进行优化。刷新缓存不能解决问题。唯一的方法是删除缓存并重新创建它。

    【讨论】:

    • 它没有解决错误。难道还有别的原因?
    猜你喜欢
    • 1970-01-01
    • 2015-12-29
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多