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

  • Автор темы Автор темы DukereD
  • Дата начала Дата начала

DukereD

макрософил
Топикстартер
Сообщения
511
Реакции
132
Выдает ошибку при выполнении команды .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 КБ · Просм.: 214
Варианты
оптимизацию вынести за цикл,
или скопированный объект имеет то же имя и добавляется следующим от скопированного и получается бесконечный цикл.
Пробуйте сбрасывать имя у копии. или сохраняйте после каждого копирования в файл, тогда хоть будет слепок того что скрипт наработал.
 
А вот не надо так делать
Но ведь есть же еще, как это грустно звучит, метод MoveToLayer
 
Буфер обмена и циклы – несовместимые понятия. Буфер нужно теребить только в самом крайнем случае. И не в цикле.
Используйте Duplicate и MoveToLayer
 
А вот не надо так делать
Но ведь есть же еще, как это грустно звучит, метод MoveToLayer
Буфер обмена и циклы – несовместимые понятия. Буфер нужно теребить только в самом крайнем случае. И не в цикле.
Используйте Duplicate и MoveToLayer
тут не получится так сделать.
скрипт "смотртит" все открытые файлы. находит нужный объект и собирает все в один файл.
 
Варианты
оптимизацию вынести за цикл,
или скопированный объект имеет то же имя и добавляется следующим от скопированного и получается бесконечный цикл.
Пробуйте сбрасывать имя у копии. или сохраняйте после каждого копирования в файл, тогда хоть будет слепок того что скрипт наработал.
за цикл не вынес потому что хочется визуализации процесса т.е. после каждого вставленного объекта чтоб ыего показать пользователю, что процесс идет.
 
тут не получится так сделать.
скрипт "смотртит" все открытые файлы. находит нужный объект и собирает все в один файл.
А как же программируют без буфера обмена? Используйте диск. Экспорт в cmx. Хотя в цикле тоже ничего хорошего. Проверенно. Но всяко лучше буфера, который гарантированно заглючит рано или поздно.
 
  • Спасибо
Реакции: DukereD