获取用户选择的范围

52

如何使用VBA获取用户鼠标输入选择的单元格范围以进行进一步处理?


录制宏,执行您的操作,停止宏,然后查看生成的代码。 - Sarfraz
1
尝试过那个方法,但那会生成一个预定义的范围。我想要得到一个每次都会变化的范围。 - Talguy
1
这是因为你已经禁用了“使用相对引用”(在开发者选项卡的代码组中)。正如下面的答案所提到的,它是选择对象(一个范围实例)将被记录。 - DJ Bouche
3个回答

58

选择在VBA中是一个独立的对象,它的功能类似于Range对象。

但是,SelectionRange并不共享所有的属性和方法。为了方便使用,我们可以创建一个Range对象,并将其设置为Selection,这样就可以像处理其他范围一样对其进行编程处理。

Dim myRange as Range
Set myRange = Selection

如需更详细的阅读,请查看MSDN文章


2
当选择的类型为Range时,它缺少哪些属性和方法?我总是将其直接转换为Range类型,但只是出于兴趣。 - Anonymous Type

40
你可以遍历选择对象来查看所选内容。这里有一个来自 Microsoft 的代码片段(http://msdn.microsoft.com/en-us/library/aa203726(office.11).aspx):
Sub Count_Selection()
    Dim cell As Object
    Dim count As Integer
    count = 0
    For Each cell In Selection
        count = count + 1
    Next cell
    MsgBox count & " item(s) selected"
End Sub

选择.Count 不就足够了吗?我认为 Count 属性在选择对象上是可用的。遍历整个选择似乎是一种开销。 - Ravindra Sane
3
他只是在发布一个关于如何使用选区对象的示例。我在我的代码中使用计数属性。 - Talguy
仍然取决于您尝试使用选择做什么。如果您在枚举期间从范围中删除单元格,我不确定它是否完全可靠。虽然这超出了问题的范围。 - Anonymous Type
如何仅计算可见行数? - Amandine FAURILLOU
1
不要使用Dim cell As Object,最好使用Dim cell As Range - Leon Rom

23
这取决于你对“获取所选范围”的理解。如果你的意思是获取范围的地址(例如“A1:B1”),那么请使用Selection对象的Address属性——就像Michael所说,Selection对象很像Range对象,因此大多数属性和方法都可以在其上运行。
Sub test()
    Dim myString As String
    myString = Selection.Address
End Sub

3
我更喜欢使用.Address(0, 0) ,因为它返回的地址不包含$符号。在VBA中工作时,这种方式更可取。 - SendETHToThisAddress

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