我正在编写一个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
似乎无法正确使用自定义颜色。如果我应该使用另一个属性,请告诉我。
这适用于自定义颜色,标准颜色和基本主题颜色。当文本使用其中一种主题颜色着色时,目标文本将更改为没有色调的主题颜色。我怎样才能获得色彩和色彩?
好吧,.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%更暗。