我有一个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
Gary McGill.. 7
哎呀,不要做你在评论中提出的建议.您可能最终会得到多个Excel实例(检查任务管理器并查看执行代码后有多少个实例).
首先,添加对Excel对象库的引用(项目 - >引用并选择Microsoft Excel对象库).现在,您可以将对象声明为真正的Excel类型并使用早期绑定,而不是将它们声明为"对象"并使用后期绑定.这不是绝对必要的,但除了其他任何东西,它意味着你在编辑代码时得到Intellisense.
你做的是正确的事,直到你做.OleFormat.Edit.(我个人会使用.OleFormat.Activate,但因为我从未尝试过使用过.Edit我不能说它有所作为).
完成.Activate(或者,可能是.Edit)后,您可以访问OleFormat.Object成员.由于嵌入的对象是Excel图表,因此"对象"将是Excel工作簿,因此您可以这样做:
Dim oOleFormat as OleFormat Set oOleFormat = ... oOleFormat.Activate Dim oWorkbook As Excel.Workbook Set oWorkbook = oOleFormat.Object ' Do stuff with the workbook oWorkbook.Charts(1).ChartArea.Font.Bold = True
请注意,您不需要关闭Excel,实际上您不能 - Word"拥有"用于编辑的实例,并将决定何时关闭它.这实际上是一个问题,因为没有明显的方法来强制嵌入对象被取消激活,因此在执行上面的代码后图表将保持打开状态.
然而,有一种黑客方式让图表关闭.如果你添加告诉Word将其激活为其他东西,它将首先取消激活它.因此,如果你告诉它将它激活为非感性的东西,你将获得正确的结果,因为它将取消激活它,然后无法重新激活它.所以,添加以下行:
oOleFormat.ActivateAs "This.Class.Does.Not.Exist"
请注意,这将引发错误,因此您需要使用On Error Resume Next临时禁用错误处理.因此,我通常会创建一个Deactivate方法,以避免破坏main方法中的错误处理.如:
Private Sub DeactivateOleObject(ByRef oOleFormat as OleFormat) On Error Resume Next oOleFormat.ActivateAs "This.Class.Does.Not.Exist" End Sub
希望这可以帮助.加里
哎呀,不要做你在评论中提出的建议.您可能最终会得到多个Excel实例(检查任务管理器并查看执行代码后有多少个实例).
首先,添加对Excel对象库的引用(项目 - >引用并选择Microsoft Excel对象库).现在,您可以将对象声明为真正的Excel类型并使用早期绑定,而不是将它们声明为"对象"并使用后期绑定.这不是绝对必要的,但除了其他任何东西,它意味着你在编辑代码时得到Intellisense.
你做的是正确的事,直到你做.OleFormat.Edit.(我个人会使用.OleFormat.Activate,但因为我从未尝试过使用过.Edit我不能说它有所作为).
完成.Activate(或者,可能是.Edit)后,您可以访问OleFormat.Object成员.由于嵌入的对象是Excel图表,因此"对象"将是Excel工作簿,因此您可以这样做:
Dim oOleFormat as OleFormat Set oOleFormat = ... oOleFormat.Activate Dim oWorkbook As Excel.Workbook Set oWorkbook = oOleFormat.Object ' Do stuff with the workbook oWorkbook.Charts(1).ChartArea.Font.Bold = True
请注意,您不需要关闭Excel,实际上您不能 - Word"拥有"用于编辑的实例,并将决定何时关闭它.这实际上是一个问题,因为没有明显的方法来强制嵌入对象被取消激活,因此在执行上面的代码后图表将保持打开状态.
然而,有一种黑客方式让图表关闭.如果你添加告诉Word将其激活为其他东西,它将首先取消激活它.因此,如果你告诉它将它激活为非感性的东西,你将获得正确的结果,因为它将取消激活它,然后无法重新激活它.所以,添加以下行:
oOleFormat.ActivateAs "This.Class.Does.Not.Exist"
请注意,这将引发错误,因此您需要使用On Error Resume Next临时禁用错误处理.因此,我通常会创建一个Deactivate方法,以避免破坏main方法中的错误处理.如:
Private Sub DeactivateOleObject(ByRef oOleFormat as OleFormat) On Error Resume Next oOleFormat.ActivateAs "This.Class.Does.Not.Exist" End Sub
希望这可以帮助.加里