我正在尝试从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”,错误提示“类不支持自动化或不支持预期的接口”。
任何建议都值得赞赏。
答案 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