代码之家  ›  专栏  ›  技术社区  ›  Tadej Gr

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

  •  1
  • Tadej Gr  · 技术社区  · 6 年前

    我有一个超链接(例如 www.google.com )突出显示,可能使用不同的颜色。
    我想确定超链接中每个字符的突出显示颜色。

    我使用了: r.Hyperlinks(i).Range.Characters(j).HighlightColorIndex
    对于超链接的第一个(j=1)字符(在本例中为w),我得到HighlightColorIndex=999999,而不管突出显示的颜色如何。对于所有剩余的字符(www.google.com),代码都有效。

    我也试过了 r.Hyperlinks(i).Range.Characters.First.HighlightColorIndex ,但对于j=1,它也返回999999。

    如何获取超链接中第一个字符的突出显示颜色的值?

    1 回复  |  直到 4 年前
        1
  •  0
  •   Cindy Meister    6 年前

    问题是,以这种方式查询时,范围的第一个字符位于“中间”。一种方法是

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

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

    对于超链接,这些是字段代码这一事实使得处理第一个和最后一个字符变得很棘手,因为“选择”它们 in代码 拿起 全部的 字段-这就是为什么得到999999(=未定义-多种颜色)。

    我只能找到一种方法来解决这个问题:使用 SendKeys 要像用户一样选择第一个和最后一个字符(Shift+向右箭头)。我不喜欢它;我担心这不太可靠。代码将 如果从VBA编辑器运行,则可以正常工作-it 必须 从应该执行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