2010-11-02 63 views
22

如何通过用户鼠标输入选择一系列单元格,以便使用VBA进一步处理?获取用户选择范围

+0

记录一个宏,执行你的操作,停止宏,然后看到生成的代码。 – Sarfraz 2010-11-02 18:12:16

+1

尝试过,但是会生成预定义的范围。我希望得到一个每次都会有所不同的范围。 – Talguy 2010-11-02 18:18:51

+1

这是因为您禁用了“使用相对引用”(它位于“代码”组的“开发人员”选项卡中)。如下面的答案所指,它是将被记录的Selection对象(它是一个Range实例)。 – 2010-11-03 00:55:23

回答

19

您可以遍历Selection对象来查看选择的内容。下面是从微软的代码片段(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 
+1

谢谢。这就是我需要的 – Talguy 2010-11-02 18:27:18

+0

不应该Selection.Count是否足够?我认为Count属性在Selection对象上可用。通过整个选择循环似乎是一个开销。 – 2010-11-02 19:38:20

+3

他只是发布关于如何使用选择对象的考试。我在我的代码 – Talguy 2010-11-03 16:47:40

26

Selection是内VBA自己的对象。它的功能很像一个Range对象。

虽然选择和范围不共享所有相同的属性和方法,但为便于使用,创建一个范围并将其设置为等于该选择可能有意义,那么您可以像编程一样处理它其他范围。

Dim myRange as Range 
Set myRange = Selection 

如需进一步阅读,请查看MSDN article

+1

尽管选择是Range类型的,但缺少什么道具和方法?我总是直接将它直接输入到Range类型,但只是感兴趣。 – 2010-11-04 23:44:31

8

这取决于你的意思是“得到选择的范围”。如果你的意思是获取范围地址(如“A1:B1”),那么使用Selection对象的Address属性 - 正如Michael所说,Selection对象非常像Range对象,所以大多数属性和方法都可以工作。

Sub test() 
    Dim myString As String 
    myString = Selection.Address 
End Sub