假设您要创建然后关闭链接的Excel工作表:
Dim shp As shape
Set shp = Application.ActiveDocument.Shapes.AddOLEObject(ClassType:="Excel.Sheet")
DoEvents
shp.OLEFormat.Object.Close
这失败了,出现此错误:
运行时错误'1004'
Workbook类的Close方法失败
为什么?我似乎无法在单词中找到任何这种情况的例子,我能找到的最接近的例子是this,它与用户形式比实际函数更相关。
错误似乎非常通用,有没有办法得到一个更具体的原因“为什么”close方法失败?看来如果你谷歌周围,你会发现这个错误是由于各种原因(example,another example)引发的,但这些错误似乎没有任何东西可以添加到这个特定的问题。
注意:“shp.OLEFormat.Object.Save”发生类似的错误
这个问题的通常原因是让对象在文档表面上“取消选择”...
根据我的经验,无法关闭在文档表面上激活的工作簿。这与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
这是我想出的:
Set xlBook = olef.Object
Set xlApp = xlBook.Application
xlApp.SendKeys "{ESC}"
这将停止Excel.Application并将用户返回到Word。与运行命令关闭工作簿相同。