2010-11-02 64 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