对象'_Worksheet'的方法'Range'失败 – 命名范围并在VBA中引用它

在一个macros中,我试图select一个范围,命名它,然后在自动过滤数据时引用该范围。 这是我的代码:

'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 

当我运行macros时,我得到了对象“_Worksheet”失败的“方法范围”,debugging器突出显示了第二块代码的第一行作为罪魁祸首。 我一直没能在这样的过滤数据网上find任何例子,所以我希望有任何的洞察力,我做错了什么。 谢谢!

myrange是一个Range而不是一个String。 因此,更换:

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

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

应该

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

为了后代,我向你介绍我的更新代码。 它包括replace所有.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 

我发现logging的macros的filter部分需要加倍的引号是非常奇怪的

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

但是当以命名范围开始时需要单引号(参见上面的第7行)。