在VBA中添加Outlook附件

时间:2015-11-30 20:08:23

标签: excel vba excel-vba email outlook

我的代码运行正常,直到附件出现。

我想做什么。

  1. 所有电子邮件地址都在B列。
  2. 在C列中,每个电子邮件地址旁边都有文件路径和文件名。 (C:\桌面\ test.xlsm)
  3. 我正在尝试使用这些附件自动发送电子邮件到这些地址的过程。弹出用户表单,提示群发电子邮件的任何CC,主题,文本。
  4. 这是代码

    Dim SendTo As String
    Dim Atmt As String
    Dim ToMSg As String
    
        For i = 2 To LastRow
            Atmt = ThisWorkbook.Sheets(1).Cells(i, 3).Value
    
            SendTo = ThisWorkbook.Sheets(1).Cells(i, 2)
                If SendTo <> "" Then
                    ToMSg = DraftBox.Value
                    Send_Mail SendTo, ToMSg
                End If
    
        Next i
    
        Unload Me
    
    End Sub
    
    
    Sub Send_Mail(SendTo As String, ToMSg As String)
        Dim OutlookApp As Object
        Dim OutlookMail As Object
    
        Set OutlookApp = CreateObject("Outlook.Application")
        Set OutlookMail = OutlookApp.CreateItem(0)
    
    
        With OutlookMail
            .To = SendTo
            .CC = CC.Value
            .BCC = BCC.Value
            .Subject = Subject.Value
            .Body = ToMSg
    
            .attachments.add Atmt
    
            .Send
    

    我已附上相关代码。它一直告诉我Atmt是空的。请帮忙..

1 个答案:

答案 0 :(得分:0)

Send_Mail子中,您需要包含一个参数来传递附件路径:

Sub Send_Mail(SendTo As String, ToMSg As String, Atmt as String)

然后当你调用Send_Mail sub时,传递你想要提供的参数:

Send_Mail SendTo, ToMSg, Atmt

我使用Atmt的事实完全是任意的,并且基于您的示例。您可以在子组中为字符串调用任何名称。

您也可以将Atmt声明为任何特定Global范围之外的PublicSub变量,从而使其有效。它当前在第一个sub中声明,因此当你尝试在Send_Mail sub中使用它时,该子变量是未知的,因此它告诉你它是空的。

不过,我会为第一种方法引导更多。