#excel #vba #shapes
#excel #vba #фигуры
Вопрос:
Я пытаюсь скопировать фигуру из одной ячейки в другую (по мере создания новых строк, поэтому для этого нет необходимости в отдельном макросе).
Когда я делаю это с помощью Ctrl-C и Ctrl-V, а затем пытаюсь запустить следующий макрос…
Dim b As Object, rn As Integer, cn As Integer
Set b = ActiveSheet.Shapes(Application.Caller)
With b.TopLeftCell
rn = .Row
cn = .Column
End With
*then other stuff to manipulate that cell
…новая фигура заканчивается тем же самым .Строка и .Значения столбца как старой формы, то есть фигуры, из которой она была скопирована, и, таким образом, в конечном итоге управляет этой ячейкой, а не той, в которой она на самом деле находится. Любые идеи о том, как я могу заставить новую фигуру найти .Строка и .Столбец ячейки, в которой он на самом деле находится?
Комментарии:
1. Имеет ли вставленная фигура уникальное имя?
2. Это не так. Я изменил имя фигуры, и теперь оно работает так, как должно … но я изначально не ссылался на имена фигур в своем макросе, так почему же он смотрит на имя фигуры, а не просто на локальную переменную b для вывода . Строка и . Столбец?
3.
Application.Caller
это имя фигуры — оно передается вашему макросу при вызовеOnAction
… Поэтому, если существует > 1 фигура с одинаковым именем, это вызовет проблемы, поскольку нет гарантии, что вы получите правильную фигуру при вызовеActiveSheet.Shapes(Application.Caller)
Ответ №1:
Если скопированная фигура не имеет уникального имени, то в вашем коде возникнут проблемы.
Application.Caller
это имя фигуры, на которую нажимают, — оно передается вашему макросу при вызове OnAction
свойства формы.
Поэтому, если существует > 1 фигура с таким же именем, это вызовет проблемы, поскольку нет гарантии, что вы получите правильную фигуру при вызове ActiveSheet.Фигуры (приложение.Вызывающий)