VBA发送Word Mail Merge

时间:2019-01-23 17:48:35

标签: excel vba ms-word

尝试运行此代码时,出现对​​象必需错误。我不确定如何解决此问题。

我正在尝试从excel运行vba以运行邮件合并。

// Page object file code

let copyP = "Some test text"
let copyP2 = "Some text text 2"

module.exports = {
    elements: {
        p: 'CSS_selector',
        p2: 'CSS_selector',
    },

    commands: [{
        checkText: function() {
            return this 
            .expect.element('@p').text.to.equal( copyP, 'Text is ok')
            .expect.element('@p2').text.to.equal( copyP2, 'Text2 is ok')
        }
    }]
}

1 个答案:

答案 0 :(得分:0)

由于它在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版本的其他人使用该宏,则可能会很困难,这就是为什么许多用于从Excel运行Word的代码示例都使用Object的原因。

如果要使用Object,则需要用其数值等效项替换所有wd枚举值。例如wdSendToEmail的值为2,所以

.Destination = 2

我留给您查找其他值,这很简单。打开Word的VBA编辑器,按F2打开对象浏览器,然后搜索每个wd值。当您单击一个值时,等效的数字将位于窗口的底部。

enter image description here