我有一个Word文档,其中包含两个嵌入的Excel文件(使用Insert - > Object - > Create From File添加),我希望使用Word VBA进行修改 . 我已经到了能够打开嵌入文件进行编辑的程度(参见下面的代码),但我无法处理Excel工作簿,我可以使用它来进行修改并保存嵌入文件 . 有人有解决方案吗?提前致谢 .
Sub TestMacro()
Dim lNumShapes As Long
Dim lShapeCnt As Long
Dim xlApp As Object
Dim wrdActDoc As Document
Set wrdActDoc = ActiveDocument
For lShapeCnt = 1 To 1 'wrdActDoc.InlineShapes.Count
If wrdActDoc.InlineShapes(lShapeCnt).Type = wdInlineShapeEmbeddedOLEObject Then
If wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.ProgID = "Excel.Sheet.8" Then
'This opens the embedded Excel workbook using Excel
wrdActDoc.InlineShapes(lShapeCnt).OLEFormat.Edit
End If
End If
Next lShapeCnt
End Sub
3 回答
哎呀,不要做你在评论中提出的建议 . 您可能最终会得到多个Excel实例(检查任务管理器并查看执行代码后有多少个实例) .
首先,添加对Excel对象库的引用(项目 - >引用并选择Microsoft Excel对象库) . 现在,您可以将对象声明为真正的Excel类型并使用早期绑定,而不是将它们声明为“对象”并使用后期绑定 . 这不是绝对必要的,但除了其他任何东西,它意味着你在编辑代码时得到Intellisense .
你做的是正确的事,直到你做.OleFormat.Edit . (我个人会使用.OleFormat.Activate,但因为我从未尝试过使用过.Edit我不能说它有所作为) .
完成.Activate(或者,可能是.Edit)后,您可以访问OleFormat.Object成员 . 由于嵌入的对象是Excel图表,因此“对象”将是Excel工作簿,因此您可以这样做:
请注意,您不需要关闭Excel,实际上您不能 - Word“拥有”用于编辑的实例,并将决定何时关闭它 . 这实际上是一个问题,因为没有明显的方法来强制嵌入对象被取消激活,因此在执行上面的代码后图表将保持打开状态 .
然而,有一种黑客方式让图表关闭 . 如果你添加告诉Word将其激活为其他东西,它将首先取消激活它 . 因此,如果你告诉它将它激活为非感性的东西,你将获得正确的结果,因为它将取消激活它,然后无法重新激活它 . 所以,添加以下行:
请注意,这将引发错误,因此您需要使用On Error Resume Next临时禁用错误处理 . 因此,我通常会创建一个Deactivate方法,以避免破坏main方法中的错误处理 . 如:
希望这可以帮助 . 加里
有另一种hackey方式来关闭图表:只需使用find函数在文档中查找不存在的内容 .
例如
这将带您离开嵌入式文件,关闭实例并返回主文档,您可以从那里进行编码 .
希望这会有所帮助,这个问题让我发疯了 .
我有解决自己的问题 . 任何进一步的意见将不胜感激 -