Excel VBA:高级筛选器将数据复制到另一个工作簿

时间:2014-10-16 14:59:21

标签: excel vba excel-vba

我有一个工作簿,在一个工作表上有一个搜索界面,在另一个工作表上有一个数据库。 这是我用来在数据库上执行高级过滤器的代码,它返回搜索界面工作表上的值:

Private Sub Find_Click()
    Sheet2.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Sheet4.Range("V1:AE2"), CopyToRange:=Sheet4.Range("E1:T1"), Unique:=False
End Sub

我现在正在尝试将2个工作表拆分为2个工作簿。因此,将对工作簿“数据”中包含的数据执行高级筛选,并将结果返回到工作簿“SearchInterface”。 这两本工作簿将始终同时打开。

我尝试插入变量:

Private Sub Find_Click()
Set wbSearch = ThisWorkbook
Set wbData = Workbooks("GAL_db.xlsx")

        wbData.Sheet2.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy,
        CriteriaRange:=wbSearch.Sheet4.Range("V1:AE2"), CopyToRange:=wbSearch.Sheet4.Range("E1:T1"), Unique:=False

End Sub

上出现语法错误
wbData.Sheet2.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy

我尝试了很多东西,但没有任何作用。不是太知识渊博,我几乎在黑暗中拍摄。任何帮助或方向将不胜感激。

== UPDATE ===

感谢输入Rory! 我按照建议更改了代码:

Private Sub Find_Click()
Set wbData = Workbooks("GAL_db.xlsx")

        wbData.Sheets("Sheet2").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy,
        CriteriaRange:=Sheet4.Range("V1:AE2"), CopyToRange:=Sheet4.Range("E1:T1"), Unique:=False

End Sub

现在我再次遇到语法错误:

wbData.Sheets("Sheet2").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy,

Private Sub Find_Click()以黄色突出显示...

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找两种解决方案的组合......

Private Sub Find_Click()
Set wbSearch = ThisWorkbook
Set wbData = Workbooks("GAL_db.xlsx")

        wbData.Sheets("Sheet2").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy,
        CriteriaRange:=wbSearch.Sheets("Sheet4").Range("V1:AE2"), CopyToRange:=wbSearch.Sheets("Sheet4").Range("E1:T1"), Unique:=False

End Sub

答案 1 :(得分:0)

好吧,通过反复试验我得到了它的工作! Yeeey!不知道为什么,但它只有在我将Sheet4引用为工作表(1)时才有效。以下代码适用于我的目的:

Private Sub Find_Click()
Dim wbData As Range
Dim wbCriteria As Range
Dim wbExtract As Range

Set wbData = Workbooks("GAL_db.xlsx").Worksheets("data").Range("A1")
Set wbCriteria = ThisWorkbook.Worksheets(1).Range("V1:AE2")
Set wbExtract = ThisWorkbook.Worksheets(1).Range("E1:T1")

        wbData.CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=wbCriteria, CopyToRange:=wbExtract, Unique:=False

End Sub