确定超链接中第一个字符的突出显示颜色

时间:2018-03-26 11:27:00

标签: ms-word word-vba highlight

在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。

如何获得超链接中第一个字符的高亮颜色的正确值?我无法弄清楚这里有什么诀窍。非常感谢您的帮助。

1 个答案:

答案 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