Копирование, перемещение и поворот фигур с помощью кода VBA Excel, привязка скопированной фигуры к координатам заданной ячейки.
Копирование фигур
Копирование фигур с помощью кода VBA Excel можно произвести как в пределах одного листа, так и с одного листа на другой.
В пределах одного листа
Копирование фигур в пределах одного листа осуществляется с помощью метода Shape.Duplicate:
1 |
Sheets("Лист19").Shapes("Рисунок 4").Duplicate |
В результате работы данной строки рядом с исходной фигурой появится ее копия. Обратиться к новой фигуре можно по ее индексу, который равен количеству фигур на листе:
1 2 3 |
With Sheets("Лист19") MsgBox .Shapes(.Shapes.Count).Name End With |
С одного листа на другой
Копирование фигур с одного листа на другой в VBA Excel осуществляется с помощью методов Shape.Copy и Sheet.Paste:
1 2 |
Sheets("Лист19").Shapes("Рисунок 7").Copy Sheets("Лист12").Paste |
Координаты вставленной фигуры будут соответствовать координатам активной ячейки (ActiveCell) на листе «Лист12».
Перемещение фигур
Перемещение фигур из кода VBA Excel, как и копирование, можно произвести как в пределах одного листа, так и с одного листа на другой.
В пределах одного листа
В пределах одного листа можно произвести абсолютное или относительное перемещение фигур.
Абсолютное перемещение
Абсолютное перемещение заключается в присвоении фигуре абсолютных координат с помощью свойств Shape.Left и Shape.Top, которые измеряются в пунктах (точках):
1 2 |
Sheets("Лист19").Shapes("Овал 1").Left = 100 Sheets("Лист19").Shapes("Овал 1").Top = 50 |
1 пиксель = 0,75 пункта
Привязка координат фигуры к координатам заданной ячейки:
1 2 3 4 |
With Sheets("Лист19") .Shapes("Блок-схема 2").Left = .Range("D8").Left .Shapes("Блок-схема 2").Top = .Range("D8").Top End With |
Относительное перемещение
Относительное перемещение фигуры заключается в ее перемещении на определенное количество пунктов от исходных координат с помощью методов Shape.IncrementLeft и Shape.IncrementTop:
1 2 3 4 5 6 |
With Sheets("Лист19").Shapes("Блок-схема 2") .IncrementLeft 100 'Перемещение на 100 точек вправо .IncrementTop 100 'Перемещение на 100 точек вниз .IncrementLeft -50 'Перемещение на 50 точек влево .IncrementTop -50 'Перемещение на 50 точек вверх End With |
С одного листа на другой
Перемещение фигур с одного листа на другой в VBA Excel осуществляется с помощью методов Shape.Cut и Sheet.Paste:
1 2 |
Sheets("Лист19").Shapes("Рисунок 7").Cut Sheets("Лист12").Paste |
Фигура «Рисунок 7» вырезается с листа «Лист19» и вставляется на лист «Лист12». Координаты вставленной фигуры будут соответствовать координатам активной ячейки (ActiveCell) на листе «Лист12».
Поворот фигур
Поворот фигур в VBA Excel, как и перемещение в пределах одного листа, может быть абсолютным или относительным.
Абсолютный поворот
Абсолютный поворот фигуры устанавливается путем присвоения свойству Shape.Rotation значения поворота в градусах от нулевой отметки на вертикальной оси:
1 2 3 4 5 6 |
With Sheets("Лист19").Shapes("Рисунок 3") .Rotation = 30 'Поворот по часовой стрелке на 30 градусов от 0 .Rotation = -30 'Поворот против часовой стрелки на 30 градусов от 0 .Rotation = 120 'Поворот по часовой стрелке на 120 градусов от 0 .Rotation = -700 'Поворот против часовой стрелки на 700 градусов от 0 End With |
Положение (поворот), которое примет фигура не зависит от ее предыдущего положения (поворота).
Относительный поворот
Относительный поворот фигуры в VBA Excel осуществляется с помощью метода Shape.IncrementRotation, который поворачивает фигуру на заданное количество градусов от ее исходного положения (поворота):
1 2 3 4 5 6 |
With Sheets("Лист19").Shapes("Рисунок 3") .IncrementRotation 50 'Поворот по часовой стрелке на 50 градусов от исходного положения .IncrementRotation -30 'Поворот против часовой стрелки на 30 градусов от исходного положения .IncrementRotation 120 'Поворот по часовой стрелке на 120 градусов от исходного положения .IncrementRotation -520 'Поворот против часовой стрелки на 520 градусов от исходного положения End With |
Предыдущая информация по данной теме в статье VBA Excel. Работа с фигурами (Shapes).