【问题标题】:Create excel mail merge with IBM Notes使用 IBM Notes 创建 excel 邮件合并
【发布时间】:2016-06-27 14:33:37
【问题描述】:

早安,

我有一些代码可以根据 excel 中的列在 IBM Notes 中创建电子邮件邮件合并。我遇到的唯一麻烦是我想为 A 列中的每个电子邮件地址创建单独的电子邮件。我也无法弄清楚如何让它为每个收件人附加一个特定的文件,文件的位置将在 C 列中。谁能帮我吗?

Sub SendQuoteToEmail()

 Dim NSession As Object
 Dim NDatabase As Object
 Dim NUIWorkSpace As Object
 Dim NDoc As Object
 Dim NUIdoc As Object
 Dim WordApp As Object
 Dim subject As String
 Dim EmailAddress As Variant

 subject = Worksheets("Sheet1").Range("B2")
 Debug.Print subject

Set NSession = CreateObject("Notes.NotesSession")
Set NUIWorkSpace = CreateObject("Notes.NotesUIWorkspace")
Set NDatabase = NSession.GetDatabase("", "")
If Not NDatabase.IsOpen Then NDatabase.OPENMAIL

 For all Emai-Addresses
EmailAddress =                        Worksheets("Sheet1").Application.Transpose(Range("A2").Resize(Range("A" &                           Rows.Count).End(xlUp).Row).Value)
Set NDoc = NDatabase.CreateDocument

With NDoc
    .Form = "Memo" ' or .ReplaceItemValue("Form", "Memo")
    .SendTo = EmailAddress
    .subject = subject
End With
Set rtitem = NDoc.CreateRichTextItem("Body")
Call rt.AppendText(Worksheets("sheet1").Range("d2") & vbLf & vbLf)
Call rt.EmbedObject(1454, "", "c:filepath.doc")
Call NDoc.Save(True, False)
Next ' email-address
Set NDoc = NDatabase.CreateDocument

 With NDoc
.SendTo = EmailAddress
'.CopyTo = ""
.subject = subject

.body = Worksheets("sheet1").Range("d2") & vbLf & vbLf


.Save True, False
 End With

Set NUIdoc = NUIWorkSpace.EDITDocument(True, NDoc)
With NUIdoc

Set WordApp = Nothing
End With

Set NSession = Nothing
End Sub

【问题讨论】:

    标签: excel vba lotus-notes mailmerge


    【解决方案1】:

    要附加文件,请查看 NotesRichTextItem 类的 EmbedObject 方法。

    您的代码还存在一些其他问题。 为字段赋值时不应使用扩展符号,应使用 NotesDocument 类的 ReplaceItemValue 方法来存储值。 Body 字段是一个富文本字段,您应该使用 NotesRichTextItem 类来处理与该字段相关的任何内容,因此使用 Appendtext 和 AddNewLine 方法将内容写入该字段。这也将允许您使用我上面提到的 EmbeddObject 方法来附加文件。

    您也许可以在我的邮件通知类中找到一些有用的提示。我刚刚发布了一个更新版本 http://blog.texasswede.com/updated-mailnotification-class-now-with-html-email-support-and-web-links/

    希望对你有帮助!

    【讨论】:

    • 我没有安装 Domino。这会产生问题吗?无论我尝试什么,我似乎都无法获得要附加的文件。
    【解决方案2】:

    这似乎是在 Notes 中创建邮件的更相关代码部分:send email to a specific Lotus Notes contacts using VBA

    您希望在发送邮件之前在屏幕上打开邮件,还是可以在不可见的情况下发送邮件?

    更新:建议的代码

    subject = Worksheets("Sheet1").Range("B2")
    Debug.Print subject
    
    Set NSession = CreateObject("Notes.NotesSession")
    Set NUIWorkSpace = CreateObject("Notes.NotesUIWorkspace")
    Set NDatabase = NSession.GetDatabase("", "")
    If Not NDatabase.IsOpen Then NDatabase.OPENMAIL
    
    For all email-addresses
        EmailAddress = Worksheets("Sheet1").Application.Transpose(Range("A2").Resize(Range("A" & Rows.Count).End(xlUp).Row).Value)
        Set NDoc = NDatabase.CreateDocument
    
        With NDoc
            .Form= "Memo" ' or .ReplaceItemValue("Form", "Memo")
            .SendTo = EmailAddress
            .subject = subject
        End With
        set rtitem= NDoc.CreateRichTextItem("Body")
        Call rt.AppendText(Worksheets("sheet1").Range("d2") & vbLf & vbLf)
        Call rt.EmbedObject(1454, "", "c:filepath.doc")
        Call NDoc.Save(True, False)
    Next ' email-address
    

    待处理:循环、文件名、地址...

    【讨论】:

    • 最初我想在屏幕上或草稿文件夹中打开它们,因为我要发送敏感信息,并且我想确保将正确的附件发送给正确的供应商。
    • 我还应该提一下,因为这是一个公司电子邮件帐户,我们没有 Lotus Notes Domino 或 Print Merger,这就是我必须这样做的原因。我不是程序员,但我是办公室里唯一一个甚至会尝试 VBA 的人,所以我在没有受过培训的情况下尽我所能。
    • 您确实可以在屏幕上同时打开一封邮件,或者两封或三封邮件,但是我认为发送 100 封左右的邮件是不可行的。所以你必须一个一个地创建和展示它们,然后批准它们。另存为草稿可能是更好的选择。我修改了答案。
    • 我更新了上面的代码。 @For all emai-addresses 我得到一个错误,说它期待一个“=”?
    • 呃,当然,这不是一个有效的 VBA 语句。我对 Excel 中的 VBA 了解不多,无法为您提供代码,所以我把它留给了您。那行只是伪代码......块结束的 Next-statement 同上。因此,“待处理:循环、文件名、地址......”
    猜你喜欢
    • 2017-05-23
    • 2017-05-24
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2015-03-09
    相关资源
    最近更新 更多