【问题标题】:Determine the Highlight color of the first character in a hyperlink确定超链接中第一个字符的突出显示颜色
【发布时间】:2018-09-04 12:46:02
【问题描述】:
我有一个超链接(例如www.google.com)被突出显示,可能有不同的颜色。
我想确定超链接中每个字符的突出显示颜色。
我用过:
r.Hyperlinks(i).Range.Characters(j).HighlightColorIndex
对于超链接的第一个 (j=1) 字符(在本例中为 w),无论突出显示颜色如何,我都会得到 HighlightColorIndex=9999999。对于所有剩余的字符 (ww.google.com),该代码有效。
我也尝试了r.Hyperlinks(i).Range.Characters.First.HighlightColorIndex,但对于 j=1,它也返回 9999999。
如何获取超链接中第一个字符的高亮颜色值?
【问题讨论】:
标签:
vba
ms-word
highlight
【解决方案1】:
问题在于,当您以这种方式查询 Range 时,Range 的第一个字符位于“between”。一种查看方式是
- 显示样式窗格(在主页选项卡中,单击“样式”组的对话框启动器)
- 单击第三个字符周围的超链接并查看样式名称
- 使用向左箭头直到插入点(光标)刚好位于超链接中第一个字符的左侧
当我这样做时,我看到样式名称从“超链接”切换到“普通” - IOW Word 正在查看到那时有效的内容,而不是接下来的内容。 (我很惊讶!)。如果我然后按住 Shift 并按右箭头,我会看到选择的超链接样式,正如我所期望的那样。
使用超链接,这些是域代码这一事实使得处理第一个和最后一个字符变得很棘手,因为“选择”它们在代码中会拾取整个域 -这就是为什么您会得到 999999(= 未定义 - 不止一种颜色)。
我只能找到一种解决方法:使用SendKeys 像用户一样选择第一个和最后一个字符(Shift+右箭头)。我不喜欢它;我担心它不会很可靠。如果您从 VBA 编辑器运行代码,该代码将不会正常工作 - 它必须从应该执行 SendKeys 的文档界面运行(例如,QAT 中的按钮)。以下对我有用:
Sub HyperlinkHighlight()
Dim R As word.Range, c As word.Range
Dim doc As word.Document
Dim f As word.Field
Dim i As Long, j As Long
Set doc = ActiveDocument
Set R = doc.content
For i = 1 To R.Hyperlinks.Count
R.Hyperlinks(i).Range.Characters(1).Select
Selection.Collapse wdCollapseStart
SendKeys "+({Right})", True
DoEvents
Debug.Print Selection.Range.HighlightColorIndex
For j = 2 To R.Hyperlinks(1).Range.Characters.Count - 1
Debug.Print R.Hyperlinks(i).Range.Characters(j).HighlightColorIndex
Next j
R.Hyperlinks(i).Range.Characters(R.Hyperlinks(i).Range.Characters.Count - 1).Select
Selection.Collapse wdCollapseEnd
SendKeys "+({Right})", True
DoEvents
Debug.Print Selection.Range.HighlightColorIndex
Next i
End Sub