Так как это выполняется в Excel VBA, код должен конкретно ссылаться на то, что принадлежит Word. Это означает, что эта строка:
With ActiveDocument.MailMerge
должно быть
With wordApp.ActiveDocument.MailMerge
Поскольку Excel ничего не знает о ActiveDocument
. Еще лучше, однако, было бы назначить объект документу при его открытии, а не полагаться на ActiveDocument
:
Dim wordDoc as Object
Set wordDoc = wordapp.documents.Open("C:\Users\me\Desktop\hello.docx", ReadOnly:=True)
With wordDoc.MailMerge
Как только у вас это получится, вы получите дополнительные сообщения об ошибках для всех значений перечисления, начиная с wd
. Они тоже принадлежат Word VBA. Поскольку вы используете Object
вместо Word.Application
для wordapp
, код не может использовать перечисления wd
- VBA не может их искать. Использование Word.Application
означало бы необходимость установки ссылки на объектную модель Word в Инструменты / Ссылки. Это может затруднить использование макроса другими людьми с другой (более старой) версией Office, поэтому многие примеры кода для запуска Word из Excel используют Object
.
Если вы хотите использовать Object
, вам нужно заменить все значения перечисления wd
их числовым эквивалентом. Например, wdSendToEmail
имеет значение 2, поэтому
.Destination = 2
Я оставляю вам возможность искать другие значения, что достаточно просто. Откройте редактор VBA Word, нажмите F2, чтобы открыть браузер объектов, затем выполните поиск по каждому значению wd
. Числовой эквивалент будет в самом низу окна при нажатии на значение.