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

标签 vba excel error-handling

以下是我用来通过Outlook将电子邮件发送到电子邮件地址列表的Excel VBA代码。每个电子邮件地址都有一个需要发送的不同附件。我需要在此代码中进行哪些错误处理。现在,所有代码所做的就是在执行电子邮件处理之前检查文件是否全部存在。
电子邮件列表从A2开始在A栏,要附加的文件从B2开始在B栏。文件的文件夹路径为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

最佳答案

除了可能发生的情况外,我真的不能说您应该“测试”什么。作为用户,获得帮助我了解问题所在的消息总是更好,更好,因此我可以确定是否可以修复它。获取VBA的标准“结束”或“调试” pop 窗口根本对最终用户没有帮助...只能帮助开发人员...
以下是您要测试的一些想法:

  • CreateObject(“Outlook.Aplication”)。放置一个On Error goto ...处理程序,这样,如果无法创建Outlook,则可以告诉用户输入错误。
  • 确认我们在正确的工作表中。
  • 电子邮件标题是否已填写?您可能希望它...如果长度超过50个字符,也可能会发出警告。
  • 也必须填写该文件夹,并且在将其与文件名连接之前,需要验证用户是否用尾随\输入了该文件夹。
  • 电子邮件必须遵循正常的电子邮件格式,即没有空格,但字母,数字和。和_可以。也许您可以验证@之后的部分正确
  • 该文本框必须存在。您也可以在此处使用“on error goto ...”来验证其存在
  • 文本框必须具有一些内容。
  • 附件的大小可能受限制,因此请确认附件大小不大。
  • 在创建电子邮件的语句周围也使用“on error goto ...”。我相信objOutlook.CreateItem和.Save和.Send更有可能失败。

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

    关于vba - 带有不同附件的VBA电子邮件合并的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22283693/

    相关文章:

    java - Spring Boot 自定义 http 错误响应?

    vba - 用 VBA 中的另一个单元格引用替换依赖项

    vba - 如何在 VBA 中使用 FileSystemObject

    php - 使用 PHPexcel 插件生成的可下载 Excel 文件中没有获取任何值

    excel - VBA总和动态范围问题

    node.js - Node Express从404文件请求中区分404页面请求

    python - 识别单元格是否包含 Word 中的方程式

    vba - 日期和时间文本到列

    c# - 如何在 C# 中动态重命名 excel 工作表名称

    linux - 监视日志文件时的错误处理