将选择设置为范围

3

请问我在这里做错了什么?目前我正在尝试使用VBA执行Ctrl-A命令,以便选择一块数据。然后我希望将所选择的内容保存为一个区域,以便稍后使用。

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....  //<----

最后一行给了我一个“运行时错误1004:对象'Global'的方法'Range'失败”

当我按照以下方式操作时,它可以正常工作

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个回答

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

你为我打开了一扇大门,非常感谢。自从上一个VBA项目以来已经有一段时间了。只是有一个小问题,.Select语句是否不好? - mango
2
@mango 它们速度慢且不可靠。最好纯粹地在代码中明确表达您想要的,而不是依赖光标位置的变化。这样,您的代码就不会容易受到某人在执行过程中点击鼠标而导致一切混乱的影响。它还会导致屏幕变化,这也很慢。 - Brad

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

非常感谢您的帮助。但是我遇到了编译错误。在“rngAdData.AdvancedFilter”处显示参数不可选。 - mango
你想使用任何条件进行筛选吗? - user2063626
是的,我知道了,很抱歉我漏掉了:rngAdData.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= Sheets("...").Range("E7:H8"), Unique:=False - mango
请确保您已经移除了圆括号。在我的端上,这段代码可以正常工作。 - user2063626
如果您按原样尝试此代码,我认为您无法筛选单个单元格。实际上,您至少需要多行。需要一个标题行和一些数据。 - Brad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接