Для начинающих свой путь в автоматизации процессов в CorelDRAW возникает множество вопросов. Особенно актуальна задача, когда одно и то же действие нужно повторить для каждого отдельного объекта. Как изменить размер сразу у всех выбранных объектов? Как прибавить несколько миллиметров к ширине каждого объекта? Как одновременно изменить ширину и высоту всех объектов, сохранив их обработку по отдельности? И как вообще перебрать все выделенные объекты один за другим с помощью VBA?
На этом простом примере разберём базовый принцип обработки объектов в CorelDRAW с помощью VBA-макроса.
Я написал две функции VBA для CorelDRAW, которые делают практически одно и то же: изменяют размер каждого выбранного объекта сразу на +5 мм по ширине и -7 мм по высоте.
Первый вариант — простой. Он работает, но не имеет никакой защиты от ошибок.
Sub resize_nocorrect()
For Each s In ActiveSelectionRange.Shapes
s.SetSize s.SizeWidth + 5, s.SizeHeight - 7
Next s
End Sub
Второй вариант — более надёжный:
Sub resize_good()
Dim s As Shape
Dim OS As ShapeRange
WI_plus = 5
HI_plus = -7
On Error GoTo errn
ActiveDocument.Unit = cdrMillimeter
Set OS = ActiveSelectionRange
If OS.Shapes.Count > 0 Then
ActiveDocument.BeginCommandGroup
For Each s In OS
s.SetSize s.SizeWidth + WI_plus, s.SizeHeight + HI_plus
Next s
Else
Exit Sub
End If
errn:
ActiveDocument.EndCommandGroup
End Sub
Для такой простой задачи кода здесь выглядит гораздо больше, но большая его часть на самом деле не связана непосредственно с изменением размера.
Он гарантирует, что работа выполняется в миллиметрах, проверяет, есть ли что-то выделенное, объединяет всю операцию в один шаг отмены (Undo) и обеспечивает базовую обработку ошибок.
Я также использую такой подход в своей коллекции макросов для CorelDRAW.
А как вы обычно пишете небольшие макросы для CorelDRAW: оставляете их простыми или добавляете все эти дополнительные проверки?