我正在编写一个 VBA 宏,供非 VBA 用户的其他人使用。因此,我想在代码中嵌入一个系统,当代码抛出错误时,它会自动从宏用户的 Outlook 帐户向我发送一封电子邮件。VBA可以做到这一点吗?此外,用户将没有对其帐户的管理员访问权限,这会产生问题吗?提前感谢您对此的帮助!
编辑 - 我现在知道这是可能的,并且也有相同的 vba 代码(见下文)。但是,我们能否消除尝试自动发送电子邮件时弹出的“安全警告框”。另外,我想附上错误文件和电子邮件。如果我能在这方面得到一些帮助,那就太好了,谢谢!
我正在编写一个 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文件?我还将编辑主要问题以反映这一点。– hardikudeshi 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