2017-02-27 620 views
1

我有一个插入文本的宏。到目前为止它运行良好,但是...现在对于某些文档,当它应用颜色时会出现错误445。 下面是代码:VBA Word:Font.TextColor和Font.ColorIndex之间的区别?

'Some code before that insert a first page with a different section and writes into the header 
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument 
Selection.TypeParagraph 

With Selection.Font 
    .Name = "Calibri" 
    .Size = 14 
    .Bold = True 
    .Italic = False 
    .TextColor = RGB(68, 114, 196) 
End With 

With Selection.ParagraphFormat 
    .Alignment = wdAlignParagraphCenter 
    .SpaceAfter = 6 
End With 

Selection.TypeText Text:="eReference file for work order: " 
ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:="workorder" 

Selection.TypeParagraph 

我已经通知,如果我改变 “Selection.Font.TextColor = RGB(68,114,196)” 和由替换为 “Selection.Font.ColorIndex = wdDarkBlue” , 有用。因此我的问题是:两者有什么区别?为什么有一些“Textcolor”不起作用的文档?

谢谢!

+0

。TextColor是只读的,所以你不能将它设置为你想要的颜色。 – gizlmo

+0

它的工作原理?你的意思是设置'Font.ColorIndex = RGB(68,114,196)'将颜色设置为RGB(64,114,196)?或者仅仅是它不会崩溃?因为鉴于'WdColorIndex'枚举的性质,我非常怀疑将它分配给RGB值会给你你提供的颜色。我可能错了 - 虽然我不太熟悉Word对象模型。 –

+0

@ Mat'sMug我的意思是,如果我使用'Selection.Font.ColorIndex = wdDarkBlue'例如,它将颜色设置为深蓝色。 – Pookye

回答

0

Font.TextColorFont.ColorIndex都记录在MSDN上。

ColorIndex

返回或设置表示指定字体的颜色的WdColorIndex恒定。读/写。

WdColorIndex是一个枚举,它定义了一些预定义的常量。作为一个枚举,其基础值是一个数值 - 一个整数。当你将它分配给RGB函数调用的结果时,你会给它一个Long整数,但不是的值 - 我非常怀疑你获得的颜色与你设置的RGB值相匹配。

TEXTCOLOR

返回ColorFormat对象,表示指定字体颜色。只读。

A ColorFormat对象为您提供了更多的控件来控制如何格式化事物。它是只读的,因为它是一个对象 - 这并不意味着你不能改变它(如在,修改其状态),它只意味着你不能将Set那个对象引用到别的东西...但无论如何你不需要那样做。

因此,不是这样的:

.TextColor = RGB(68, 114, 196) 

你可以这样做:

.TextColor.RGB = RGB(68, 114, 196) 

ColorFormat.RGB Property on MSDN

FWIW我得到运行时错误5843当试图非枚举值赋给Font.ColorIndex,所以我很困惑你的意思是“它的工作原理”是什么 - 尤其因为智能感知为您提供可能的值:

wdColorIndex constants

+0

谢谢你的解释。我明白现在的差异,但不幸的是你提出的建议不起作用。我仍然有同样的错误。我真的没有看到我可以做错什么... – Pookye

+0

@Pookye它适合我。你确定错误是在你认为的线上提出的吗? –

+1

@Pookye可能是因为你正在处理'Selection' - 我不是那么熟悉MS-Word,但是在Excel中''Selection''可以是字面上的任何东西,编码反对它是可怕的做法,使得可怕的虚弱的代码。 –

相关问题