通过vba宏发送带有附件的邮件
我正在运行一个宏,用于通过Outlook通过vba excel向多个收件人发送带有一个或多个附件的邮件。我不太精通宏,因此从各种来源获得了一些输入,并最终得到了下面的代码 但是,我已经提到了3个文件附件的最大限制,这对所有收件人来说都是恒定的,但每当我必须相应地只附加1或2个文件时,就必须通过注释来禁用,例如在下面的代码中,我禁用了第2和第3个附件列,以便跨多个收件人附加1个文件。 宏是否可以根据输入的值自动获取输入并留空(例如,如果一个收件人有1个附件,而下一个收件人有2个或3个附件)通过vba宏发送带有附件的邮件,vba,excel,email,Vba,Excel,Email,我正在运行一个宏,用于通过Outlook通过vba excel向多个收件人发送带有一个或多个附件的邮件。我不太精通宏,因此从各种来源获得了一些输入,并最终得到了下面的代码 但是,我已经提到了3个文件附件的最大限制,这对所有收件人来说都是恒定的,但每当我必须相应地只附加1或2个文件时,就必须通过注释来禁用,例如在下面的代码中,我禁用了第2和第3个附件列,以便跨多个收件人附加1个文件。 宏是否可以根据输入的值自动获取输入并留空(例如,如果一个收件人有1个附件,而下一个收件人有2个或3个附件) Sub
Sub SendMail()
Dim objOutlook As Object
Dim objMail As Object
Dim ws As Worksheet
Set objOutlook = CreateObject("Outlook.Application")
Set ws = ActiveSheet
For Each cell In ws.Range("A2:A1000")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = cell.Value
.Cc = cell.Offset(0, 1).Value
.Bcc = cell.Offset(0, 2).Value
.Subject = cell.Offset(0, 3).Value
.Body = cell.Offset(0, 4).Value
.Attachments.Add cell.Offset(0, 5).Value
'.Attachments.Add cell.Offset(0, 6).Value
'.Attachments.Add cell.Offset(0, 7).Value
.Send
End With
Set objMail = Nothing
Next cell
Set ws = Nothing
Set objOutlook = Nothing
End Sub
尺寸i为长,c为范围
'....
用objMail
.To=单元格.Value
.Cc=单元格偏移量(0,1).Value
.Bcc=单元格偏移量(0,2).Value
.Subject=单元格偏移量(0,3).值
.Body=单元偏移量(0,4).Value
对于i=5到6
设置c=单元偏移量(0,i)
如果c.值为“”,则.附件.添加c.值
接下来我
邮寄
以
'....
您将与一起使用内部与一起使用,我很确定VBA将不知道如何阅读.Attachments.Add.Value
。效果非常好!谢谢你们@TimWilliams,非常感谢你们的投入。还有一个小问题——邮件在遇到错误之前被发送Microsoft Visual Basic运行时错误“-214746729(80004005)”:我们需要知道该发送给谁。请确保至少输入一个名称。找出它与MS Office版本更新有关。再次感谢您的解决方案。干杯,祝你有一个美好的一天:)你可能想在发送邮件后增加一些等待时间,一两秒钟。有时候outlook发送这么多邮件太快了。@EganWolf-我从来没有遇到过任何关于发送时间的问题。给40个收件人发邮件几乎不需要2秒钟。如果我需要添加什么,请告诉我?事实上,我从未测试过。我正在使用和更新一个由别人编写的宏,该宏发送了大约30封带有附件的邮件,并且有一条评论,有时错误会在没有睡眠时间的情况下发生。
Dim i As Long, c As Range
'....
With objMail
.To = cell.Value
.Cc = cell.Offset(0, 1).Value
.Bcc = cell.Offset(0, 2).Value
.Subject = cell.Offset(0, 3).Value
.Body = cell.Offset(0, 4).Value
For i = 5 to 6
Set c = cell.Offset(0, i)
If c.Value <> "" Then .Attachments.Add c.Value
Next i
.Send
End With
'....