数据透视表设置为false - 使用变量时出错

时间:2014-02-10 20:46:13

标签: excel-vba pivot case vba excel

尝试解决我在运行下面的特定变体时收到的错误消息。以下实际上是完美的,我从Sidarth的评论中使用了它。但是,问题出现在以下情况之后:

Sub test()
Dim table As PivotTable
Dim PvI As PivotItem

Set table = Worksheets("Sheet1").PivotTables("PivotTable1")
With table.PivotFields("Week")
For Each PvI In .PivotItems
    Select Case PvI.Name
    Case "6", "7"
        PvI.Visible = True

    Case Else
        PvI.Visible = False

    End Select
Next
End With

当我尝试更换

   Case "6", "7"

通过类似的方式尝试使标准变得灵活:

   Case Cells(2, 10).Value + 1

或者

   Case "cells(2,10).Value", "Cells(3,10).value"

以下行错误:

    PvI.Visible = False

出现以下错误:

“无法设置pivotitem类的可见属性”

您是否知道为什么当我使用多个单元格引用时,或者甚至在语法中添加看似谨慎的“+1”时,它不会让我将其余部分设置为false。作为旁注,如果我消除Case Else以下的所有内容,它会起作用,然而,这对我没有任何好处,因为除了所选标准之外我想要隐藏所有内容。有什么想法吗? (非常感谢)。

2 个答案:

答案 0 :(得分:0)

有趣。

所以我在这个问题上所做的工作是在单元格J2中(由单元格(2,10)引用.value 我把我的一周。然后在J3(现在称为单元格(3,10).value我把= j2 + 1

然后,我在VB中使用了“TO”关键字,如下所示,它有效!很甜蜜。看起来像一个漂亮的盗版解决方法。

    With table.PivotFields("Week")
    For Each PvI In .PivotItems
        Select Case PvI.Name
        Case Cells(2, 10).Value To Cells(3, 10).Value
            PvI.Visible = True
        Case Else
            PvI.Visible = False
        End Select
    Next
End With

答案 1 :(得分:0)

我不确定为什么Case Cells(2, 10).Value + 1不起作用...我想到的一件事是它发生的原因是在设置可见属性之后一些PivotItem你没有可见的项目,你至少需要一个。其他解释是PivotItem的名称是字符串而 Case 是一个数字,但VBA应该隐式转换数据类型。我仍然建议使用CStr函数进行说明。现在

Case "cells(2,10).Value", "Cells(3,10).value"

是完全错误的,因为您正在根据文字字符串检查PivotItem值,而不是单元格的值。

顺便说一句,看看以下语法:

PI.Visible = (PI.Value = "6" Or PI.Value = "7")