获取"无法设置PivotField类的CurrentPage属性"错误

时间:2016-01-15 18:11:40

标签: excel vba excel-vba

我尝试使用VBA根据用户从单元格条目中的选择自动更新数据透视表过滤器。我相信一切都正常工作到第11行,其中" Field.CurrentPage = NewCat"。这就是问题所在。代码按照前一行中的说明清除我的过滤器,但是当它到达指示它选择新数据的代码时,我得到的错误是读取"运行时错误1004.无法设置PivotField类的CurrentPage属性&# 34。

以下是我到目前为止的内容,我只是在查看如何修改第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

6 个答案:

答案 0 :(得分:2)

答案只是语法问题。

如果你改变:

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

为:

With Field
    .ClearAllFilters
    .CurrentPage = NewCat
End With

pt.RefreshTable

它会起作用。

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

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

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

pt.RefreshTable

所以,你基本上需要直接使用对象,你需要用.

来限定对象,属性,方法等。

答案 1 :(得分:1)

我使用了以下代码并更改了字段 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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

我遇到了类似的问题,并且找到了一种对我有用的解决方案,而上述方法似乎都不可行。这就是我要更改的内容:

standard-object

收件人:

const Realm = require("realm");
class ActiveJobsScreen extends Component {
constructor(props) {
    this.state = {
        realm: [],
        searchText: ''
    };
    Realm.open(allJobsDBOption).then(realm => {
        this.setState({realm})
    })
}

render() {
    return (
        <View>
            <TextInput
              style={{height: 40, borderColor: 'gray', borderWidth: 1}}
              onChangeText={(text) => this.setState({searchText})}
              value={this.state.searchText}
            />
            <FlatList
                data={this.state.realm.objects('jobData').filtered(`description CONTAINS[c] $0 `, this.state.searchText)}

                renderItem={({item, index}) => this.renderJob(item, index)}
                keyExtractor={(item, index) => index.toString()}
            />          
        </View>
    )
  }
renderJob(item, index){
   return (
      <Text>Job description{item.description}</Text>
   )
  }
 }
}

答案 4 :(得分:0)

我在这里尝试了几个答案,但都没有运气。然后我循环遍历 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

然而,因为我真的只想要一个值,所以我回过头来处理不需要的空间。

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

答案 5 :(得分:-2)

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

'Dim NewCat As String