Ответ 1
Каждый Shape
имеет свойство TopLeftCell
. Он содержит ячейку, в которой находится верхний левый угол формы.
Я пытаюсь сделать кнопку в Excel, которая копирует определенный диапазон ячеек из активной книги в другую книгу. Копирование этого диапазона отлично работает, когда я указываю фиксированный диапазон, но я не понимаю, как определить строку нажатой кнопки.
Каждая строка содержит 7 или около того ячеек, а 8-я ячейка содержит форму с прикрепленным к ней макросом (кнопка). Когда пользователь нажимает эту кнопку, необходимо скопировать 7 ячеек в той же строке, что и строка, содержащая нажатую кнопку.
Использование ActiveCell бесполезно, так как нажатие кнопки фактически не устанавливает эту ячейку как активную. Я много искал, но я не могу найти, как получить эту ценность. Как только у меня будет номер строки нажатой кнопки, я смогу понять остальное самостоятельно.
Каждый Shape
имеет свойство TopLeftCell
. Он содержит ячейку, в которой находится верхний левый угол формы.
Здесь есть большое решение: 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
Отличный ответ. 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
Это тоже работает! Выбирает ячейку, в которой находится сгенерированная кнопка (знал, что она находится в столбце "K", но это тоже можно рассчитать !.
ActiveSheet.Range("K" & ActiveSheet.Buttons(Application.Caller).TopLeftCell.Row).Select