我一直在努力解决这个错误大约一个半小时但一直无法找到答案。也许你可以帮助我。
我有一个短子,用于在工作表中找到标有“过滤器”的列。它打开该列的自动过滤器并隐藏它。
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'的方法'范围'失败。”然后调试器将我指向以下行
target.Range(Columns(clm), Columns(clm)).AutoFilter Field:=1, Criteria1:="Show"
如果我一次只做一张,我可以成功为所有工作表运行FilterHide()
。只有当我多次调用它时才会出现错误。我的最终目标是为大约7种不同的工作表创建一个运行Worksheet_Deactivate()
的{{1}}事件。
答案 0 :(得分: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