Ошибка в макросе. Color в градиентах
Тёмик / 17.02.2012, 21:57/00:41
Форум:
Версия программы:
15.2.0.686 (sp3)
Здравствуйте. Создал макрос для раскрашивания ч/б объектов.
Sub ChangeColor()
Dim sh As Shape, i As Integer, col As Color
hue = InputBox("Оттенок:")
satur = InputBox("Насыщенность:")
brig = InputBox("Изменение яркости:", , 0)
For Each sh In ActivePage.Shapes
Select Case sh.Fill.Type
Case cdrUniformFill
Call ChangeColorSub(sh.Fill.UniformColor)
Case cdrFountainFill
Call ChangeColorSub(sh.Fill.Fountain.StartColor)
Call ChangeColorSub(sh.Fill.Fountain.EndColor)
For i = 1 To sh.Fill.Fountain.Colors.Count
Call ChangeColorSub(sh.Fill.Fountan.Colors.Item(i).Color)
Next
End Select
Next sh
End Sub
Sub ChangeColorSub(ByRef col As Color)
If col.Type = cdrColorGray Then
col.ConvertToHSB
col.HSBHue = hue
col.HSBSaturation = satur
If col.HSBBrightness + brig > 255 Then
col.HSBBrightness = 255
Else
If col.HSBBrightness + brig < 0 Then
col.HSBBrightness = 0
Else
col.HSBBrightness = col.HSBBrightness + brig
End If
End If
col.ConvertToRGB
End If
End Sub
При передаче промежуточных цветов фонтанной заливки в функцию ChangeColorSub вылетает ошибка 'Run-time error 438. Object doesn't support this property or method'.
Есть там свои нюансы. Лучше так:
Dim fc As FountainColor 'добавляем в начало ... Case cdrFountainFill For Each fc In sh.Fill.Fountain.Colors ChangeColorSub fc.Color NextSancho, большое спасибо.