2014-10-16 138 views
0

让我首先承认我是VBA的新手(虽然我已经设法使用本网站的最后2条年份)。但我完全跺脚在这一个。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”。 2个工作簿将始终在同一时间打开。

我试图把各种变量:在

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

我试过很多东西,但没有任何工程

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 

获取语法错误。不是太知识渊博,我几乎在黑暗中拍摄。任何帮助或方向将不胜感激。

== UPDATE ===

感谢输入罗里! 我改变了代码的建议是:

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()以黄色突出显示...

+0

错误消息和在哪一行? – 2014-10-16 15:14:35

+3

您不能在其他工作簿中使用工作表的代号(除非您有参考集),因此您需要使用'wbData.Sheets(“Sheet2”)'而不是'wbData.Sheet2'(调整工作表名称有必要的)。 – Rory 2014-10-16 15:16:37

+0

改变'表(“Sheet2的”)之后'我现在得到一个编译错误:预期表达式后“CriteriaRange:=” – acadie 2014-10-16 15:43:17

回答

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 
0

我想您正在寻找2种解决方案的组合...

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 
+0

thx为输入Rude Dawg!但我仍然得到了'wbData.Sheets(“Sheet2”)行的语法错误。Range(“A1”)。CurrentRegion.AdvancedFilter Action:= xlFilterCopy,'。我应该以另一种方式来接近这个任务吗? – acadie 2014-10-16 18:38:44

+0

您收到的确切错误是什么?也许截图? – 2014-10-16 18:53:18

+0

得到“编译错误:语法错误” – acadie 2014-10-16 19:02:55

相关问题