使用不同附件的VBA电子邮件合并的错误处理

时间:2014-03-09 14:54:45

标签: vba excel-vba error-handling excel

以下是我用于通过Outlook向电子邮件地址列表发送电子邮件的Excel VBA代码。每个电子邮件地址都有一个需要发送的不同附件。我需要在此代码中进行哪些错误处理。现在所有的代码都是在进行电子邮件处理之前检查文件是否全部存在。 电子邮件列表位于Col A,从A2开始,要附加的文件位于Col B,从B2开始。文件的文件夹路径为E11,电子邮件主题行为E12,电子邮件正文位于Excel TextBox中。

    Sub Loop1()
    Dim Body As String, I As Integer, filePath As String, fs
    Dim objOutlook As Outlook.Application
          Dim objOutlookMsg As Outlook.MailItem
    'Create Outlook Session
    Set objOutlook = CreateObject("Outlook.Application")
    Range("A2").Select

    StartRow = ActiveCell.Row
    EndRow = Cells.Find(What:="*", After:=[A1], _
              SearchOrder:=xlByRows, _
              SearchDirection:=xlPrevious).Row
    Set fs = CreateObject("Scripting.FileSystemObject")
    Body = ActiveSheet.Shapes.Range(Array("TextBox 1")).TextFrame2.TextRange.Characters.Text
    For I = StartRow To EndRow
        filePath = Range("E1").Value & "\" & Range("B" & I).Value
        If Not fs.FileExists(filePath) Then
        Range("B" & I).Select
        MsgBox ("The file " & vbCrLf & filePath & vbCrLf _
        & " in Cell B" & I & " does not exist" _
        & vbCrLf & "The macro is cancelled")
        End
        End If
    Next I
    For I = StartRow To EndRow
        filePath = Range("E1").Value & "\" & Range("B" & I).Value
        Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
        With objOutlookMsg
            .Recipients.Add (Range("A" & I).Value)
            .Subject = Range("E2").Value
            .Body = Body
            .Attachments.Add (filePath)
            .Save
            .Send
    End With
    Set objOutlookMsg = Nothing
    Next I
    Set objOutlook = Nothing
    Set fs = Nothing
End Sub

1 个答案:

答案 0 :(得分:1)

除了可能发生的情况之外,我无法真正说出你应该“测试”的内容。作为一个用户,它总是更好,更好地得到一个消息,帮助我理解错误,所以我可以想象我是否可以解决它。获得VBA标准的End或Debug弹出窗口根本无助于最终用户...它只能帮助开发人员...... 以下是您测试的一些想法:

  • 的CreateObject( “Outlook.Aplication”)。放一个On Error goto ...处理程序,所以如果Outlook无法创建,你可以告诉用户有些错误。
  • 验证我们是否在正确的表格中。
  • 是否填写了电子邮件标题?你可能希望它......如果它比50个字符长,也可能有警告。
  • 该文件夹也必须填写,并且您需要先验证用户是否使用尾随\来输入它,然后再将其与文件名连接起来。
  • 电子邮件必须遵循正常的电子邮件格式,这意味着没有空格,而是字母和数字。和_没关系。也许你可以验证@之后的部分是否正确
  • 文本框必须存在。你可以在这里使用“on error goto ...”来验证它的存在
  • 文本框必须包含一些内容。
  • 附件的大小可能有限,因此请确认附件不大。
  • 使用“on error goto ...”也围绕创建电子邮件的语句。我相信objOutlook.CreateItem和.Save和.Send更容易失败。

这远不是可以测试的所有内容,但是您必须自己进行风险分析,以便编写额外代码。