【问题标题】:How can I convert a word to a hyperlink linking to a Bookmark in the same document?如何将单词转换为链接到同一文档中书签的超链接?
【发布时间】:2019-12-19 08:39:14
【问题描述】:

我真的对这个有问题。想象一下我有“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

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    试试:

    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
    

    【讨论】:

    • 谢谢!你能解释一下这部分吗?我在那里得到索引越界错误:With Rng .End = .End - 1 strFnd = Trim(Split(.Text, vbCr)(0)) BkMkNm = Replace(strFnd, " ", "_") .Bookmarks.Add BkMkNm, .Duplicate End With
    • 如果您有时间评论更多职位,我会很高兴。尤其是上面提到的部分和这个:Set HLnk = .Hyperlinks.Add(.Duplicate, , BkMkNm, , .Text) .End = HLnk.Range.End .Collapse wdCollapseEnd .Find.Execute
    • 我可以看到发生错误的唯一方法是,如果您的参考单元格包含一个空的第一段,或者您的书签名称中有一个非法字符。哪个特定行生成了错误消息?
    • 您可以在 Word 的 VBA 帮助文件中找到各种方法的完整说明。
    • 是的,我最后有空行和一些奇怪的字符,但写了一个清理单词的函数。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2015-10-23
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多