【问题标题】:Getting "Unable to set CurrentPage property of PivotField class" error出现“无法设置 PivotField 类的 CurrentPage 属性”错误
【发布时间】:2016-01-15 18:11:40
【问题描述】:

我正在尝试使用 VBA 根据用户从单元格条目中的选择自动更新数据透视表过滤器。我相信一切正常,直到第 11 行显示“Field.CurrentPage = NewCat”。这就是问题所在。该代码按照上一行中的说明清除了我的过滤器,但是当它到达指示它选择新数据的代码时,我收到错误消息“运行时错误 1004。无法设置 PivotField 类的 CurrentPage 属性”。

以下是我目前所拥有的内容,我只是在寻找如何修改第 11 行,以便它选择要在数据透视表过滤器中使用的新输入。我很感激我能得到的任何帮助。我对 vba 很陌生,并且为此苦苦挣扎了太久!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Intersect(Target, Range("C3:C4")) Is Nothing Then Exit Sub

Dim pt As PivotTable
Dim Field As PivotField
Dim NewCat As String

Set pt = Worksheets("Pivot").PivotTables("PivotTable1")
Set Field = pt.PivotFields("[Range].[Site].[Site]")
NewCat = Worksheets("Interface").Range("C3").Value

With pt
Field.ClearAllFilters
Field.CurrentPage = NewCat
pt.RefreshTable
End With

End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    希望这对尝试设置 PivotField 类的“CurrentPage”属性时遇到相同“1004 错误”的人有所帮助。

    对我来说,当我将“CurrentPage”属性替换为“CurrentPageName”时,它终于起作用了:

    With pf
      .ClearAllFilters
      MsgBox "The PivotField is: " & pf.Value
      MsgBox "The current PivotField value is: " & .CurrentPageName
      .CurrentPageName = NewCat
    End With
    

    我的数据透视表有所谓的“页面级过滤器”: enter image description here

    【讨论】:

    • 是的!谢谢,经过这么多搜索,这终于对我有用了!
    • 为我工作。非常感谢!
    【解决方案2】:

    答案只是语法问题。

    如果你改变:

    With pt
    Field.ClearAllFilters
    Field.CurrentPage = NewCat
    pt.RefreshTable
    End With
    

    到:

    With Field
        .ClearAllFilters
        .CurrentPage = NewCat
    End With
    
    pt.RefreshTable
    

    它会起作用的。

    请注意,我直接使用 With Block 中的 Field

    为了进一步说明,如果您将其更改为以下内容,它也会起作用:

    With pt.PivotFields(Field.Name)
        .ClearAllFilters
        .CurrentPage = NewCat
    End With
    
    pt.RefreshTable
    

    因此,您基本上需要直接使用对象,并且需要使用. 来限定对象、属性、方法/等

    【讨论】:

    • 嘿斯科特 - 非常感谢您的回答和信息。不幸的是,我仍然收到与您提供的两个替代示例相同的错误消息。我不确定这是否相关,但是在创建与之相关的数据透视表时,我在“选择是否要分析多个表”下选择了“将此数据添加到数据模型”。这是因为我需要访问数据透视表中的“不同计数”功能,该功能只有在我选择此选项时才能访问。这可能是相关的,因为当我不选择此选项时,VBA 脚本似乎可以正常工作。
    【解决方案3】:

    我使用以下代码并更改了字段name范围值

    With ActiveSheet.PivotTables("pvtTest").PivotFields("Week") 
        .ClearAllFilters 
        .PivotFilters.Add Type:=xlCaptionEquals, Value1:=ActiveSheet.Range("K1").Value 
    End With
    

    [1]http://www.ozgrid.com/forum/showthread.php?t=169855

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,并找到了一个对我有用的解决方案,因为上述方法似乎都没有。这就是我要改变的:

      NewCat = Worksheets("Interface").Range("C3").Value
      
      With pt
      Field.ClearAllFilters
      Field.CurrentPage = NewCat
      pt.RefreshTable
      End With
      

      收件人:

      NewCat = Array("[Range].[Site].&[" & Worksheets("Interface").Range("C3").Value & "]")
      
      With pt
      Field.ClearAllFilters
      Field.VisbleItemsList = NewCat
      pt.RefreshTable
      End With
      

      【讨论】:

        【解决方案5】:

        我在这里尝试了几个答案,但都没有运气。然后,我在 PivotField 下的 PivotItems 集合中运行了一个循环,以检查 Locals 窗口中的 PivotItems 属性。

        如果您首先将字段设置为像 myField 这样的变量,那么您可以这样循环:

        For Each pItem in myField.PivotItems
            debug.print "Item Caption: """ & pItem.Caption """"
            debug.print "Item Name: """ & pItem.Name """"
        Next
        

        这表明我的字段末尾有多余的空格,所以我试图在过滤器中设置的值与我的列表中的值不完全一样。

        这导致了多值选项:

        For Each pItem In myField.PivotItems
            If Not pItem.Caption Like myFilterValue & "*" Then
                pItem.Visible = False
            Else
                pItem.Visible = True
            End If
        Next
        

        但是,因为我真的只想要一个值,所以我回去处理不需要的空格。

        可能还有其他事情,但这可能是需要检查的一件事。

        【讨论】:

          【解决方案6】:

          删除NewCat 的变量声明对我有用。删除该行或将其注释掉

          'Dim NewCat As String
          

          【讨论】:

          • Option Explicit 位于代码页顶部时,这是否也有效,应该是这样吗?我对此表示怀疑,因为那时变量不会被声明。相反,请尝试使用 Dim NewCat as Variant 看看是否适合您。如果是这样,则意味着String 变量类型对于需要传递给方法的数据类型不正确...
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-22
          • 2017-07-17
          • 1970-01-01
          • 1970-01-01
          • 2016-11-29
          • 2015-07-18
          相关资源
          最近更新 更多