0

我已经为这个错误苦苦挣扎了大约一个半小时,但一直找不到答案。也许你能帮帮我。

我有一个简短的子程序,可以在工作表中找到标有“过滤器”的列。它打开该列的自动过滤器并将其隐藏。

Sub Test1()

    Call FilterHide(Worksheets("Integration"))
    Call FilterHide(Worksheets("Integration Matrix"))

End Sub

Sub FilterHide(ByVal target As Worksheet)
'
'Searches for filter column, then autofilters selection to show only "Show"

    Dim clm As Integer

    If IsError(Application.Match("Filter", target.Range("1:1"), 0)) Then
        Exit Sub
    End If

    clm = Application.Match("Filter", target.Range("1:1"), 0)
    target.Range(Columns(clm), Columns(clm)).AutoFilter Field:=1, Criteria1:="Show"
    target.Range(Columns(clm), Columns(clm)).EntireColumn.Hidden = True

End Sub

当我调用一次时,'FilterHide()' 工作正常。但是,当我尝试从另一个具有不同工作表的子系统调用它两次时,它会中断(例如上面的'Test1()')。我收到“运行时错误 1004:对象 '_Worsksheet' 的方法 'Range' 失败。” 然后调试器将我指向以下行

target.Range(Columns(clm), Columns(clm)).AutoFilter Field:=1, Criteria1:="Show"

FilterHide()如果我一次做一张,我可以成功地运行所有工作表。只有当我多次调用它时才会出错。我的最终目标是创建一个Worksheet_Deactivate()运行FilterHide()大约 7 个不同工作表的事件。

4

1 回答 1

1
target.Range(Columns(clm), Columns(clm)).AutoFilter 

这里的不合格Columns(clm)将指 ActiveSheet,而不是target.

你需要:

target.Range(target.Columns(clm), target.Columns(clm)).AutoFilter

但这减少到

target.Columns(clm).AutoFilter
于 2013-10-14T19:51:04.133 回答