我在自動化Excel文件時遇到問題。在Excel中VBA腳本首先打開Word應用程序和Word文檔:檢測對象是否與客戶端斷開連接
Dim wordApp As Object
Set wordApp = CreateObject("Word.Application")
vPath = Application.ActiveWorkbook.Path
Set wordDoc = wordApp.Documents.Open(vPath & "\test.doc")
然後我打電話從Excel文件通過一些數據的Word文檔中的子程序:
Call wordApp.Run("StartWithData", variable1, variable2)
如果Excel檢測發生錯誤在子程序中,我關閉從Excel的Word文檔和Word應用中的標籤我稱之爲Err1
:
On Error Goto Err1
'all the code from above
Exit Sub
Err1:
wordDoc.Close wdCloseWithoutSaving
wordApp.Quit SaveChanges:=wdDoNotSaveChanges
Set wordDoc = Nothing
Set wordApp = Nothing
這工作完全正常ü正常情況下;但是,如果Word文檔或應用程序是在Err1
標籤執行之前關閉(如用戶手動關閉文檔),我收到以下錯誤:
Run-time error '-2147417848 (80010108)':
Automation error The object invoked has disconnected from its clients.
這是非常合情合理的,因爲wordApp
和/或wordDoc
變量仍然引用應用程序和文檔對象,並且這些對象不再存在(但也不被認爲是Nothing
)。
所以,這裏是我的查詢:有沒有辦法檢查是否有一個對象已經從運行時錯誤發生之前已斷開其客戶端,以避免依賴於on error resume next
?
Such as:
If Not isDisconnected(wordDoc) Then
wordDoc.Close wdCloseWithoutSaving
End If
If Not isDisconnected(wordApp) Then
wordApp.Quit SaveChanges:=wdDoNotSaveChanges
End If
更新1:
看着omegastripes' answer後,我意識到,當文檔(wordDoc
)是斷開了對象上面僅給出的錯誤發生。如果Word應用程序(wordApp
)是什麼斷開了,我得到以下錯誤:
Run-time error '462':
The remote server machine does not exist or is unavailable
爲什麼你不檢查錯誤對象? 'Err.Number'或'Err.Description' - 如果對象因爲關閉而斷開連接,那麼沒有什麼可檢查 - 所以你不能檢查它。 –
@MacroMan這是一個很好的想法;然而,所引發的錯誤是錯誤440:「自動化錯誤」,它將由於幾種不同的原因而被拋出,包括被斷開連接的對象以及遠程過程調用(Word的子例程)中發生的任何錯誤。 – Jonathan
我想你可以檢查Word應用程序是否仍在運行(這很簡單),但檢查是否有連接斷開將會非常棘手,如果可能的話,它沒有連接的事實意味着它是屬性和方法無法訪問。只有其他的東西你可以嘗試看看'wordApp'對象是否返回'Nothing' –