CTRL Z для VBA, или оптимизация работы макроса CorelDraw


Иногда мало создать макрос для CorelDraw, иногда требуется его оптимизировать. Множество объектов широкоформатной печати, групп объектов, разгруппировка их, копирование – обработка этого занимает много времени.

Для одного макроса потребовалось написать функцию, отменяющую результаты копирования объектов. Изначально я сделал так: просто пробегал в цикле по всем объектам на листе и если staticId их не совпадал с первоначальным, то удалял.

Такой подход работает, но занимает много времени. Проще воспользоваться отменой предыдущего действия – что-то типа программный аналог CTRL Z для VBA. Для этого сначала надо задать выполняемые действия заключить в особую конструкцию BeginCommandGroup – EndCommandGroup. Все, что будет выполняться между данными ключевыми словами является одним методом и может быть отменено за один раз.

Пример:

Dim d As Document
Dim s As Shape
Dim i As Integer
Set d = ActiveDocument
d.BeginCommandGroup
Set s = d.ActiveLayer.CreateEllipse2(0, 0, 5)
s.Fill.UniformColor.RGBAssign 0, 255, 0
For i = 1 To 10
s.Duplicate i * 10, i * 10
Next i
d.EndCommandGroup
Здесь мы создаем зеленый круг и дублируем его 9 раз вверх по диагонали.



Без метода BeginCommandGroup нам придется 10 раз нажать CTRL + Z, чтобы отменить действие по созданию кругов, а в нашем случае всего один раз. Программно же это делается так:

Dim App As Document
Set App = ActiveDocument
App.Undo
Как видите, все просто. Если вам требуется помощь по макросам VBA CorelDraw, то за небольшую плату я вам помогу. Пишите.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, CorelDraw, VBA, оптимизация, макросы




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 19. Метод clone() и его альтернативы в Java
Урок 26. Массивы C#
Урок 8. Создание параллельных задач C#