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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.