【问题标题】:excel: run time error 1004 in advanced filterexcel:高级过滤器中的运行时错误1004
【发布时间】:2017-06-13 18:59:45
【问题描述】:

我有这张表,我在其中应用了一系列潜艇来获得我想要的东西。最后一个是高级过滤器。

您可以在下面看到我的主工作表:

我的标准是 C31:K32 并且应该从第 38 行粘贴结果。它从名为 AUX 的表格中获取信息:

完整代码如下:

Sub FiltroAloc()

Dim i As Long
Dim j As Long
Dim Lastrow As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet
Dim res

Set ws1 = Sheets("CONSULTA")
Set ws2 = Sheets("BASE_TOTAL_ATUAL")
Set ws3 = Sheets("AUX")



    For i = 1 To 100
        For j = 1 To 11
            If ((ws1.Cells(29, 5).Value < ws2.Cells(i, 7).Value) And (ws1.Cells(29, 6).Value > ws2.Cells(i, 7).Value)) Or ((ws1.Cells(29, 5).Value < ws2.Cells(i, 8).Value) And (ws1.Cells(29, 6).Value > ws2.Cells(i, 8).Value)) Then
                ws3.Cells(i, j) = ws2.Cells(i, j).Value
            ElseIf (ws1.Cells(29, 5) = "") And (ws1.Cells(29, 6) = "") Then
                ws3.Cells(i, j) = ws2.Cells(i, j).Value
            End If
        Next j
    Next i

    Call Esvaziar

End Sub

Sub Esvaziar()

Dim r As Range, rows As Long, i As Long
Dim ws As Worksheet

Set ws = Sheets("AUX")
Set r = ws.Range("A1:K450")

rows = r.rows.Count

    For i = rows To 1 Step (-1)
        If WorksheetFunction.CountA(r.rows(i)) = 0 Then
        r.rows(i).Delete

        End If
    Next

    Call AutoFilter

End Sub

我所有的代码都可以正常工作!之后,我开始将我的高级过滤器记录为带有自动过滤器名称的宏。

当我完成录制后,它工作正常并加载了所有信息,因为我在没有任何条件的情况下录制了它。

问题出在我按下“过滤器”按钮时。它给了我

运行时错误“1004” - 对象“_Global”的方法“范围”失败

这就是代码:

Sub AutoFilter()
'
' AutoFilter Macro
'

'
    Sheets("AUX").Range("A1:K176").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:="CONSULTA!Criteria", CopyToRange:=Range("CONSULTA!Extract") _
        , Unique:=False
    ActiveWindow.SmallScroll Down:=-21
    Range("G3").Select
End Sub

还有高亮部分:

Sheets("AUX").Range("A1:K176").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:="CONSULTA!Criteria", CopyToRange:=Range("CONSULTA!Extract") _
        , Unique:=False

我尝试了很多东西,但我想我错过了一些东西。我不知道在哪里可以找到我的范围问题...任何建议将不胜感激。

【问题讨论】:

  • 试试CriteriaRange:=worksheets("CONSULTA").Range("Criteria") 和CopyToRange:=worksheets("CONSULTA").Range("Extract")。
  • 您可能希望避免使用 VBA 命令名称来命名您的子例程...
  • 我没有意识到......我想我会改变这个名字。
  • @Jeeped 很抱歉花了很长时间来验证这一点,但现在它正在工作!谢谢你。在我不需要以这种方式在高级过滤器中定义标准之前。

标签: vba excel


【解决方案1】:

试试CriteriaRange:=worksheets("CONSULTA").Range("Criteria") 和CopyToRange:=worksheets("CONSULTA").Range("Extract")

Sheets("AUX").Range("A1:K176").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=worksheets("CONSULTA").Range("Criteria"), _
    CopyToRange:=worksheets("CONSULTA").Range("Extract"), Unique:=False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多