Excel VBA: получение строки нажатой кнопки

Я пытаюсь сделать кнопку в Excel, которая копирует определенный диапазон ячеек из активной книги в другую книгу. Копирование этого диапазона отлично работает, когда я указываю фиксированный диапазон, но я не понимаю, как определить строку нажатой кнопки.

Каждая строка содержит 7 или около того ячеек, а 8-я ячейка содержит форму с прикрепленным к ней макросом (кнопка). Когда пользователь нажимает эту кнопку, необходимо скопировать 7 ячеек в той же строке, что и строка, содержащая нажатую кнопку.

Использование ActiveCell бесполезно, так как нажатие кнопки фактически не устанавливает эту ячейку как активную. Я много искал, но я не могу найти, как получить эту ценность. Как только у меня будет номер строки нажатой кнопки, я смогу понять остальное самостоятельно.

Ответ 1

Каждый Shape имеет свойство TopLeftCell. Он содержит ячейку, в которой находится верхний левый угол формы.

Ответ 2

Здесь есть большое решение: 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 

Ответ 3

Отличный ответ. Btw Он также работает для 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

Ответ 4

Это тоже работает! Выбирает ячейку, в которой находится сгенерированная кнопка (знал, что она находится в столбце "K", но это тоже можно рассчитать !.

ActiveSheet.Range("K" & ActiveSheet.Buttons(Application.Caller).TopLeftCell.Row).Select