在 MS *Word* VBA 中循环遍历非连续选择的部分

Looping through the parts of a non-contiguous selection in MS *Word* VBA

I have a macro in MS Word 2013 VBA (not Excel) that toggles the selected text's highlight color. Code looks like this:

If Selection.Range.HighlightColorIndex = WhtColor Then Selection.Range.HighlightColorIndex = wdNoHighlight Else Selection.Range.HighlightColorIndex = WhtColor

That works great for continuous/contiguous selections. But, if I select, say, 4 non-contiguous rows in a Word table (say, rows 5, 12, 15, and 19), the macro highlights only the last row selected.

How do I get the HighlightColorIndex to apply to all "parts" of the noncontiguous range, or, how do I loop through the different "parts" of the range and apply the HighlightColorIndex to each part?

Tim Williams 指向的网页 (support.microsoft.com/en-us/kb/288424) 提供了有关如何实现这一点的线索。但是,link 确实 表明不能循环遍历非连续的选择。

然而,link 还表明可以为非连续选择设置字体格式 ,但不能为范围对象设置。

这是 对非连续选择起作用的修订代码:

If Selection.Font.Shading.BackgroundPatternColor = WhtColor Then Selection.Font.Shading.BackgroundPatternColor = wdColorAutomatic Else Selection.Font.Shading.BackgroundPatternColor = WhtColor

该代码会将背景颜色更改为所选的目标颜色(尽管我必须将颜色代码从 Wd 常量更改为 WdColor 常量)。

这种方法的唯一缺点是我不知道如何搜索背景颜色已更改的文本,而您可以搜索突出显示的文本。

无论如何,谢谢@Tim Williams 的帮助link。希望以上内容可以帮助那些只想更改字体属性并且实际上不必遍历所选范围的各个部分的其他人。