将选择设置为范围

时间:2013-02-28 16:35:53

标签: excel excel-vba vba

有人可以暗示我可能在这里做错了吗?现在我正在有效地尝试使用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) //<---

指向的行给了我同样的错误。

2 个答案:

答案 0 :(得分:2)

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

答案 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