[CDR X5-X8] Скопировать буфер обмена во все открытые страницы

Статус
Закрыто для дальнейших ответов.

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 243
Реакции
10 852
И конечно же
For Each Lg In ActiveDocument.ActivePage.Layers
на
For Each Lg In d.ActivePage.Layers
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
Теперь так:
Код:
Sub CopyDoc()
Dim d As Document
Dim s As Shape
Dim Lg As Layer
Set s = ActiveShape
For Each d In Application.Documents
For Each Lg In d.ActivePage.Layers
If Lg.Name = "Logo" Then
Lg.Activate
Lg.Paste
d.Save
End If
Next
Next
End Sub
Перенёс ещё сохранение документа в другой цикл. Иначе страницы сохранялись даже те, которые не менялись (куда не пастилось).

P.S. Уффф. Спасибо барин. Надёжа вы моя )))) Теперь спокойно можно дальше изучать VBA и писать своих микробов (как я называю свои программки). Чем хорОш VBA - смогу потом знания перенести в AutoCAD. Там похоже очень.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 243
Реакции
10 852
Второй вложенный цикл, кстати, вовсе не обязательно делать
Достаточно проверять
Код:
Set Lg=d.ActivePage.Layers("Logo")
 If Not Lg Is Nothing Then
...
ну примерно как то так в общем
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
А как удалить всё на текущем слое ?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 243
Реакции
10 852

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 243
Реакции
10 852
А если это надо сделать сотни раз....
Тем более
Я вангую, что операция удаления-создания пустого слоя в макросе будет отрабатывать в сто раз быстрее и корректнее, чем перебор всех объектов с удалением
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
Тем более
Я вангую, что операция удаления-создания пустого слоя в макросе будет отрабатывать в сто раз быстрее и корректнее, чем перебор всех объектов с удалением
Лааадно ) Раскрою секрет ) Что-то мне скрипт удаляет, но потом не хочет создавать слой:

Код:
Sub CopyDoc()
Dim d As Document
Dim s As Shape
Dim Lg As Layer
Set s = ActiveShape
For Each d In Application.Documents
For Each Lg In d.ActivePage.Layers
If Lg.Name = "Lo" Then
Lg.Activate
Lg.Delete
ActivePage.CreateLayer ("Lo")
Lg.Paste
d.Save
End If
Next
Next
End Sub
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 243
Реакции
10 852
Во первых, не надо перебирать все слои на предмет спрашивания имени
Сделайте уже, наконец, как в #23
Во-вторых - не ActivePage.CreateLayer ("Logo") а d.ActivePage.CreateLayer ("Logo")
Вам же надо в нужном документе слой создать не так ли?
Попробуйте и отпишитесь что получится желательно с дословным цитированием (скриншотом) сообщений об ошибках если они появятся
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0

Вложения

  • Untitled-1.jpg
    Untitled-1.jpg
    159.6 КБ · Просм.: 766

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 243
Реакции
10 852
Я гляжу на ваш код и меня начинают терзать смутные сомнения - а надо ли оно вам вообще? Может ну его, оставьте сапоги сапожникам, а пироги пирожникам, а? 'fp'
Вы вообще говоря, имеете хоть малейшее представление о том, что такое условная конструкция If - then-endif для чего нужна и куда ставится? Это же базовый курс, боюсь, без таких основных знаний мы никуда не уйдем... *(
 
Статус
Закрыто для дальнейших ответов.