在发送邮件之前检查Outlook是否为安装程序的VBA代码

时间:2015-09-03 03:07:22

标签: vba email outlook access-vba

我在Access中有一个代码,当用户点击“保存”按钮时,它会向负责人发送电子邮件。代码将使用Outlook.application发送电子邮件。

代码工作正常,但如果没有设置outlook(即没有任何用户帐户设置的全新安装),那么我的电子邮件代码将被卡住,直到用户重新激活Access以确认错误。

Sub Send_Email()
Dim oApp As Outlook.Application
Dim oMail As MailItem

On Error GoTo MailErr
If IsNull(Email) Then
MsgBox "You do not have an email account! No email will be sent!" & vbNewLine & "Email updates will be sent to your supervisor!" Me.Email.Value = DLookup("[Email]", "tblEmployeeList", "EmpName = '" & Me.txtSupName & "'")
Else
Set oApp = CreateObject("Outlook.application")
Set oMail = oApp.CreateItem(olMailItem)

oMail.Body = "IT Incident " & Me.ReqID & " has been created."
oMail.Subject = "Alert: New IT Incident"
oMail.to = Forms!MainForm!lblITAdminEmail.Caption
oMail.Send
Set oMail = Nothing
Set oApp = Nothing
End If

MailErr:
'MsgBox Err
If Err = 287 Then
AppActivate "Microsoft Access"
MsgBox "Error 287: Mail not sent! Pls contact IT/BI"

ElseIf Err <> 0 Then
MsgBox "Pls contact BI/IT admin! Error " & Err & " occured!"
End If
Set oMail = Nothing
Set oApp = Nothing
End Sub

有没有办法在运行此代码之前使用VBA检查Outlook是否已正确设置?

1 个答案:

答案 0 :(得分:0)

假设您至少使用Outlook 2007;看一下Outlook.Application对象的DefaultProfileName属性。如果没有创建配置文件或没有默认配置文件,这将返回一个空字符串。

您可以检查一下,但我相信Outlook配置文件可能存在,但其中没有配置实际的电子邮件帐户(例如,如果用户在中途中止设置向导)。在这种情况下,您可以查看包含Count属性的Accounts对象。显然,如果这是0,那么您知道配置文件中没有配置帐户。

一个如何实现此目的的简单示例。

Dim oApp As Outlook.Application

Set oApp = Outlook.Application

If Not oApp.DefaultProfileName = "" Then

    If oApp.Session.Accounts.Count > 0 Then

        ' Send the e-mail

    End If

End If

Set oApp = Nothing