【问题标题】:VBA form mailto hyperlink ouput to client questionVBA表单mailto超链接输出到客户问题
【发布时间】:2011-10-13 17:34:54
【问题描述】:

我有一个在 Excel 表中查找电子邮件地址的表单,该表单在创建 mailto 超链接时效果很好。它们看起来像这样......

但是我想显示这个人的真实姓名,像这样,而且我有可用的字符串...

我的问题是这是否可以通过构建链接的方式来完成,或者这是电子邮件客户端通过从地址簿进行匹配来完成的事情? 我更愿意训练地址簿,而不是只创建电子邮件地址。

另外这是我所拥有的示例

Link = "mailto:" & EmpForm.Label10
whoTo = EmpForm.TextBox3 'which I want to use in the TO:whoever
ActiveWorkbook.FollowHyperlink Address:=Link, NewWindow:=True

【问题讨论】:

  • 这是 Excel 还是 Outlook vba?你能告诉我们你的代码吗?您可能可以使用几行代码(使用split 和一些字符转换)将收件人字段设置为您想要的名称,但我需要进一步查找地址簿部分,如果我可以,那将毫无用处不明白怎么叫
  • @JMax Excel vba。如果可能的话,我希望默认客户端通常可以处理这个问题,但是这些用户中的大多数确实有 Outlook2003。我正在添加在 userForm 上调用的代码示例。

标签: email vba hyperlink mailto


【解决方案1】:

如果您发送邮件的电子邮件地址存在于其通讯簿中,Outlook 新邮件窗口将显示您的姓名,否则将显示完整的电子邮件地址。

【讨论】:

  • 我意识到这一点。我知道新收到的电子邮件使用用户名及其相关电子邮件地址“训练”地址簿。我希望不仅用普通的电子邮件地址填充地址簿,还希望使用关联的名称。
  • 你是如何操作 Outlook 通讯录的。从上面的代码中,我只能看出 VBA 代码只是跟随 mail-to 链接并打开一封新邮件。我认为电子邮件地址正在保存在通讯簿中。
  • Outlook 就是这样做的。任何传出的电子邮件都保存为条目,但保存为电子邮件地址,而不是用户名,因为没有使用任何内容。我不是在操纵 Outlook,我只是希望以这样的方式发送电子邮件,让 Outlook 和 Outlook Express 为未来创建一个更有用的条目
【解决方案2】:

不要从 Excel 中访问链接,而是删除此部分:

ActiveWorkbook.FollowHyperlink Address:=Link, NewWindow:=True

您可以从 Excel 创建邮件。因此,您可以设置所需的参数。
这是一个代码示例(找到here):

' requires a reference to the Microsoft Outlook 8.0 Object Library    
Sub SendAnEmailWithOutlook()
' creates and sends a new e-mail message with Outlook
Dim OLF As Outlook.MAPIFolder, olMailItem As Outlook.MailItem
Dim ToContact As Outlook.Recipient
    Set OLF = GetObject("", _
        "Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    Set olMailItem = OLF.Items.Add ' creates a new e-mail message
    With olMailItem
        .Subject = "Subject for the new e-mail message" ' message subject
        Set ToContact = .Recipients.Add("name@domain.com") ' add a recipient
        Set ToContact = .Recipients.Add("name@company.com") ' add a recipient
        ToContact.Type = olCC ' set latest recipient as CC
        Set ToContact = .Recipients.Add("name@org.net") ' add a recipient
        ToContact.Type = olBCC ' set latest recipient as BCC
        .Body = "This is the message text" & Chr(13) 
        ' the message text with a line break
        .Attachments.Add "C:\FolderName\Filename.txt", olByValue, , _
            "Attachment" ' insert attachment
'        .Attachments.Add "C:\FolderName\Filename.txt", olByReference, , _
             "Shortcut to Attachment" ' insert shortcut
'        .Attachments.Add "C:\FolderName\Filename.txt", olEmbeddedItem, , _
             "Embedded Attachment" ' embedded attachment
'        .Attachments.Add "C:\FolderName\Filename.txt", olOLE, , _
             "OLE Attachment" ' OLE attachment
        .OriginatorDeliveryReportRequested = True ' delivery confirmation
        .ReadReceiptRequested = True ' read confirmation
        '.Save ' saves the message for later editing
        .Send ' sends the e-mail message (puts it in the Outbox)
    End With
    Set ToContact = Nothing
    Set olMailItem = Nothing
    Set OLF = Nothing
End Sub

要创建收件人字段,您可以使用:

arrTo = Split(whoTo,"@")
whoTo = UCase(arrTo[0]) & " " & UCase(arrTo[1]) & "<" & whoTo & ">"

【讨论】:

  • 我同意这将是一个很好的解决方案,但是消息组成与有时使用的 excel 表完全无关,而且我不在乎重现电子邮件的所有编辑功能客户为此。这是一个时间表,双击员工姓名会显示与他们相关的信息。但好建议 +1
  • 如果用户没有安装outlook客户端会怎样?按照您在此处的建议,这可能是最好的方法,但在某些情况下并非如此。
  • 我认为 Excel 在尝试创建 Outlook.Application 对象时会引发错误。如果您保留此解决方案,您可以尝试抓住它并处理它
猜你喜欢
  • 2013-10-24
  • 1970-01-01
  • 2012-07-09
  • 2015-07-23
  • 2015-03-16
  • 2018-10-20
  • 2021-08-31
  • 2021-07-29
  • 1970-01-01
相关资源
最近更新 更多