VBA для отправки Word Mail Merge - PullRequest
0 голосов
/ 23 января 2019

При попытке запустить этот код я получаю объект требуемой ошибки.Я не уверен, как решить эту проблему.

Я пытаюсь запустить VBA из Excel, чтобы запустить слияние почты в слове.

Sub MailMerge()
    Set wordapp = CreateObject("word.Application")
    wordapp.documents.Open "C:\Users\me\Desktop\hello.docx", ReadOnly:=True
    wordapp.Visible = True


            With ActiveDocument.MailMerge
        .Destination = wdSendToEmail
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With


End Sub

1 Ответ

0 голосов
/ 24 января 2019

Так как это выполняется в 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. Числовой эквивалент будет в самом низу окна при нажатии на значение.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...