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

  • Автор темы Автор темы Nezar
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Nezar

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

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

Спасибо!
 
А зачем вам одновременно?
Насколько я помню, макрос colorreplace в поверклипы не залазит, но если сделать edit content, то нормально перекрашивает.
Здесь главное правильно сформулировать вопрос - вангую, что у вас, вероятно, много разноцветных родительских объектов с текстом внутри поверклипов внутри и вы хотите макрос, который бы брал цвет родительского объекта и разукрашивал этот текст им же? Это по идее тоже можно реализовать.
 
Одновременно не надо.
В одном объекте (закрашенной замкнутой кривой, цвет которой надо взять) расположен только один текстовый слой, который надо залить цветом родителя (не знаю как это правильно назвать).
 
Тогда не пойму зачем макрос писать если объект и контейнер всего один?
Если хотите попасть внутрь паверклипа - у объекта Shape есть свойство PowerClip, содержащее, в свою очередь Shapes дочерних объектов, помещенных туда
 
объектов много, контейнер в каждом всего один. я не правильно Вас понял.
PowerClip свойство есть но оно не позволяет обратиться к тексту в контейнере. если вместо него какая то кривая, то все ок.
 
оно не позволяет обратиться к тексту в контейнере
C этого момента поподробнее: по идее, PowerClip.Shapes - это коллекция всех шейпов, помещенных внутрь контейнера, включая текстовые тоже
 
при попытке обратиться выскакиевает ошибка
Object variable or With block variable not set
может я чтото путаю и это не контейнер (
 
Последнее редактирование модератором:
Тогда приведите код, а то какое то вангование получается опять
 
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
....
с обычным квадратом в контейнере работает. с текстом не хочет.
я чувствую что чтото упускаю, но что?
 
Как минимум - с чего вы взяли, что у любого Fill обязательно должно быть свойство UniformColor? Категорически не у любого
 
если я обращаюсь к этому же тексту на прямую то s1.Fill.UniformColor.CMYKAssign 0, 0, 0, 0 отлично работает
 
В принципе, согласен, должно работать, но по хорошему фильтровать надо - ваш вариант будет тупо перекрашивать все типы заливок в Uniform черный
Тогда другой вариант - в документе присутствуют только шейпы-поверклипы? Если хоть один шейп найдется, у которого PowerClip Is Nothing, третья строка ошибку сгенерирует
 
я знаю что перекрашивать будет в черный - но с текстом НЕ работает - выкидывает ошибку. привел ее выше.
только только шейпы-поверклипы. но вообще отловить не проблема - это не суть вопроса
 
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
 
Ваш код спокойно проходит, ничего не делая. Получается что там нет контейнера? тогда что это?
если убрать проверку то ругается на
For Each s1 In s.PowerClip.Shapes
 
на всякий случай напишу как делаю текст в кривой
собственно выделяю закрашенный объект
правая кнопка -> тип фрейма -> пустой текстовый фрейм
потом уже туда просто вставлеться текст, цвет которого и надо поменять
 
Гм, сейчас специально проверил - у меня другой эффект - без проверки тоже ошибку выдает, с проверкой перекрашивает в белый цвет как и должно быть
 
Последнее редактирование:
Вот пример справки корела. тоже не работает

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
 
эмм
странно.
у меня он обходит объект, как будто он ничего не содержит

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