2011-06-05 165 views
11

我想在Excel中製作一個按鈕,將活動工作簿的某個範圍的單元格複製到另一個工作簿。當我指定一個固定的範圍時,這個範圍的複製完美地工作,但是我很難理解如何確定點擊按鈕的行。Excel VBA:獲取點擊按鈕的行

每行包含7個左右的單元格,而第8個單元格包含一個帶有附加宏的形狀(按鈕)。 當用戶按下此按鈕時,需要複製與包含按下按鈕的行相同的行上的7個單元格。

使用ActiveCell是沒有用的,因爲按下按鈕並不會真正將該單元設置爲活動狀態。我搜索了很多,但我似乎無法找到如何獲得此值。 一旦我有了點擊按鈕的行號,我可以自己找出其他的東西。

回答

18

每個ShapeTopLeftCell財產。它包含形狀左上角所在的單元格。

+1

我明白了,謝謝你的回答。我也想知道如何獲得被點擊的形狀的名稱,但經過一些搜索後,我發現這一點:ActiveSheet.Shapes(Application.Caller).Name。我會嘗試使用形狀的TopLeftCell屬性,並讓它知道它何時工作。再次感謝您指點我正確的方向! – Jort 2011-06-05 11:46:23

+10

得到它完全工作:MsgBox(「按下按鈕的行:」&ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row)。再次感謝! – Jort 2011-06-05 11:51:38

14

這裏有提到一個很好的解決方案: http://www.ozgrid.com/forum/showthread.php?t=33351&p=167317#post167317

金碼從上面的帖子複製:

Sub Mainscoresheet() 
    ' Mainlineup Macro 
    Dim b As Object, cs As Integer 
    Set b = ActiveSheet.Buttons(Application.Caller) 
    With b.TopLeftCell 
     cs = .Column 
    End With 
    MsgBox "Column Number " & cs 
End Sub 
+0

動態生成的按鈕非常有用。 – 2017-12-01 20:47:43

4

出色答卷。順便說一句,它也適用於Rownumber!

'Same for rownumbers! 
Sub Mainscoresheet() 
    ' Mainlineup Macro 
    Dim b As Object, RowNumber As Integer 
    Set b = ActiveSheet.Buttons(Application.Caller) 
    With b.TopLeftCell 
     RowNumber = .Row 
    End With 
    MsgBox "Row Number " & RowNumber 
End Sub