创建宏以将文本转换为超链接,将显示文本连接到标准格式

时间:2018-05-08 20:16:58

标签: vba hyperlink ms-word word-vba

我必须为故障单项创建大量超链接,其中更改的URL的唯一部分是故障单ID。我是新手,VBA的大部分帮助都是为了excel。我的问题存在于MS-word中,并且难以传递语法。

我希望用户在输入6位票证ID后调用宏。理想情况下,宏会自动选择用户输入的最后一个单词,并将其附加到永不更改的网址段。

我尝试录制一个宏,该宏复制输入的最后一个单词,然后将其连接到标准URL的末尾。

我可以用键盘快捷键成功完成所有操作,所以我想我会被设置。问题是宏只使用录制示例中的文本。它还会将我的文本显示为示例文本。

将任何文本转换为我在录制中用作示例的链接。

我无法弄清楚如何让VBA使用复制的文本来显示文本以及URL的最后6位数字。

请参阅下面的VBA语法

Sub textToHyperlink()
'
    Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
    Selection.Copy
    ChangeFileOpenDirectory _
        "/Users/chris/Library/Containers/com.microsoft.Word/Data/Library/Preferences/AutoRecovery/"
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        "https://someboringwebsite.com/WorkItem&id=123456", SubAddress:="", ScreenTip:="", _
        TextToDisplay:="123456"

End Sub

2 个答案:

答案 0 :(得分:1)

这可能有效:

Sub textToHyperlink()
'
    Dim TicketID As String
    TicketID = Selection.Range.Text 
    'You may need to clean up TicketID (remove <CR> etc.) before 
    'sticking it in the hyperlink. Depends on what's in Selection.

    ' Not sure what this line does
    ' ChangeFileOpenDirectory _
        "/Users/chris/Library/Containers/com.microsoft.Word/Data/Library/Preferences/AutoRecovery/"
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        "https://someboringwebsite.com/WorkItem&id=" & TicketID, SubAddress:="", ScreenTip:="", _
        TextToDisplay:=TicketID

End Sub

希望有所帮助。

答案 1 :(得分:1)

以下是对您在评论中的澄清的回应(我已将其纳入您的问题)。有两种变化

1)遵循您的前提,使用用户输入。请注意,无论文本在何处,都会使用前面的单词。并且在用户可能已经键入空格(或许多空格)的情况下,从该单词的末尾移除所有空格。 (这些代码行被注释掉了。)

2)您(和用户)可能会发现使用InputBox更简单,以便用户可以直接键入票证ID - 无需担心文本中的位置,空格或任何内容。超链接将插入选择中。

Sub textToHyperlink()
'
    Dim sID As String
'    Dim rng As word.Range
'
'    Set rng = Selection.Range
'    rng.MoveStart wdWord, -1
'    sID = Trim(rng.Text)
    sID = InputBox("Please enter the ticket ID")
    ActiveDocument.Hyperlinks.Add anchor:=rng, Address:= _
        "https://someboringwebsite.com/WorkItem&id=" & sID, SubAddress:="", ScreenTip:="", _
        TextToDisplay:=sID

End Sub