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

问题描述 投票:0回答:1

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

这适用于自定义颜色,标准颜色和基本主题颜色。当文本使用其中一种主题颜色着色时,目标文本将更改为没有色调的主题颜色。我怎样才能获得色彩和色彩?

vba ms-word word-vba
1个回答
1
投票

好吧,.Font.Color当然习惯了,至少在WD2007 - WD2013中。它返回了一个long值,该值是特定的RGB,非主题颜色,或者相当于主题颜色和色调(或阴影)组合的HEX值。 Tony Jollans为Word 2007写了一个detailed article,它给出了主题颜色的所有细节。

.Font.Color没有文档,因为它已被弃用,并且在Word 365中进行测试我可以确认它不再像过去那样工作。它现在只返回主题颜色而不是色调或阴影。

@Cindy Meister建议.Font.TextColor听起来好像应该给你寻求的价值。不幸的是,尽管它返回了一个ColorFormat对象,其中包含.ObjectThemeColor.Brightness.TintAndShade属性,但您将获得的唯一有效信息来自.ObjectThemeColor,因此无法满足您的需求。

要获得所需的所有信息,您必须将逻辑放在一边并检查.Font.Fill.ForeColor。 (喜欢,真的吗?!字体有填充颜色??)这也会返回一个ColorFormat对象,但这次所有属性都返回有效数据。

因此你应该改变:

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属性返回值-1为100%(即没有色调或阴影),0.6为40%轻,0.4为60%,等等。负值用于阴影,-0.75代表25%更暗和-0.5 50%更暗。

也可以将.Brightness设置为与调色板中的值不对应的值,例如, 0.25为75%轻,或-0.9为10%更暗。

© www.soinside.com 2019 - 2024. All rights reserved.