2

有人可以提示我在这里可能做错了什么吗?现在我正在有效地尝试执行 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) //<---

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

4

2 回答 2

2

Range(rngAdData)正在将范围提供给范围。只需使用rngAdData.AdvancedFilter

你的第二个问题也是同样的想法。请改用此语法。

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

话虽如此,您应该使用其他方法来获得所需范围,而不是使用SelectorSelection语句。像这样的东西应该会更好

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
于 2013-02-28T16:47:16.100 回答
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
于 2013-02-28T16:42:32.260 回答