2

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

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

DoEvents

shp.OLEFormat.Object.Close

这失败并出现此错误:

运行时错误“1004”

工作簿类的关闭方法失败

为什么?我似乎在 word 中找不到任何这种情况的例子,我能找到的最接近的例子是这个,它与用户表单的关系比实际功能更重要。

该错误似乎很笼统,有没有办法获得更具体的“为什么”关闭方法失败的原因?似乎如果你用谷歌搜索,你会发现这个错误是由于各种原因引发的(例如另一个例子)引发了此错误,但这些似乎都没有添加到这个特定问题。

注意:“shp.OLEFormat.Object.Save”也会出现类似错误

4

2 回答 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
于 2016-03-29T17:05:35.090 回答
1

这是我想出的:

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

xlApp.SendKeys "{ESC}"

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

于 2018-09-06T15:58:16.277 回答