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

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

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
Пишу так:
Sub CopyDoc()
Dim d As Document
Dim s As Shape
Dim l As Layer
Set s = ActiveShape
For Each d In Application.Documents
d.Layers("LaLa").Activate
ActiveLayer.Paste
Next
End Sub

Отладчик пишет что, Object doesn’t support this property or method
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 197
Реакции
10 847
Во первых, не пойму - вы на каждую страницу хотите вставить?
А почему тогда открытые документы перебираете?
Во вторых - что за слой "LaLa" вы ищете (судя по ошибке, безуспешно) в каждом открытом документе? 'hmmm'
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
Во первых, не пойму - вы на каждую страницу хотите вставить?
Да, на каждую. У меня в каждом документе только одна страница.
...А почему тогда открытые документы перебираете?...
Собссно, потому и перебираю их, чтобы вставить в каждый открытый документ.
...Во вторых - что за слой "LaLa" вы ищете (судя по ошибке, безуспешно) в каждом открытом документе? 'hmmm'
Это тот слой, который присутствует в каждом документе и куда надо вставить содержимое из памяти.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 197
Реакции
10 847
А почему, все таки, именно через этот дурацкий Лала, а не так:
Код:
Sub CopyDoc()
Dim d As Document
Dim s As Shape
Dim l As Layer
Set s = ActiveShape
For Each d In Application.Documents
d.ActiveLayer.Paste
Next
End Sub
?
Так стопроцентно работает, а вот ваш слой макрос, судя по всему, не находит по какой то причине
 
Последнее редактирование:

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
А почему, все таки, именно через этот дурацкий Лала
Потому что надо вставить на ОПРЕДЕЛЁННЫЙ слой, а не на тот, что будет активен в документе в данный момент.
P.S. РАБОТАЕТ )
 

_MBK_

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

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
Т.е. проблема решена?
Нет. Вставляет то сейчас не на определённый слой, а на активный. А я не пойму как вставить на определённый слой. И как его перед этим активировать.
Пробую:
Код:
Sub CopyDoc()
Dim d As Document
Dim s As Shape
Dim l As Layer
Set s = ActiveShape
For Each d In Application.Documents
d.Layers("l").Activate
d.ActiveLayer.Paste
Next
End Sub
Ругается..
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 197
Реакции
10 847
Правильно ругается, надо
d.ActivePage.Layers(...)
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
Правильно ругается, надо
d.ActivePage.Layers(...)
Да, уже так и сделал. Заработало.
P.S. У меня выдавало ошибку ещё и потому, что не писал .ActivePage. Был уверен, что можно так : d.Layers(...)
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 197
Реакции
10 847
У документа нет свойства Layers
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
У документа нет свойства Layers
Хм, я думал, что Слой принадлежит (как подпараметр) Документу как через Страницу, так и напрямую. В этом случае слой относился бы к текущей (активной) странице.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 197
Реакции
10 847
как подпараметр
Нет такого слова "подпараметр" в объектно-ориентированном программировании
У документа есть свойство ActiveLayer и свойства Pages и ActivePage
В свою очередь у каждой страницы есть свойства - слои
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
Если не против, я в понедельник отпишусь ужЕ.
 

_MBK_

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

Не по теме:
Крутые набили стрелку, стоят, что-то перетирают. Рядом останавливается мужик на запорожце, спрашивает: - Мужики, извиняюсь, я тут на улицу Горького проеду? - самый ближний к небу браток оборачивается,пару минут думает, потом отвечает - Я не знаю, как пацаны, но лично я не против!

'))'
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
И снова здравствуйте ))))
Усложняю задачу - теперь надо дополнить программу так, чтобы те документы где нет слоя 123, пропускались.
Пробую на двух открытых документах - в одном есть слой, в другом нет.
Код:
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 ActiveDocument.ActivePage.Layers
If Lg.Name = "123" Then
d.ActivePage.Layers("123").Activate
d.ActiveLayer.Paste
End If
Next
d.Save
Next
End Sub
Выдаёт "run-time error 2147024809 80070057" Layer "123" not found.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 197
Реакции
10 847
Самое простое что можно сделать, не вникая в глубину - предыдущий работающий вариант, обернутый в обработчик On Error - ситуация с отсутствующим слоем будет тупо фильтроваться данным обработчиком ошибки
 

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
С меткой проходит )
Правда, ощущение что заткнул дырку в трубе тряпкой. Вроде не течёт. Но по факту лажа....
 

_MBK_

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

NemoSUN

Топикстартер
15 лет на форуме
Сообщения
217
Реакции
0
Лажа - это "замазывание" нодоработанного кода, обработчиком On Error. В моём понимании - это можно сделать когда нужно запустить программу по быстрому. Но в дальнейшем убрать эту обработку и добавить нужный код.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 197
Реакции
10 847
Похвально
При всем моем толерантном уважении древней индийской цивиллизации, у нас свой собственный исторический путь
Попробуйте поменять в своем коде
Код:
d.ActivePage.Layers("123").Activate
d.ActiveLayer.Paste
на
Код:
Lg.Activate
Lg.Paste
 
Статус
Закрыто для дальнейших ответов.