Копирование (Ctrl-C) фигур в Excel VBA наследует старые значения положения

#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.Фигуры (приложение.Вызывающий)