在Word VBA中,如何正确设置使用主题颜色色调的字体颜色?

时间:2019-04-29 16:46:39

标签: vba ms-word word-vba

我正在编写一个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似乎无法正确使用自定义颜色。如果我还有其他属性要使用,请告诉我。

此功能适用于自定义颜色,标准颜色和基本主题颜色。当文本用主题颜色之一的颜色着色时,目标文本将更改为没有颜色的主题颜色。如何获得色彩和颜色?

1 个答案:

答案 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%。