Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Excel 根据列中的条件向具有(不同)多个附件的收件人发送电子邮件_Excel_Vba_Outlook - Fatal编程技术网

Excel 根据列中的条件向具有(不同)多个附件的收件人发送电子邮件

Excel 根据列中的条件向具有(不同)多个附件的收件人发送电子邮件,excel,vba,outlook,Excel,Vba,Outlook,我目前正在尝试编写一个宏,它将根据每个列的名称旁边是否有X向收件人发送多个附件。 我在G列中有电子邮件地址,在H:R列中有11个不同的报告名称 到目前为止,我已经编写了一个宏,如果电子邮件收件人在H列中有X,它将发送一个附件(报告1),但我不确定如何编写宏,因此它将在H:R列中搜索X,并发送相应的报告(即,如果电子邮件收件人在H列和J列中有X,则我希望他们在同一封电子邮件中同时收到报告1和报告3) 如果我的解释很难理解,很抱歉。 非常感谢您的帮助 Private Sub CommandButto

我目前正在尝试编写一个宏,它将根据每个列的名称旁边是否有X向收件人发送多个附件。 我在G列中有电子邮件地址,在H:R列中有11个不同的报告名称

到目前为止,我已经编写了一个宏,如果电子邮件收件人在H列中有X,它将发送一个附件(报告1),但我不确定如何编写宏,因此它将在H:R列中搜索X,并发送相应的报告(即,如果电子邮件收件人在H列和J列中有X,则我希望他们在同一封电子邮件中同时收到报告1和报告3)

如果我的解释很难理解,很抱歉。
非常感谢您的帮助

Private Sub CommandButton1_Click()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim sh As Worksheet
    Dim cell As Range
    Dim FileCell As Range
    Dim rng As Range


    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Set sh = Sheets("Contacts")

    Set OutApp = CreateObject("Outlook.Application")

    For Each cell In sh.Columns("G").Cells.SpecialCells(xlCellTypeConstants)

        If cell.Value Like "?*@?*.?*" And _
            LCase(Cells(cell.Row, "H").Value) = "x" Then
            Set OutMail = OutApp.CreateItem(0)

            With OutMail
                .to = cell.Value
                .Subject = "Report 1"
                .body = "Hi " & cell.Offset(0, -3).Value
            'Link file path for attachment
                .Attachments.Add ("C:\Users\smcelroy021218\Desktop\Email Macro Working.xlsm")
                .Display
            End With

            Set OutMail = Nothing
        End If
    Next cell

    Set OutApp = Nothing
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

您不会说文件路径来自何处:在本例中,我从工作表的第一行(即从H1:R1)获取它们


行“.Attachments.Add”(“C:\…)只是用于测试btw的虚拟文件。理想情况下,我希望宏从行“H1:R1”获取附件文件路径-对应于11个不同的报告列。谢谢!哈哈,比我快。顺便说一句,他在评论中提到路径在
H1:R1
@L42-我错过了,我想是很幸运吧!哇!太好了,非常感谢。只是快速跟进,它似乎没有找到我的文件路径(我确实将文件路径移动到了H2:R2,因为我现在包含了标题)但我相应地更改了代码。这可能看起来是一个很小的问题,但我是否将完整的文件路径包含到单元格中?例如C:\Users\SMcelroy02218\Desktop\Email Macro Working.xlsm再次感谢您的帮助。要从第2行中提取,请使用:
.Attachments.Add sh.Cells(2,C.Column).Value
我不确定我是否理解您关于如何包含完整路径的问题。如果您的所有附件都在同一文件夹中,您可以将文件名放在H2:R2中,并使用类似于
.attachments.Add的内容。添加“C:\Users\smcelry021218\Desktop\”和sh.Cells(2,C.Column).Value
Ahhh抱歉,文件路径出现了愚蠢的错误。非常感谢您的帮助,非常感谢!
Private Sub CommandButton1_Click()

    Dim OutApp As Object
    Dim OutMail As Object
    Dim sh As Worksheet
    Dim cell As Range, c As Range
    Dim FileCell As Range
    Dim rng As Range, rngAttach As Range

    Set sh = Sheets("Contacts")

    Set OutApp = CreateObject("Outlook.Application")

    For Each cell In sh.Columns("G").Cells.SpecialCells(xlCellTypeConstants)

        Set rngAttach = cell.Offset(0, 7).Resize(1, 11)

        'EDIT: must have at least one attachment to create a mail
        If cell.Value Like "?*@?*.?*" And _
                          Application.Countif(rngAttach, "x") > 0 Then

            Set OutMail = OutApp.CreateItem(0)

            With OutMail
                .to = cell.Value
                .Subject = "Report 1"
                .body = "Hi " & cell.Offset(0, -3).Value

                'loop over H:R and check for "x"
                For Each c In rngAttach.Cells
                    If LCase(Trim(c.Value)) = "x" Then
                        'pick up the file path from the top row of the sheet
                        .Attachments.Add sh.Cells(1, c.Column).Value
                    End If
                Next c

                .Display
            End With

            Set OutMail = Nothing

        End If
    Next cell

    Set OutApp = Nothing

End Sub