Word VBA将阴影应用于新创建的字段

问题描述

我正在为文档添加字段并添加阴影。以下代码不起作用。

With Selection
    .Range.Font.Shading.BackgroundPatternColor = wdColorLightYellow
    .Fields.Add Range:=Selection.Range,Type:=wdFieldEmpty,_
        PreserveFormatting:=False,Text:="Page"
    .Fields.Update
End With
'ActiveDocument.Fields(1).Select
'Selection.Range.Font.Shading.BackgroundPatternColor = wdColorLightYellow

注释掉的行会将阴影添加到文档的第一个字段中。

解决方法

在应用阴影点时,没有选择任何内容,范围的起点和终点相同。尽管在用户界面中,您可以在键入之前应用粗体或斜体等格式,但是应用阴影会将其应用于整个段落。

要仅对字段进行阴影处理,就需要在应用阴影之前对其进行选择,就像问题中的替代代码一样。

With Selection
    .Fields.add Range:=Selection.Range,Type:=wdFieldEmpty,_
        PreserveFormatting:=False,text:="Page"
    .Fields.Update
    .MoveLeft Extend:=wdExtend
    .Range.Font.Shading.BackgroundPatternColor = wdColorLightYellow
    'this also works
    '.Shading.BackgroundPatternColor = wdColorLightYellow
End With
,

由于您使用的是VBA,因此可以说使用“ With”来处理刚创建的字段对象,例如

With Selection
  With .Fields.Add( _
    Range:=Selection.Range,_
    Type:=wdFieldEmpty,_
    PreserveFormatting:=False,_
    Text:="Page")
    .Update
    ' you either need to color .Code,.Result,or both  
    .Code.Font.Shading.BackgroundPatternColor = wdColorLightYellow
    .Result.Font.Shading.BackgroundPatternColor = wdColorLightYellow
  End With
End With