【问题标题】:How to copy a hyperlink from a single cell in excel to a word document which is being created and populated by VBA aleady?如何将excel中单个单元格的超链接复制到由VBA aleady创建和填充的word文档?
【发布时间】:2020-04-19 13:26:47
【问题描述】:

对 VBA 非常缺乏经验,但正在尝试处理一个项目。我有一个包含大量联系信息的 excel 文件。每个条目都包含特定家庭的姓名、电话号码、地址。

我正在使用这些信息创建一个地址簿,这需要一个 Word 文档(是的,还有其他方法可以做到这一点,但这是一个联合项目,这是选择的方法)。

我能够以我想要的方式填充整个通讯录,包括页面和页面格式等。

显然,大部分情况是有序地阅读工作簿,并使用 TypeText 将各种信息放在我想要的位置。

不过,我也想把这个做成pdf,放在我的手机上,把电话号码做成超链接,这样我就可以直接拨号了。我唯一的障碍是维护从 Excel 到 Word 的传输中的超链接。似乎 .TypeText 只携带文本,而不是超链接格式,所以它没有做我需要的。

还有什么我可以做的吗?

我认为有一种复制/粘贴安排可以帮助我,但我缺乏足够的经验来在我的代码中间插入这样的例程。

这是将电话号码转移过来的代码:

对于 y3 = (b + 1) 到 d

        'FirstPhone
        .TypeText Value(Cells(y3, 7)) & vbTab
        'LastName
        .BoldRun
        If Cells(y3, 20) = "U" Then .Font.Underline = wdUnderlineSingle
        .TypeText (Cells(y3, 3))
        .Font.Underline = wdUnderlineNone
        .BoldRun
        'Logic to determine if there needs to be a hard return, and if there are more phones
        ' Add if there is a spouse, or children, etc
        .TypeText (", " & Cells(y3, 4))
          If Cells(y3, 5).Value <> "" Then .TypeText (" & " & Cells(y3, 5))
          If Cells(y3, 6) <> "" Then .TypeText ("; " & Cells(y3, 6))
            Names = Cells(y3, 3) & ", " & Cells(y3, 4) & " & " & Cells(y3, 5) & "; " & Cells(y3, 6)
            Address = Cells(y3, 15) & ", " & Cells(y3, 17) & ", " & Cells(y3, 18) & "  " & Cells(y3, 19)
          If Len(Names) + Len(Address) > 70 Or Cells(y3, 8) <> "" Then .TypeText (Chr(11))
          If Cells(y3, 8) = "" And Address = ", ,   " Then .TypeText (Chr(11))
          If Cells(y3, 8) <> "" Then .TypeText (Cells(y3, 8))
          If Cells(y3, 15) <> "" Then .TypeText (vbTab & Address)
          If Cells(y3, 8) <> "" Or Cells(y3, 15) <> "" Then .TypeText (Chr(11))
          If Cells(y3, 9) <> "" Then .TypeText (Cells(y3, 9) & Chr(11))
          If Cells(y3, 10) <> "" Then .TypeText (Cells(y3, 10) & Chr(11))
          If Cells(y3, 11) <> "" Then .TypeText (Cells(y3, 11) & Chr(11))

        Next y3

y3 是行的索引。工作簿中的第 7 列是电话号码所在的位置。本节的其余部分专门用于引入地址等......对于这个问题来说并不是那么必要。

在这段代码之前,我已经创建了 Word Doc,选择了一些格式,并在 Word Doc 中打印了一个节标题。这就是为什么我可以从这里开始,只需将相关单元格的内容键入文本即可。

我想知道的是:如何在此处复制电话号码的超链接,而不是简单地将文本输入 WordDoc?

谢谢。

【问题讨论】:

    标签: excel vba hyperlink ms-word


    【解决方案1】:

    为了完成您所描述的操作,从用户模拟(可能记录的宏完全按照用户所做的操作)过渡到使用 Word 的对象模型会很有用。由于只提供了一个代码sn-p,所以很难说明这是什么意思,但是……

    而不是Selection.TypeText,在这种情况下,它意味着使用Range 对象,可以为其分配文本(Range.Text = "abc")。然后Range 也可以用作创建Hyperlink 对象的目标对象。

    只取似乎处理电话号码的那行代码:

    Dim rng as Word.Range `or Object, if late-binding is use - not evident from the code in the question
    Set rng = Selection.Range
    If Cells(y3, 11) <> "" Then 
        rng.Text = Cells(y3, 11) & Chr(11)  'Assign normal text
        'rng.Parent is the document. I use this since there's no information in 
        'the question about how the document is manipulated in this code
        rng.Parent.Hyperlinks.Add rng, "link information"
    End If
    

    请注意,我无法向您提供超链接地址信息,因为我不知道电话号码可能是什么。我的系统没有超链接到电话号码。您必须研究电话号码的有效超链接地址是什么。最好的方法可能是直接在 Word 中创建一个,然后按 Alt+F9 切换到基础域代码。上面的代码 sn-p 中的"link information" 需要这种基本格式。

    【讨论】:

    • 谢谢辛迪。我正在使用早期绑定,所以这将为您解答。有问题的部分实际上是(y3,7)有问题的电话号码,它位于我引用的代码的开头。 (y3,8) 和 (y3,9)、(y3,10) 和 (y3,11) 也是电话号码,您可以看到我对它们所做的一切(至少是最后一个)是将它们插入左边距,然后硬返回。我创建超链接没有问题。我不确定您所说的“如何操作文档”是什么意思,我很乐意提供更多代码来对此有所帮助。
    • 还有几个问题... Excel 中已经存在超链接。这有什么区别吗?这似乎表明在 VBA 过程中创建它更容易。其次,电话号码的地址是:“+tel:”后跟电话号码。而且,我不确定在语法上这样做。谢谢。
    • @RichardRaschke 所有这一切的关键是找出 Word 用于超链接电话号码的域代码语法。看答案的最后。这不是我能为你做的……
    • 假设您有一个电话号码,例如 555-123-4567。您希望该电话号码的 链接文本 是什么?现实情况是,例如,某些系统错误地将数字解释为电话号码。
    • 好的..我正在尝试这个.....我只是在我的代码中插入了 Cindy 的建议:
    猜你喜欢
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2021-09-30
    • 2016-08-23
    相关资源
    最近更新 更多