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

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

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

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

3 ответа

Решение

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

Здесь упомянуто отличное решение: http://www.ozgrid.com/forum/showthread.php?t=33351&p=167317

Золотой код скопирован с вышеуказанного поста:

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 

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

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

ActiveSheet.Range("K" & ActiveSheet.Buttons(Application.Caller).TopLeftCell.Row).Select
Другие вопросы по тегам