2014-04-14 43 views
1

我們最近從2003年升級到Office 2010.在2003年工作正常的VBScript類型代碼現在在2010年間歇性地失敗,出現'對象錯誤'或'命令失敗'。模板加載期間Word 2010「對象錯誤」

從我設法解決的問題來看,這似乎是Normal模板仍在下載/加載的結果,儘管CreateObject調用已完成。代碼正常工作時,看起來法線已經很快加載了。

代碼:

Dim oWord As Object 
Set oWord = CreateObject("Word.Application") 
oWord.Visible = True 
Set document = oWord.Documents.Open("\\networkshare\networkshare\mytemplate.dot") 

代碼在

我一直在尋求解決這個,但是我還沒有發現其他地方有這個問題的人任何痕跡「設置文檔=」失敗。如果我在oWord.Visible和Set文檔之間插入延遲,則問題已解決。儘管如此,我仍然希望正確地解決這個問題,因爲我們經常在一次運行中處理數百個文檔。 我試圖檢測正常加載的完成,但在這方面一直沒有成功。

有沒有其他人看到過這個問題,並找到了解決辦法?

非常感謝

菲利普

回答

0

可能是你應該嘗試「搶」創造之前,Word對象。

Dim oWord As Object 
On Error Resume Next 
Set oWord = GetObject(,"Word.Application") 
If oWord Is Nothing Then Set oWord = CreateObject("Word.Application") 

或者,禁用警報,並將oWord.Documents.Open置入循環。在第二次等待或打開.dot模板之前,請重新啓用警報。

由於它位於網絡共享上,因此延遲很可能高於本地存儲設備。這可以解釋爲什麼如果等待正常。

根據.dot模板的作用,您可能希望它在打開後可見。

Set oWord = CreateObject("Word.Application") 
On Error Resume Next 
Set oDoc = Nothing 
Do While oDoc Is Nothing 
Set oDoc = oWord.Documents.Open([template path]) 
<Wait 50ms> 
Loop On Error Goto 0 

題外話,但可能對他人這個問題有用的:這是用來解決這個問題

+0

嗨帕特里克, ,但問題仍然存在對創建的第一個文件。 如果我可以保證Word實例已經打開,這將是很好的。 我結束了你的第二個建議去,這我不相信是最好的最佳實踐方面,但唯一可行的選擇: 設置oWord =的CreateObject(「Word.Application」) 上的錯誤繼續Next Set oDoc = Nothing do oDoc Is nothing \t Set oDoc = oWord.Documents。打開([模板路徑]) \t 循環 對錯誤轉到0 感謝這個問題你的幫助。 – Philip

0

代碼 爲Word 2010,ActivePrinter屬性現在是區分大小寫的,所以你必須以確保大小寫與打印機對話框中顯示的相同。 Word 2010中設置該屬性時產生的錯誤失敗是「Microsoft Word中:有一個打印機錯誤」我用GetObject的嘗試

+0

尼斯打印機設置。我在某些模板上看到了宏,這些模板包含**假設**打印機端口對所有計算機都是相同的(這對我來說是錯誤的)並導致錯誤。在你的情況下,模板宏應該做的不僅僅是假設打印機在特定的端口上可用。 – PatricK