【问题标题】:How to remove Address?如何删除地址?
【发布时间】:2020-12-25 11:18:49
【问题描述】:

我正在尝试回复原始电子邮件发件人,并在抄送中保留和回复原始电子邮件中抄送中的所有电子邮件地址。

Sub estimate()
    Dim origEmail As MailItem
    Dim replyEmail As MailItem
       
    Set origEmail = Application.ActiveWindow.Selection.Item(1)
    Set replyEmail = Application.CreateItemFromTemplate("C:\Utils\Outlook_Templates\Estimate.oft")
       
    replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
    replyEmail.Subject = "RE: " + origEmail.Subject
    replyEmail.To = origEmail.Sender
    replyEmail.CC = origEmail.CC + ";" + replyEmail.CC
    replyEmail.Display
End Sub

这是有效的。但是在 CC 中,我经常有一些联系人(例如:John Doe),我想在回复时将其删除。

我想保留除 John Doe(抄送)以外的所有电子邮件地址。

编辑:此外,当我使用它来回复电子邮件时,它会重复“收件人”和“抄送”中的电子邮件地址。这是因为我已经在“模板”的“收件人”中定义了电子邮件。无论如何,假设这是在“收件人”和“抄送”中重复“我的老板”。如何将其从“CC”中删除?

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    这应该可行:

    Sub estimate()
        Dim origEmail As MailItem
        Dim replyEmail As MailItem
        Dim s() As String
        Dim add As String
        Dim i As Integer
    
        Set origEmail = Application.ActiveWindow.Selection.Item(1)
        Set replyEmail = Application.CreateItemFromTemplate("C:\Utils\Outlook_Templates\Estimate.oft")
    
        s = Split(origEmail.CC & ";" & replyEmail.CC, ";")
    
        For i = LBound(s) To UBound(s)
    
            If InStr(1, s(i), "John Doe") = 0 Then
                add = add & ";" & s(i)
    
             End If
        Next
    
    
        replyEmail.HTMLBody = replyEmail.HTMLBody & origEmail.Reply.HTMLBody
        replyEmail.Subject = "RE: " + origEmail.Subject
        replyEmail.To = origEmail.Sender
        replyEmail.CC = add
        replyEmail.Display
    
    
    End Sub
    

    【讨论】:

    • 它有效。谢谢。还有一件事:当我用它来回复电子邮件时,它会在“收件人”和“抄送”中重复电子邮件地址。这是因为我已经在“模板”的“收件人”中定义了电子邮件无论如何,假设这是在“收件人”和“抄送”中重复“我的老板”。如何从“CC”中删除它?
    【解决方案2】:

    其实根据Official Reference,你并不是要直接修改.CC属性:

    此属性仅包含显示名称。应该使用Recipients 集合来修改抄送收件人。

    那么正确的做法是:

    Dim i as Long
    
    ' If the address could occur multiple times, start at the end & work backwards
    For i = replyEmail.Recipients.Count To 1 Step -1
        If LCase(replyEmail.Recipients(i).Name) = LCase("John Doe") Then
            replyEmail.Recipients.Remove(i)
        End If
    Next
    
    replyEmail.Display
    

    【讨论】:

      【解决方案3】:

      首先,我建议不要手动设置每个属性,而是使用MailItem 类的Reply 方法,该方法从原始消息中创建一个预先寻址到原始发件人的回复。然后,您可以根据需要设置属性。

      其次,如果您需要设置收件人(更改、添加或删除),我建议您处理 Recipients 集合。 MailItem 类的相应属性返回一个 Recipients 集合,该集合代表 Outlook 项目的所有收件人。

      最后,您可能会发现 How To: Fill TO,CC and BCC fields in Outlook programmatically 文章很有帮助。

      【讨论】:

        猜你喜欢
        • 2019-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 2014-08-01
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多