有人可以暗示我可能在这里做错了吗?现在我正在有效地尝试使用Ctrl-A命令对vba中的数据块进行全部选择。然后我希望将选择保存为范围,以便我以后可以使用它。
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) //<---
指向的行给了我同样的错误。
答案 0 :(得分:2)
Range(rngAdData)
正在向范围提供范围。只需使用rngAdData.AdvancedFilter
对于你的第二个问题,这是同样的想法。请改用此语法。
With ActiveWorkbook.Worksheets("....").Sort
.SetRange Selection
据说,除了使用Select
或Selection
语句之外,您应该使用其他方法获得所需范围。像这样的东西应该更好用
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
答案 1 :(得分:1)
尝试以下代码:
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