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