首页 > 解决方案 > 如何将单词转换为链接到同一文档中书签的超链接?

问题描述

我真的有这个问题。想象一下我有“stackoverflow”这个词。在文件的最后有一个词汇表。现在我需要一个宏来搜索所有出现的 stackoverflow 并将它们替换为指向表中书签的超链接。读者仍然可以看到“stackoverflow”,但可以单击它跳转到词汇表。我可以在“地址”字段中插入在线链接,并认为我需要子地址字段但不知道该放什么..提前谢谢你!

Sub Convert_String()
Dim Word
Dim R As Range
Dim Tabellenanzahl
Dim T As Table
Dim Link As Hyperlink

Set R = ActiveDocument.Range
Tabellenanzahl = ActiveDocument.Tables.Count
Set T = ActiveDocument.Tables(Tabellenanzahl)
ActiveDocument.Bookmarks.Add "Anker", T.Range

For Z = 2 To T.Rows.Count
    Set Wort = T.Cell(Z, 1)

        With R.Find
            .ClearFormatting
            .Text = Word
            .Forward = True
            .Wrap = wdFindStop
        End With

    Do While R.Find.Execute
        R.Hyperlinks.Add Anchor:=Selection, SubAddress:="Anker", TextToDisplay:="GoToGlossaryTest"
    Loop

  Next

End Sub

标签: vbams-word

解决方案


尝试:

Sub GlossaryLinker()
Application.ScreenUpdating = False
Dim Tbl As Table, Rng As Range, HLnk As Hyperlink
Dim strFnd As String, BkMkNm As String, r As Long
With ActiveDocument
  Set Tbl = .Tables(.Tables.Count)
  For r = 2 To Tbl.Rows.Count
    With Tbl.Cell(r, 1)
      Set Rng = .Range
      With Rng
        .End = .End - 1
        strFnd = Trim(Split(.Text, vbCr)(0))
        BkMkNm = Replace(strFnd, " ", "_")
        .Bookmarks.Add BkMkNm, .Duplicate
      End With
    End With
    Set Rng = .Range(.Range.Start, Tbl.Range.Start)
    With .Range
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Format = False
        .Text = strFnd
        .Wrap = wdFindStop
        .MatchWholeWord = True
        .MatchWildcards = False
        .MatchCase = True
        .Execute
      End With
      Do While .Find.Found
        If .InRange(Rng) = False Then Exit Do
        Set HLnk = .Hyperlinks.Add(.Duplicate, , BkMkNm, , .Text)
        .End = HLnk.Range.End
        .Collapse wdCollapseEnd
        .Find.Execute
      Loop
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub

推荐阅读