【问题标题】:Send Word document as an e-mail to a list in Excel using Excel VBA使用 Excel VBA 将 Word 文档作为电子邮件发送到 Excel 中的列表
【发布时间】:2015-03-19 21:41:20
【问题描述】:

我想将文档作为电子邮件(不是附件)多次发送到 Excel 中的电子邮件地址列表。

我的 Excel 工作表中的列表格式如下:

+--------------------------------------------------------+----------------+-------------------------------------+---------------------------------------+----------------+----------------------------+
|                         Emails                         |      CC1       | CC2 - Primary Electronic Sales - US | CC3 - Primary Electronic Trading - US | Additional CC? | Concatenation of all CC's  |
+--------------------------------------------------------+----------------+-------------------------------------+---------------------------------------+----------------+----------------------------+
| email@domain.com; email2@domain.com; email3@domain.com | Outlook Name 1 | Outlook name 2                      | Outlook name 3                        | Outlook name 4 | Concatenation of all CC's  |  
+--------------------------------------------------------+----------------+-------------------------------------+---------------------------------------+----------------+----------------------------+

目标是加载文档“H:\Thought Pieces\Small Cap Names.doc”并将文档作为电子邮件(不是附件)发送到“电子邮件”列中的每个条目作为抄送“所有抄送的串联”列。

主题可以是静态的,我不会更改它。现在,邮件只发送到第一行,正确地通过电子邮件发送第二列第一行的列表,并抄送最后一列第一行的列表。

但它挂起,并说

对象“_MailItem”的方法“主题”失败

Sub SendOutlookMessages()

 'Dimension variables.
 Dim OL As Object, MailSendItem As Object
 Dim W As Object
 Dim MsgTxt As String, SendFile As String
 Dim ToRangeCounter As Variant

 Set wd = CreateObject("Word.Application")
 Dim doc As Word.Document

 'Assigns Word file to send
 Set wd = GetObject(, "Word.Application")
 If wd Is Nothing Then
      Set wd = CreateObject("Word.Application")
      blnWeOpenedWord = True
 End If
 Set doc = wd.Documents.Open _
 (Filename:="H:\Thought Pieces\Small Cap Names.doc", ReadOnly:=True)
 Set itm = doc.MailEnvelope.Item

 'Starts Outlook session
 Set OL = CreateObject("Outlook.Application")
 Set MailSendItem = doc.MailEnvelope.Item

 ToRangeCounter = 0

 'Identifies number of recipients for To list.
 For Each xCell In ActiveSheet.Range(Range("tolist"), _
     Range("tolist").End(xlToRight))
     ToRangeCounter = ToRangeCounter + 1
 Next xCell

 If ToRangeCounter = 256 Then ToRangeCounter = 1

 'Creates message
 For Each xRecipient In Range("tolist")
     With MailSendItem
          .Subject = ActiveSheet.Range("subjectcell").Text
          .Body = MsgTxt
          .To = xRecipient
          .Cc = xRecipient.Offset(0, 6)
          .Send
     End With
 Next xRecipient

 'Ends Outlook session
 Set OL = Nothing

End Sub

【问题讨论】:

    标签: excel vba outlook ms-word


    【解决方案1】:

    所以...经过一系列试验,我实际上想出了自己的问题。

    我添加了第二个“Set MailSendItem = doc.MailEnvelope.Item” 在循环内部,因为显然该项目一旦通过 .Send 就会消失。

    我希望这对将来的某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      相关资源
      最近更新 更多