我想运行一个简单的脚本,我会进一步增强。昨天我曾为自动过滤器做过类似的工作,但我把它放错了地方,并且很难找到解决方案。我想使用活动的x文本框来过滤数据透视表。我已经尝试更改模块的位置以及使用acitveworkbook和activesheet和我,但似乎都返回1004错误。我可以确认文本框在页面上以及数据透视表。这是办公室13。
Private Sub TextBox1_Change()
ActiveSheet.PivotTables("PivotTable2").PivotFields("Agency").ClearAllFilters
ActiveSheet.PivotTables("PivotTable2").PivotFields("Agency").CurrentPage = ActiveSheet.TextBox1.Text
End Sub
我相信我昨天的解决方案与激活文本框有关。但不能完全记住。
非常感谢任何帮助。
答案 0 :(得分:0)
您的子程序必须放在Worksheet的代码模块中。我相信错误正在发生,因为_Change
事件会因每次键击而触发,因此第一次击键很可能会创建TextBox1.Text
值不与PivotItems
中的任何PivotField
相对应。
你可以这样做。使用_GotFocus
事件提供输入提示。然后,该子例程将通过将输入值分配给TextBox1_Change
隐式地引发TextBox1.Text
事件。
Private Sub TextBox1_GotFocus()
Dim str$
str = InputBox("Please enter a value", "Pivot Field filter")
TextBox1.Text = str
End Sub
我暂时禁用错误处理(On Error Resume Next
)以分配过滤器。然后我检查是否发生了错误,您可以(可选)通知用户他们提供的标准无效。
Sub TextBox1_Change()
Dim pt As PivotTable
Dim fld As PivotField
Set pt = PivotTables("PivotTable2") 'Modify as needed
Set fld = pt.PivotFields("Agency")
With fld
.ClearAllFilters
On Error Resume Next
.CurrentPage = TextBox1.Text
.Orientation = xlPageField
.Position = 1
If Err.Number <> 0 Then
'you may want to include a prompt here, i.e.:
MsgBox "Invalid Filter!", vbInformation
Exit Sub
End If
On Error GoTo 0
End With
End Sub