Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过vba宏发送带有附件的邮件_Vba_Excel_Email - Fatal编程技术网

通过vba宏发送带有附件的邮件

通过vba宏发送带有附件的邮件,vba,excel,email,Vba,Excel,Email,我正在运行一个宏,用于通过Outlook通过vba excel向多个收件人发送带有一个或多个附件的邮件。我不太精通宏,因此从各种来源获得了一些输入,并最终得到了下面的代码 但是,我已经提到了3个文件附件的最大限制,这对所有收件人来说都是恒定的,但每当我必须相应地只附加1或2个文件时,就必须通过注释来禁用,例如在下面的代码中,我禁用了第2和第3个附件列,以便跨多个收件人附加1个文件。 宏是否可以根据输入的值自动获取输入并留空(例如,如果一个收件人有1个附件,而下一个收件人有2个或3个附件) Sub

我正在运行一个宏,用于通过Outlook通过vba excel向多个收件人发送带有一个或多个附件的邮件。我不太精通宏,因此从各种来源获得了一些输入,并最终得到了下面的代码

但是,我已经提到了3个文件附件的最大限制,这对所有收件人来说都是恒定的,但每当我必须相应地只附加1或2个文件时,就必须通过注释来禁用,例如在下面的代码中,我禁用了第2和第3个附件列,以便跨多个收件人附加1个文件。 宏是否可以根据输入的值自动获取输入并留空(例如,如果一个收件人有1个附件,而下一个收件人有2个或3个附件)

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
'....