[CDR 2017-2021] Не работает .Copy в цикле.

DukereD

макрософил
Топикстартер
Сообщения
463
Реакции
114
Выдает ошибку при выполнении команды .copy если в цикле.

Код:
            For Each ln In lns
                    Application.Optimization = True
                    Set sh = doc.Pages(1).Shapes.FindShape(num & "-" & Mid(ln2(0), 4))
                    If Not sh Is Nothing Then
                            sh.Copy
                            Set s2 = ActiveLayer.Paste
                            s2.LeftX = col
                            s2.TopY = row
                    End If
                    Application.Optimization = False
                    Application.Refresh
                    DoEvents

            Next ln

когда выскакивает дебаг - и запускаешь "по одному" все работает. когда в цикле выдает ошибку просто нажимаю Ф5 и дальше работает ((
может задержку какую поставить? или как проверить что отработала прошлая строчка?
 

Вложения

  • изображение_2021-03-29_171146.png
    изображение_2021-03-29_171146.png
    17.9 КБ · Просм.: 170

splxgf

12 лет на форуме
Сообщения
7 742
Реакции
3 424
Варианты
оптимизацию вынести за цикл,
или скопированный объект имеет то же имя и добавляется следующим от скопированного и получается бесконечный цикл.
Пробуйте сбрасывать имя у копии. или сохраняйте после каждого копирования в файл, тогда хоть будет слепок того что скрипт наработал.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А вот не надо так делать
Но ведь есть же еще, как это грустно звучит, метод MoveToLayer
 

Старкрафт

Участник
Сообщения
289
Реакции
106
Буфер обмена и циклы – несовместимые понятия. Буфер нужно теребить только в самом крайнем случае. И не в цикле.
Используйте Duplicate и MoveToLayer
 

DukereD

макрософил
Топикстартер
Сообщения
463
Реакции
114
А вот не надо так делать
Но ведь есть же еще, как это грустно звучит, метод MoveToLayer
Буфер обмена и циклы – несовместимые понятия. Буфер нужно теребить только в самом крайнем случае. И не в цикле.
Используйте Duplicate и MoveToLayer
тут не получится так сделать.
скрипт "смотртит" все открытые файлы. находит нужный объект и собирает все в один файл.
 

DukereD

макрософил
Топикстартер
Сообщения
463
Реакции
114
Варианты
оптимизацию вынести за цикл,
или скопированный объект имеет то же имя и добавляется следующим от скопированного и получается бесконечный цикл.
Пробуйте сбрасывать имя у копии. или сохраняйте после каждого копирования в файл, тогда хоть будет слепок того что скрипт наработал.
за цикл не вынес потому что хочется визуализации процесса т.е. после каждого вставленного объекта чтоб ыего показать пользователю, что процесс идет.
 

Старкрафт

Участник
Сообщения
289
Реакции
106
тут не получится так сделать.
скрипт "смотртит" все открытые файлы. находит нужный объект и собирает все в один файл.
А как же программируют без буфера обмена? Используйте диск. Экспорт в cmx. Хотя в цикле тоже ничего хорошего. Проверенно. Но всяко лучше буфера, который гарантированно заглючит рано или поздно.
 
  • Спасибо
Реакции: DukereD