2017-08-04 174 views
3

所以我有一個函數,允許用戶通過電子郵件發送資產的更新圖片,工作正常,除非用戶在發送前關閉電子郵件。我設置了錯誤處理程序,但它似乎沒有捕獲錯誤。這裏是我的功能代碼:錯誤處理程序不能在函數VBA訪問2013

Function Email() 
Globals.Logging "Opened Email for updating picture" 
On Error GoTo ErrorHandler: 
Dim strTagNumber As String 
strTagNumber = Me.txtTagNumber.Value 

Dim varName As Variant 
Dim varCC As Variant 
Dim varSubject As Variant 
Dim varBody As Variant 

varName = "[email protected]" 
varCC = "" 
varSubject = "Updated Picture for Asset Number " & strTagNumber 
varBody = "Sent by MS Access" 

DoCmd.SendObject , , , varName, varCC, , varSubject, varBody, True, False 
Globals.Logging "Sent Email" 

Cleanup: 
    varName = Nothing 
    varCC = Nothing 
    varSubject = Nothing 
    varBody = Nothing 
    Exit Function 

ErrorHandler: 
    Select Case Err.Number 
    Case 2501 
     MsgBox "Email message was Cancelled." 
     Globals.Logging "Canceled Email" 
    Case Else 
     MsgBox Err.Number & ": " & Err.Description 
     Globals.Logging "Email Error " & Err.Number & ": " & Err.Description 
    End Select 
    Resume Cleanup 
End Function 

任何幫助,將不勝感激。先謝謝你。

+0

如果你把它拿出來 - 'On Error GoTo ErrorHandler:'哪一行停止? – braX

+0

有沒有錯誤可以追到?順便說一句,你在CleanUp中做的第一件事是'Exit Function'? –

+0

如果用戶在發送之前關閉了電子郵件,那麼它只會引發錯誤,而錯誤處理程序是設計用來處理的。錯誤是運行時錯誤'2501'「SendObject操作已取消」。 –

回答

0

測試訪問2016年。錯誤被捕獲,我可以看到消息框中說「電子郵件被取消。」。

也許您可以嘗試使用Outlook對象發送電子郵件。

+0

嗯,這絕對是奇怪的,因爲它仍然不適合我。 –

1

online documentation描述,DoCmd.SendObjects

...使用郵件應用程序編程接口(MAPI)

換句話說,訪問(或Excel)實際上並沒有其自己的郵件功能。它依賴於正確安裝和配置的MAPI電子郵件客戶端。除非您有意在Windows上安裝並設置了另一個默認電子郵件客戶端,否則默認情況下可能是Outlook,如果您已將其與MS Office一起安裝。 Windows電子郵件客戶端隨許多版本的Windows而變化,但默認情況下也可能是簡單的Windows電子郵件客戶端。

很可能MAPI客戶端可能會顯示錯誤消息,然後在將程序流程返回到發起呼叫的VBA模塊之前,實際上不會引發/提升錯誤。

我記得在Outlook設置的某個時刻,需要知道MAPI和/或COM自動化接口的某些行爲,無論它是否顯示錯誤。在驗證之前,我通常不會在Stack Overflow上拋出這樣的願望,但從我看到的有關此問題的討論中,沒有人真正解決SendObject的這個方面。

除了使用自動化通過Outlook發送電子郵件,如其他人所建議的,您可以檢查Windows默認的電子郵件客戶端設置。也許測試另一個電子郵件客戶端,看看你是否得到不同的結果