Изменить цвет заливки текста в контейнере

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

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
Добрый вечер.
Убил уже не один час - не могу решить проблему
Есть некий объект определенного цвета.
В него вставлен текстовый полигон (я так понимаю он вставляется как в контейнер)
в этом полигоне есть определенный текст.
Задача - как с помощью макроса изменить цвет текста на цвет заливки родительского объекта?

Уперся в то, что если работаю с родительским объектом - не могу обратится ко вставленному в него тексту, чтобы изменить цвет.
И на оборот - при работе с текстом - не получается обратится к содержащему его объекту, чтобу получить от него его цвет заливки.

Спасибо!
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
А зачем вам одновременно?
Насколько я помню, макрос colorreplace в поверклипы не залазит, но если сделать edit content, то нормально перекрашивает.
Здесь главное правильно сформулировать вопрос - вангую, что у вас, вероятно, много разноцветных родительских объектов с текстом внутри поверклипов внутри и вы хотите макрос, который бы брал цвет родительского объекта и разукрашивал этот текст им же? Это по идее тоже можно реализовать.
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
Одновременно не надо.
В одном объекте (закрашенной замкнутой кривой, цвет которой надо взять) расположен только один текстовый слой, который надо залить цветом родителя (не знаю как это правильно назвать).
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
Тогда не пойму зачем макрос писать если объект и контейнер всего один?
Если хотите попасть внутрь паверклипа - у объекта Shape есть свойство PowerClip, содержащее, в свою очередь Shapes дочерних объектов, помещенных туда
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
объектов много, контейнер в каждом всего один. я не правильно Вас понял.
PowerClip свойство есть но оно не позволяет обратиться к тексту в контейнере. если вместо него какая то кривая, то все ок.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
оно не позволяет обратиться к тексту в контейнере
C этого момента поподробнее: по идее, PowerClip.Shapes - это коллекция всех шейпов, помещенных внутрь контейнера, включая текстовые тоже
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
при попытке обратиться выскакиевает ошибка
Object variable or With block variable not set
может я чтото путаю и это не контейнер (
 
Последнее редактирование модератором:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
Тогда приведите код, а то какое то вангование получается опять
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
Public Sub TEST()
For Each s In ActiveDocument.ActivePage.Shapes
For Each s1 In s.PowerClip.Shapes
s1.Fill.UniformColor.CMYKAssign 0, 0, 0, 0
Next s1
Next s
MsgBox ("Ãîòîâî")
End Sub
....
с обычным квадратом в контейнере работает. с текстом не хочет.
я чувствую что чтото упускаю, но что?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
Как минимум - с чего вы взяли, что у любого Fill обязательно должно быть свойство UniformColor? Категорически не у любого
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
если я обращаюсь к этому же тексту на прямую то s1.Fill.UniformColor.CMYKAssign 0, 0, 0, 0 отлично работает
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
В принципе, согласен, должно работать, но по хорошему фильтровать надо - ваш вариант будет тупо перекрашивать все типы заливок в Uniform черный
Тогда другой вариант - в документе присутствуют только шейпы-поверклипы? Если хоть один шейп найдется, у которого PowerClip Is Nothing, третья строка ошибку сгенерирует
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
я знаю что перекрашивать будет в черный - но с текстом НЕ работает - выкидывает ошибку. привел ее выше.
только только шейпы-поверклипы. но вообще отловить не проблема - это не суть вопроса
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
Ok, какая строка в отладчике ошибку выдает?
Попробуйте для начала все таки отловить:

Код:
If Not s.PowerClip Is Nothing then
For Each s1 In s.PowerClip.Shapes
s1.Fill.UniformColor.CMYKAssign 0, 0, 0, 0
Next s1
End if
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
Ваш код спокойно проходит, ничего не делая. Получается что там нет контейнера? тогда что это?
если убрать проверку то ругается на
For Each s1 In s.PowerClip.Shapes
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
на всякий случай напишу как делаю текст в кривой
собственно выделяю закрашенный объект
правая кнопка -> тип фрейма -> пустой текстовый фрейм
потом уже туда просто вставлеться текст, цвет которого и надо поменять
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
Гм, сейчас специально проверил - у меня другой эффект - без проверки тоже ошибку выдает, с проверкой перекрашивает в белый цвет как и должно быть
 
Последнее редактирование:

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
Вот пример справки корела. тоже не работает

Sub Test()
Dim s As Shape
Dim c As New Color
If ActiveShape Is Nothing Then
MsgBox "Select a powerclip container"
Exit Sub
End If
If ActiveShape.Fill.Type <> cdrUniformFill Then
MsgBox "Powerclip container must have a uniform fill"
Exit Sub
End If
For Each s In ActiveShape.PowerClip.Shapes
c.CopyAssign s.PowerClipParent.Fill.UniformColor
Select Case c.Type
Case cdrColorRGB
c.RGBBlue = (c.RGBBlue + 255) \ 2
c.RGBGreen = (c.RGBGreen + 255) \ 2
c.RGBRed = (c.RGBRed + 255) \ 2
Case cdrColorCMYK
c.CMYKBlack = c.CMYKBlack \ 2
c.CMYKCyan = c.CMYKCyan \ 2
c.CMYKMagenta = c.CMYKMagenta \ 2
c.CMYKYellow = c.CMYKYellow \ 2
Case Else
c.ConvertToHLS
c.HLSLightness = (c.HLSLightness + 255) \ 2
End Select
s.Fill.ApplyUniformFill c
Next s
End Sub
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
эмм
странно.
у меня он обходит объект, как будто он ничего не содержит

можно полностью Ваш код увидеть?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 250
Реакции
10 855
на всякий случай напишу как делаю текст в кривой
собственно выделяю закрашенный объект
правая кнопка -> тип фрейма -> пустой текстовый фрейм
потом уже туда просто вставлеться текст, цвет которого и надо поменять
Стоп! Сразу не прочел внимательно - а вы уверены что это именно поверклип????
 
Статус
Закрыто для дальнейших ответов.