如何将样式应用于文档中的所有交叉引用?

问题描述 投票:0回答:1

我创建了一个超链接样式,将文本变为蓝色和粗体。

我想将样式应用到文档中的超链接。

当我运行宏时,输出是“未找到超链接。”

    Dim objDoc As Document
    Dim objFld As Field

    Set objDoc = ActiveDocument 
    If Selection.Fields.Count >= 1 Then
        For Each objFld In objDoc.Fields 
            If objFld.Type = wdFieldRef Then 
                objFld.ShowCodes = True
                objFld.Select
                Selection.Collapse wdCollapseStart
                Selection.MoveStartUntil "R"
                Selection.Fields(1).Code.Text = Selection.Fields(1).Code.Text & "\*CharFormat"
                Selection.Style = ActiveDocument.Styles("HyperlinkStyle")
                objFld.Update 
                objFld.ShowCodes = True
            End If
        Next objFld
    Else
        MsgBox "No hyperlinks found.", vbInformation, "Select OK"
    End If
End Sub
vba ms-word hyperlink cross-reference
1个回答
1
投票

尽管您的交叉引用链接到文档的其他部分,但它们的处理方式与实际的超链接不同。如果它们是默认的超链接,则将应用 FollowedHyperlink 样式。

您看到该消息,其措辞具有误导性,不是因为文档中没有超链接,而是因为当前所选文本中没有字段。您可以通过查看整个文档而不仅仅是选定的文本来避免这种情况。

就我个人而言,我会将“HyperlinkStyle”重命名为“交叉引用文本”,以使样式的目的清晰,除非您希望所有超链接都采用这种方式格式,在这种情况下,只需修改超链接样式并使用它即可。

您还可以直接使用

objFld
:

来避免更改选择

子格式交叉引用() Dim objDoc 作为文档 调暗 objFld 作为字段

Set objDoc = ActiveDocument
If objDoc.Fields.Count >= 1 Then
    For Each objFld In objDoc.Fields
        With objFld
            If .Type = wdFieldRef Then
                If Not Right(.Code.Text, 13) = "\*CharFormat " Then .Code.Text = .Code.Text & "\*CharFormat "
                .Code.Characters.First.Style = objDoc.Styles("Cross Reference Text")
                .Result.Style = objDoc.Styles("Cross Reference Text")
            End If
        End With
    Next objFld
Else
    MsgBox "No cross references found.", vbInformation, "Select OK"
End If

结束子

© www.soinside.com 2019 - 2024. All rights reserved.