公开Excel InlineShapes进行编辑

时间:2019-06-03 17:01:53

标签: excel vba ms-word

我正在尝试从Excel Workbook VBA模块自动填写第三方表格。遗憾的是,他们使用了嵌入了嵌入式Excel工作簿的Word文档,其中包含要编辑的命名范围的单元格。

如何将InlineShapes对象分配给Excel.workbook对象,以便可以将其公开给Excel方法和属性?

这是我到目前为止尝试过的:

Sub test()
        Dim wdApp As Word.Application
        Set wdApp = CreateObject("word.application")
        wdApp.Visible = true ' for testing
        Dim wdAppendixB As Word.Document
        Set wdAppendixB = wdApp.Documents.Add(ThisWorkbook.Path & "\Templates\form_template.dotx")
        Dim wbAppB As Excel.Workbook
        wdAppendixB.InlineShapes.Item(1).OLEFormat.Edit
        Set wbAppB = wdAppendixB.InlineShapes.Item(1).OLEFormat.Object
        wbAppB.Sheets("Sheet1").Range("date1").Value = "2019-06-02"
Exit Sub

该脚本打开OLE对象进行编辑后,该脚本将立即停止运行且不会出现任何错误。关闭用于编辑的OLE对象不会恢复脚本。

如果我忽略编辑对象,而只是将工作簿对象设置为OLEFormat.Object,则会出现运行时错误“ 430”,错误提示“类不支持自动化或不支持预期的接口”。

任何建议都值得赞赏。

1 个答案:

答案 0 :(得分:2)

使用Activate而不是Edit(或使用适当的DoVerb常数的wdOleVerb)。

请注意,这将使对象处于激活状态。没有优雅的方法可以模拟用户在对象外部单击以取消选择它。解决方法是在其自己的窗口中(而不是就地)打开对象并关闭该文件窗口,或者尝试将对象激活为特定的不存在的类。由于这将触发错误,因此必须将其包装在“ On Error Resume Next”和“ On Error GoTo 0”中。

Sub test()
        Dim wdApp As Word.Application
        Set wdApp = CreateObject("word.application")
        wdApp.Visible = True ' for testing
        Dim wdAppendixB As Word.Document
        Set wdAppendixB = wdApp.Documents.Add(ThisWorkbook.Path & "\Templates\form_template.dotx")
        Dim wbAppB As Excel.Workbook
        Dim of As Word.OLEFormat
        Set of = wdAppendixB.InlineShapes.Item(1).OLEFormat
        of.Activate '.Edit
        Set wbAppB = of.Object
        wbAppB.Sheets("Sheet1").Range("B1").Value = "2019-06-02"
        On Error Resume Next
        of.ActivateAs "This.Class.NotExist"
        On Error GoTo 0
End Sub