【发布时间】:2016-10-06 16:23:29
【问题描述】:
我正在尝试遍历一组工作表,将每个工作表保存为单独的工作簿,然后通过邮件将它们作为附件发送。
但是,在运行以下代码时,我最终会遇到由 .Send 触发的错误 287。我已经打开了前景,所以这不是问题。如果我将 .Send 更改为 .Display,邮件将生成为草稿,并正确显示并附上正确的表格。
Sub SendWorksheetsByMail()
Dim wb As Workbook
Dim destinationWb As Workbook
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Set wb = Workbooks("Test.xlsm")
Application.EnableEvents = False
Application.ScreenUpdating = False
For Each ws In wb.Worksheets
'Ignore Summary and Config
If ws.Name <> "Summary" And ws.Name <> "Config" Then
'On Error Resume Next
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)
ws.Copy
Set destinationWb = ActiveWorkbook
destinationWb.SaveAs "C:\****************\" & ws.Name & ".xlsx", FileFormat:=51
With OutMail
.To = "*******************"
.Subject = "Test"
.Body = "Test"
.Attachments.Add destinationWb.FullName
.Send
End With
Set OutMail = Nothing
Set OutApp = Nothing
End If
Next ws
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
编辑:“即使没有附件,它也会失败。本质上会生成一条仅包含主题和文本“test”的消息。”
对于如何解决这个问题有什么建议吗?不必为每封邮件单击“发送”将节省大量时间,因为要发送的邮件数量可能会变得非常大。
【问题讨论】:
-
您在
.Send之前尝试过.Save吗?只是一个想法。 -
只是好奇,为什么在
OutMail.Attachments.Add destinationWb.FullName中包含OutMail,而它在With OutMail中? -
错字,一开始是没有with的写的,一开始还以为是附件问题,把那部分删掉了。然后只是粘贴它而不更改它。不过,两者都适用。但会更新上面的代码。
-
@DavidZemens 已经尝试过第一种方法,当我按 F8 单步执行时它仍然失败。即使没有附件,它也会失败。本质上生成仅包含主题和文本“测试”的消息。我也认为这可能是一个安全问题。问题是如何绕过它。由于我需要发送附件,第一个解决方案不起作用,第二个,我不确定我是否会获得安装 Redemption 的权限。