标题说明了一切:可以将高亮转换为底纹(学习自“通过 VBA 将文本从高亮转换为底纹”) https://www.datanumen.com/blogs/convert-texts-shaded-highlighted-vice-versa-word-document/) 想要应用于选择而不是整个文档。 对于 16 个基色高光中的每一个,逐个字符执行也需要很长时间。 程序员可能知道更有效的例程。
Sub ConvertHighlightToShade()
Dim objCharacterRange As Range
For Each objCharacterRange In ActiveDocument.Characters
If objCharacterRange.HighlightColorIndex = wdDarkBlue Then
objCharacterRange.HighlightColorIndex = wdNoHighlight
objCharacterRange.Shading.BackgroundPatternColor = RGB(0, 0, 128) 'DarkBlue
Debug.Print "1of16", "Conv Hlgt t Shad.1of16", "#000080", "DarkBlue"
End If
Next objCharacterRange
For Each objCharacterRange In ActiveDocument.Characters
If objCharacterRange.HighlightColorIndex = wdGreen Then
objCharacterRange.HighlightColorIndex = wdNoHighlight
objCharacterRange.Shading.BackgroundPatternColor = RGB(0, 128, 0) 'Green
Debug.Print "4of16", "Conv Hlgt t Shad.4of16", "#008000", "Green"
End If
Next objCharacterRange
End Sub
我尝试使用以下模型来隔离选择区域,但变化失败。
https://www.bettersolutions.com/word/characters/vba-range-object.htm
重新定义范围对象
您可以使用 SetRange 方法重新定义现有的 Range 对象
以下示例将范围对象定义为等于当前选择,然后重新定义它以引用当前选择加上接下来的 10 个字符。
调暗 objRange 作为范围
设置 objRange = ActiveWindow.Selection.Range
objRange.SetRange(Start:=objRange.Start, _
结束:=objRange.End+10)
我注意到使用范围的优点出现在 https://bettersolutions.com/word/characters/vba-range-vs-selection.htm
无需逐个字符地爬行文档。 Word 的内置查找功能将为您找到突出显示的文本。
下面的例程用相同颜色的阴影替换高光。
Sub ConvertHighlightToShade()
Dim findRange As Range: Set findRange = Selection.Range
With findRange
With .Find
.ClearFormatting
.Highlight = True
.Forward = True
.Wrap = wdFindStop
End With
Do While .Find.Execute
.Shading.BackgroundPatternColorIndex = .HighlightColorIndex
.HighlightColorIndex = wdNoHighlight
.Collapse wdCollapseEnd
Loop
End With
End Sub