带有不同附件的VBA电子邮件合并的错误处理

带有不同附件的VBA电子邮件合并的错误处理,vba,excel,error-handling,Vba,Excel,Error Handling,下面是我用来通过Outlook向电子邮件地址列表发送电子邮件的Excel VBA代码。每个电子邮件地址都有一个需要发送的不同附件。在这段代码中我需要什么错误处理。现在代码所做的就是在处理电子邮件之前检查文件是否存在。 电子邮件列表位于A栏,从A2开始,要附加的文件位于B栏,从B2开始。文件的文件夹路径为E11,电子邮件主题行为E12,电子邮件正文位于Excel文本框中 Sub Loop1() Dim Body As String, I As Integer, filePath A

下面是我用来通过Outlook向电子邮件地址列表发送电子邮件的Excel VBA代码。每个电子邮件地址都有一个需要发送的不同附件。在这段代码中我需要什么错误处理。现在代码所做的就是在处理电子邮件之前检查文件是否存在。 电子邮件列表位于A栏,从A2开始,要附加的文件位于B栏,从B2开始。文件的文件夹路径为E11,电子邮件主题行为E12,电子邮件正文位于Excel文本框中

    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

除了可能发生的情况外,我真的不能说你“应该”测试什么。作为一个用户,得到一条消息来帮助我理解哪里出了问题总是更好、更好的,这样我就可以知道我是否能修复它。获取VBA的标准端或调试弹出窗口对最终用户毫无帮助。。。它只能帮助开发者。。。 以下是您测试内容的一些想法:

  • CreateObject(“Outlook.application”)。把一个错误转到。。。处理程序,因此如果无法创建Outlook,您可以告诉用户某些错误
  • 确认我们在正确的表格中
  • 电子邮件标题是否已填写?你可能希望它是。。。如果它的长度超过,比如说,50个字符,那么它也可能会被唤醒
  • 该文件夹也必须填写,在将其与文件名连接之前,您需要验证用户是否使用尾随\输入该文件夹
  • 电子邮件必须遵循正常的电子邮件格式,即没有空格,只有字母、数字和数字。而且uuu还可以。也许您可以验证@后面的部分是否正确
  • 文本框必须存在。您可以在这里使用“on error goto…”来验证其存在性
  • 文本框必须有一些内容
  • 附件的大小可能会受到限制,因此请验证它是否太大
  • 在创建电子邮件的语句周围也使用“on error goto…”。我认为objOutlook.CreateItem和.Save和.Send更可能失败
这远不是所有可以测试的东西,但是您必须对编写额外代码的意义进行自己的风险分析