2016-03-29 40 views
2

假設你想創建,然後關閉鏈接的Excel工作表後:錯誤關閉OLEOBJECT Excel.Sheet創作

Dim shp As shape 
Set shp = Application.ActiveDocument.Shapes.AddOLEObject(ClassType:="Excel.Sheet") 

DoEvents 

shp.OLEFormat.Object.Close 

這種失敗,此錯誤:

Run time error '1004'

Close method of Workbook class failed

爲什麼?我似乎無法找到任何發生這種情況的例子,我能找到的最接近的例子是this,它與用戶窗體比實際功能更相關。

該錯誤似乎非常通用,有沒有什麼辦法可以得到一個更具體的原因「爲什麼」關閉方法失敗?看起來如果你谷歌周圍,你會發現這個錯誤是由於種種原因(example,another example),但這些似乎沒有任何東西可以添加到這個特定的問題。

注:帶「shp.OLEFormat.Object.Save」

回答

2

通常的原因這個問題是讓物體「取消選擇」證件表面上會出現類似的錯誤...

根據我的經驗,無法關閉在文檔表面上激活的工作簿。這與OLE嵌入如何工作有關。 Application.Quit 應該工作,但沒有(以我的經驗)與Excel。

實現此目的的最可靠方法是強制工作簿在獨立的Excel.Application窗口中打開,然後可以關閉並保存工作簿並退出Excel應用程序。

類似下面應該工作:

Dim shp as Word.Shape 
Dim oleF as Word.OLEFormat 
Dim xlBook as Excel.Workbook 'or Object 
Dim xlApp as Excel.Application 'or Object 

Set shp = Application.ActiveDocument.Shapes.AddOLEObject(ClassType:="Excel.Sheet") 
Set olef = shp.OLEFormat 
oelf.DoVerb VerbIndex:=wdOLEVerbOpen 
Set xlBook = olef.Object 
Set xlApp = xlBook.Application 
'Do things here 
xlBook.Close 
xlApp.Quit 
Set xlApp = Nothing 
Set xlBook = Nothing 

注意,爲了調試的目的,你可能需要設置xlApp.Visible =真。

即使除此以外的行爲正確,xlBook.Close仍會生成錯誤。在這種情況下,誤差可以通過這一行關閉的錯誤信息被surpressed,重新instating它下面:

On Error Resume Next 
xlBook.Close 
On Error GoTo 0 
+0

這是有道理的,但是當我跑你張貼的代碼仍然給我原來的錯誤。我想如果我壓制這個錯誤,它仍然會關閉工作簿,也許這就是我前進的解決方案。我想知道你是否對這種情況有所瞭解? –

+0

看看'xlBook.Close False'有什麼區別。這是我的書中的代碼,我是從2013年開始編寫的,它在測試中運行沒有錯誤。我遺漏了它,因爲我認爲它沒有任何區別,但也許有一個很好的理由我在那裏,原來是:-)不,不知道爲什麼錯誤,確切地說,雖然如果你看看文件Excel應用程序的菜單,你會看到它就像「關閉和更新」。默認值可能爲「True」,Excel無法保存該文件,這可能是導致錯誤的原因。 –

+0

注意:如果它在工作,否則可以通過在On Error Resume Next之前抑制該錯誤,然後在該行後面的On Error GotTo 0處。 –