在Excel VBA中连续两次(或更多)调用子例程时出现错误1004

时间:2013-10-14 19:46:54

标签: vba excel-vba excel

我一直在努力解决这个错误大约一个半小时但一直无法找到答案。也许你可以帮助我。

我有一个短子,用于在工作表中找到标有“过滤器”的列。它打开该列的自动过滤器并隐藏它。

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}}事件。

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