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

问题描述 投票:2回答:2

假设您要创建然后关闭链接的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”发生类似的错误

vba ms-word word-vba word-2013
2个回答
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
投票

这是我想出的:

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

xlApp.SendKeys "{ESC}"

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

© www.soinside.com 2019 - 2024. All rights reserved.