创建后关闭OLEObject Excel.Sheet时出错

时间:2016-03-29 16:00:57

标签: vba ms-word word-vba word-2013

假设您要创建然后关闭链接的Excel工作表:

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

DoEvents

shp.OLEFormat.Object.Close

此失败并出现此错误:

  

运行时错误' 1004'

     

Workbook类的Close方法失败

为什么呢?我似乎无法在单词中找到任何这种情况的例子,我能找到的最接近的例子是this,它与用户表单的关系比实际函数更多。

错误似乎非常通用,有没有办法得到更具体的理由"为什么" close方法失败了吗?看来如果你谷歌,你会发现这个错误是由于各种原因(exampleanother example)而引发的,但是这些错误似乎没有任何东西可以添加到这个特定的问题中。

注意:" shp.OLEFormat.Object.Save"

出现类似的错误

2 个答案:

答案 0 :(得分: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 = True。

即使除此之外的行为是正确的,xlBook.Close仍然会生成错误。在这种情况下,可以通过关闭这一行的错误消息来抑制错误,然后重新启动它:

On Error Resume Next
xlBook.Close
On Error GoTo 0

答案 1 :(得分:1)

这是我想出的:

Set xlBook = olef.Object
Set xlApp = xlBook.Application

xlApp.SendKeys "{ESC}"

这将停止Excel.Application,并使用户返回Word。与执行命令以关闭工作簿相同。