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

Determine the Highlight color of the first character in a hyperlink

我有一个突出显示的超链接(例如 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也是returns9999999。

如何获取超链接第一个字符的高亮颜色值?

问题是当您以这种方式查询时,Range 的第一个字符位于 "between"。一种查看方式是

  • 显示样式窗格(在主页选项卡中,单击 "Styles" 组的对话框启动器)
  • 单击第三个字符周围的超链接并查看样式名称
  • 使用向左箭头直到插入点(光标)刚好位于超链接中第一个字符的左侧

当我这样做时,我看到样式名称从 "Hyperlink" 切换到 "Normal" - IOW Word 正在查看到那时为止有效的内容,而不是接下来的内容。 (我很惊讶!)。如果我随后按住 Shift 键并按右箭头键,我会看到超链接样式 selected,正如我所期望的那样。

对于超链接,这些是字段代码这一事实使得处理第一个和最后一个字符变得棘手,因为 "selecting" 它们 在代码 中选择了 entire 字段 - 这就是为什么你得到 999999(= 未定义 - 不止一种颜色)。

我只能找到一种解决此问题的方法:像用户一样使用 SendKeys 到 select 第一个和最后一个字符(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