我尝试使用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
答案 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
答案 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