在MS Word中,我有一个突出显示的超链接(例如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。
如何获得超链接中第一个字符的高亮颜色的正确值?我无法弄清楚这里有什么诀窍。非常感谢您的帮助。
答案 0 :(得分:0)
问题是,Range的第一个字符位于"之间。当你以这种方式查询它。一种看待它的方法是
当我这样做时,我看到样式名称从" Hyperlink"到"正常" - 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