2015-09-03 5 views
0

У меня есть код в Access, где он будет отправлять электронное письмо ответственному лицу, когда пользователь нажимает кнопку «Сохранить». Код будет использовать Outlook.application для отправки электронной почты.Код VBA, чтобы проверить, настроен ли Outlook перед отправкой почты

Код работает нормально, но если внешний вид не настроен (т. Е. Новая установка без установки учетной записи пользователя), тогда мой код электронной почты застрянет, пока пользователь не реактивирует доступ, чтобы подтвердить ошибку.

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 перед запуском этого кода?

ответ

0

Предполагая, что вы используете хотя бы Outlook 2007; взгляните на свойство DefaultProfileName вашего объекта Outlook.Application. Это вернет пустую строку, если профиль не был создан или нет профиля по умолчанию.

Вы можете просто проверить это, но я считаю, что возможно, что профиль Outlook может существовать, но в нем не настроены фактические учетные записи электронной почты (например, если пользователь прервал работу мастера настройки частично). В этом случае вы можете посмотреть Объект учетных записей, который включает в себя свойство Count. Очевидно, что если это 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 
+0

Ваш код работает! Спасибо за помощь. Прямо сейчас я пытаюсь выяснить, могу ли я получить имя пользователя учетной записи, которая уже настроена для соответствия пользователю, который поднимает запрос. Вы знаете, как это сделать? – PeterFES

Смежные вопросы