Предоставить Excel InlineShapes для редактирования - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь автоматизировать заполнение сторонней формы из модуля Excel Workbook VBA.К сожалению, они ушли с документом Word со встроенной рабочей книгой Excel, которая содержит ячейки в виде именованных диапазонов, которые я хочу редактировать.

Как назначить объект 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. Сбой при выполнении ошибки с ошибкой времени выполнения '430'. Класс неПоддержка автоматизации или не поддерживает ожидаемый интерфейс ".

Любое предложение приветствуется.

1 Ответ

2 голосов
/ 04 июня 2019

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...