将select设置为范围

有人可以提示我可能在这里做错了吗? 现在我正在有效地尝试做一个Ctrl-A命令来做一个全选的数据块的vba。 然后我希望将这个select保存为一个范围,以便以后使用。

Dim rngAdData As Range ..... Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Set rngAdData = Selection Range(rngAdData).AdvancedFilter Action:=xlFilterInPla.... //<---- 

最后一行给我一个run-time error '1004': Method 'Range' of object 'Global' failed

当我这样做,它的工作原理

 Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).AdvancedFilter Action:=xlFilterInPla.... 

但是这样做是麻烦的,因为我需要在这里再次使用该范围

 With ActiveWorkbook.Worksheets("....").Sort .SetRange Range(Selection) //<--- 

被指出的线给了我同样的错误。

Range(rngAdData)将范围馈送到一个范围。 只需使用rngAdData.AdvancedFilter

你的第二个问题是一样的。 改用这个语法。

 With ActiveWorkbook.Worksheets("....").Sort .SetRange Selection 

有了这个说法,你应该使用另一种方法来获得你想要的范围,而不是使用SelectSelection语句。 像这样的东西应该更好地工作

 Dim rngAdData As Range Dim sht As Worksheet, bottomMostRow As Long, rightMostColumn As Long Set sht = ActiveSheet With sht bottomMostRow = .Cells(1, 1).End(xlDown).Row rightMostColumn = .Cells(1, 1).End(xlToRight).Column Set rngAdData = .Range(.Cells(1, 1), .Cells(bottomMostRow, rightMostColumn)) End With 

尝试下面的代码:

 Sub sample() Dim rng As Range Range("A1").Select Set rng = Range("A1").CurrentRegion rng.AdvancedFilter xlFilterInPlace, Sheets("sheet1").Range("E7:H8"), False End Sub