【问题标题】:Looping through the parts of a non-contiguous selection in MS *Word* VBA在 MS *Word* VBA 中循环遍历非连续选择的部分
【发布时间】:2017-02-07 06:23:39
【问题描述】:

我在 MS Word 2013 VBA(不是 Excel)中有一个宏,可以切换所选文本的突出显示颜色。代码看起来像 这个:

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

这对于连续/连续选择非常有用。但是,如果我 例如,在 Word 表中选择 4 个不连续的行(例如,第 5 行、第 12 行、 15 和 19),宏只突出显示最后选定的行。

如何让 HighlightColorIndex 应用于 不连续的范围,或者,我如何遍历不同的“部分” 范围并将 HighlightColorIndex 应用于每个部分?

【问题讨论】:

  • support.microsoft.com/en-us/kb/288424 - 虽然不知道这是多么最新
  • 解决了这个问题。但是,考虑到代码的实际目标是什么,这个问题并不是真正的重复。感谢@Tim Williams 提供的链接中的信息,我已经用解决方案更新了上述问题。
  • 很抱歉 - 在发布之前我没有完全阅读链接页面。我重新打开了你的问题,所以你现在应该可以回答了……

标签: vba ms-word word-2013


【解决方案1】:

Tim Williams 指向的网页 (support.microsoft.com/en-us/kb/288424) 提供了有关这如何可能的线索。但是,该链接确实表明不能循环通过非连续选择。

不过,该链接还显示,字体格式可以设置为非连续选择,但不能设置为范围对象。

以下是修改后的代码, 适用于非连续选择:

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

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

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

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

【讨论】:

  • 很高兴发现@DRC 在这里使用了它:stackoverflow.com/a/46106637/3451115(遗憾的是,MS 的链接现已失效)
  • @SlowLearner -- 在那个帖子中巧妙地应用了这个想法。不错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 2020-10-06
相关资源
最近更新 更多