excel 2013文本框VBA上出现1004错误

时间:2013-12-03 04:30:51

标签: excel vba ms-office

我想运行一个简单的脚本,我会进一步增强。昨天我曾为自动过滤器做过类似的工作,但我把它放错了地方,并且很难找到解决方案。我想使用活动的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

我相信我昨天的解决方案与激活文本框有关。但不能完全记住。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您的子程序必须放在Worksheet的代码模块中。我相信错误正在发生,因为_Change事件会因每次键击而触发,因此第一次击键很可能会创建TextBox1.TextPivotItems中的任何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