当VBA代码出现错误时自动发送电子邮件

当VBA代码出现错误时自动发送电子邮件,vba,error-handling,outlook,Vba,Error Handling,Outlook,我正在编写一个VBA宏,供其他非VBA用户使用。因此,我想在代码中嵌入一个系统,当代码抛出错误时,它会自动从宏用户的outlook帐户向我发送电子邮件。使用VBA是否可能做到这一点?此外,用户将不会有管理员访问他们的帐户,这会造成问题吗?提前感谢您在这方面的帮助 编辑-我现在知道这是可能的,并且有一个vba代码(见下文)。然而,当我们尝试自动发送电子邮件时,是否可以消除弹出的“安全警告框”。此外,我想随电子邮件附上错误文件。如果我能在这方面得到一些帮助,那就太好了,谢谢 试试这个未经测试 Opt

我正在编写一个VBA宏,供其他非VBA用户使用。因此,我想在代码中嵌入一个系统,当代码抛出错误时,它会自动从宏用户的outlook帐户向我发送电子邮件。使用VBA是否可能做到这一点?此外,用户将不会有管理员访问他们的帐户,这会造成问题吗?提前感谢您在这方面的帮助


编辑-我现在知道这是可能的,并且有一个vba代码(见下文)。然而,当我们尝试自动发送电子邮件时,是否可以消除弹出的“安全警告框”。此外,我想随电子邮件附上错误文件。如果我能在这方面得到一些帮助,那就太好了,谢谢

试试这个未经测试

Option Explicit

Sub Sample()
    On Error GoTo Whoa

    '
    '~~> Rest of the Code
    '

    Exit Sub
 Whoa:
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = "abc@abc.com"
        .Subject = "Error Occured - Error Number " & Err.Number
        .Body = Err.Description

        .Display '~~> Change this to .Send for sending the email
    End With

    Set OutApp = Nothing: Set OutMail = Nothing
End Sub
跟进

是否有一种方法可以附加包含宏的excel文件?我还将编辑主要问题以反映这一点哈迪库德什5分钟前

试试这个

Option Explicit

Private Declare Function GetTempPath _
Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long

Private Const MAX_PATH As Long = 260

Sub Sample()
    Dim OutApp As Object, OutMail As Object
    Dim wb As Workbook

    On Error GoTo Whoa

    '
    '~~> Rest of the Code
    '

    Exit Sub
 Whoa:
    Set wb = ThisWorkbook

    Application.DisplayAlerts = False
    wb.SaveAs TempPath & "ErroringFile.xls", FileFormat:= _
    xlNormal
    Application.DisplayAlerts = True

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = "abc@abc.com"
        .Subject = "Error Occured - Error Number " & Err.Number
        .Body = Err.Description
        .Attachments.Add TempPath & "ErroringFile.xls"

        .Display '~~> Chnage this to .Send for sending the email
    End With

    Set OutApp = Nothing: Set OutMail = Nothing
End Sub

Function TempPath() As String
    TempPath = String$(MAX_PATH, Chr$(0))
    GetTempPath MAX_PATH, TempPath
    TempPath = Replace(TempPath, Chr$(0), "")
End Function

是的,当错误发生时,您可以发送电子邮件。如果用户可以直接打开Outlook,我认为管理员访问权限不应该是一个问题:)太好了!谢谢你的回复。我将需要主要提示来解决这个问题,如果你能插手,我将不胜感激!再次感谢。它似乎起作用了。非常感谢!然而,这仍然是一个小烦恼。出现一条消息“一个程序正试图代表您自动发送电子邮件。是否允许此操作?如果这是意外情况,可能是病毒,您应选择“否”。有没有办法避免这种情况?谢谢。很抱歉逐渐扩大了问题的范围。是否有一种方法可以附加包含宏的excel文件?我也将编辑主要问题以反映这一点。不,没有办法通过编程来停止这一点。您可以探索使用
SendKeys
()的选项,但它们不太可靠。。如果你降低outlook中的安全性,那么你将无法获得该对话框,但你将很难为每个用户执行此操作…看起来相当复杂,因此我想我暂时使用上面的代码,谢谢!您可能会考虑使用CDOSYS来发送电子邮件以避免对话框。