我正在编写一个VBA宏,该宏将一个文本的颜色设置为与另一文本的颜色匹配。当文本用一种主题颜色着色时,我感到很困难。
Option Explicit
Sub ChangeRangeColour()
Dim rSourceColourRange As Range
Set rSourceColourRange = ActiveDocument.Range(Start:=10, End:=20)
Dim rDestinationRange As Range
Set rDestinationRange = ActiveDocument.Range(Start:=30, End:=40)
rDestinationRange.Font.Color = rSourceColourRange.Font.Color
End Sub
我正在使用.Font.Color
,尽管该文件没有记录,因为.Font.ColorIndex
似乎无法正确使用自定义颜色。如果我还有其他属性要使用,请告诉我。
此功能适用于自定义颜色,标准颜色和基本主题颜色。当文本用主题颜色之一的颜色着色时,目标文本将更改为没有颜色的主题颜色。如何获得色彩和颜色?
答案 0 :(得分:1)
嗯,.Font.Color
确实可以正常工作,至少在WD2007-WD2013中有效。对于非主题颜色,它返回一个长值,该值要么是特定的RGB,要么是主题颜色和色调(或阴影)组合的十六进制值的等效值。 Tony Jollans为Word 2007编写了detailed article,其中提供了主题颜色的所有细节。
.Font.Color
未记录,因为它已被弃用,并且通过在Word 365中进行测试,我可以确认它不再像以前那样工作。现在,它仅返回主题颜色,而不返回色调或阴影。
@Cindy Meister建议使用.Font.TextColor
,听起来好像应该提供您想要的值。不幸的是,尽管它返回一个包含ColorFormat
,.ObjectThemeColor
和.Brightness
属性的.TintAndShade
对象,但是您将获得的唯一有效信息是来自.ObjectThemeColor
的,因此不会给你你所需要的。
要获得 all 所需的信息,您必须搁置逻辑并检查.Font.Fill.ForeColor
。 (例如,真的 ?!字体具有 fill 颜色?)。这还将返回ColorFormat
对象,但是这次所有属性都返回有效数据。 / p>
因此,您应该更改:
rDestinationRange.Font.Color = rSourceColourRange.Font.Color
收件人:
With rDestinationRange.Font.Fill.ForeColor
.ObjectThemeColor = rSourceColourRange.Font.Fill.ForeColor.ObjectThemeColor
.Brightness = rSourceColourRange.Font.Fill.ForeColor.Brightness
End With
为完整起见,.Brightness
属性对于100%(即无色调或阴影)返回值-1,对于40%较亮的颜色返回0.6,对于60%较亮的颜色返回0.4。负值用于阴影-0.75表示较深25%,-0.5表示较深50%。
还可以将.Brightness
设置为与调色板中的值不对应的值,例如0.25表示较浅的75%,或-0.9表示较深的10%。