2013-10-15 102 views
0

在一个单独的宏,我想选择一个范围,名称,然后自动筛选数据时,请参考该范围。这里是我的代码:Method对象的“范围”“_Worksheet”失败 - 命名范围,并提到它在VBA

'Select and name range 
Set bDataDump = ActiveWorkbook 
Set DataDump = bDataDump.Sheets(1)  
DataDump.Range("A1").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Selection.AutoFilter 
Range(Selection, Selection.End(xlDown)).Select 
Set myrange = Selection 

'AutoFilter that range for everything but PDC1 and delete visible rows 
    'Code fails on next line 
DataDump.Range("myrange").AutoFilter field:=11, Criteria1:="<>""PDC1""" 
ActiveCell.Range("A2").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.EntireRow.Delete 
DataDump.ShowAllData 

我得到的“方法‘范围’对象的‘_Worksheet’失败”当我运行宏,调试器突出了代码的第二块作为罪魁祸首的第一道防线。我一直没能在这样的过滤数据网页上找到任何示例,所以我很感谢任何有关我在做什么错误的见解。谢谢!

+5

哇 - 更多'Select's比行代码 - [亚洲时报Siddharth溃败(http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select)不会批准! – pnuts

+0

笑@ PNUTS:你让我看起来像一个魔鬼:):@SMPerron [有趣的阅读](http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select) –

+1

@pnuts:哦,你已经提到了这个链接。糟糕... –

回答

3

myrange是一个范围,而不是一个字符串。因此取代:

DataDump.Range("myrange").AutoFilter field:=11, Criteria1:="<>""PDC1""" 

myrange.AutoFilter field:=11, Criteria1:="<>""PDC1""" 
+0

+ 1用于解释问题:) –

+0

现在变得非常有意义。谢谢! –

3
DataDump.Range("myrange").AutoFilter field:=11, Criteria1:="<>""PDC1""" 

应该

myrange.AutoFilter field:=11, Criteria1:="<>""PDC1""" 
+0

+ 1 for first in:p –

0

对于后人,我向你们介绍我的更新的代码。它包括替换所有.Select报表。

Set bDataDump = ActiveWorkbook 
Set DataDump = bDataDump.Sheets(1) 
Set myrange = DataDump.Range("A1") 
Set myrange = Range(myrange, myrange.End(xlToRight)) 
Set myrange = Range(myrange, myrange.End(xlDown)) 
' 
myrange.AutoFilter field:=12, Criteria1:="<>PDC1" 
Set dltrng = DataDump.Range("A2") 
Set dltrng = rnage(dltrng, dltrng.End(xlDown)) 
dltrng.EntireRow.Delete 
DataDump.ShowAllData 

我觉得很奇怪,有一个命名的范围(见上文第7行)启动时所需的录制宏的过滤器部分翻倍行情

ActiveSheet.Range("$A$1: ... Criteria1:="<>""PDC1"""

,但需要单引号。

相关问题