2017-06-13 114 views
2

我有这张表,我应用了一系列子工来得到我想要的。最后一个是高级过滤器。excel:高级过滤器中的运行时错误1004

你可以看到我的主片是如何下面:

enter image description here

我的标准是C31:K32,结果应该由线38粘贴它从该表称为信息AUX

enter image description here 完整的代码如下:

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 

我所有的代码都能正常工作!之后,我开始使用AutoFilter名称将我的高级过滤器录制为宏。

当我完成记录时,它工作正常,并加载所有信息,因为我没有在我的标准中记录它。

问题是当我嘲笑我的“Filtrar”按钮。它给了我

运行时错误 '1004' - 的object'_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 

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

+0

用'CriteriaRange尝试:=工作表( “CONSULTA”)范围( “标准”)'和'CopyToRange:=工作表( “CONSULTA”)范围( “提取”)'。 – Jeeped

+0

您可能想要避免使用VBA命令名命名您的子程序... –

+0

我没有意识到......我想我会改变这个名称。 – paulinhax

回答

2

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