生成邮件合并时出现运行时错误 424
Runtime Error 424 on Generation of Mail Merge
我是 VBA 的新手,我设法拼凑了一个代码,通过 excel(与数据库相同的文档)中的宏按钮生成邮件合并,来自非常有帮助的堆栈溢出者。
宏 运行 大部分时间都是无缝的,但是我经常收到 运行-Time error 424 (object required) 消息。 运行在不更改任何内容的情况下再次启用宏总是有效,所以我认为问题与定义我想要定位的 word 文档有关。
我的代码是:
Sub Letter_Generator()
Calculate
MsgBox "Please Select the Word Document (on below taskbar) & select ok to all options."
Dim wdApp As Word.Application
On Error Resume Next
' open the mail merge layout file
Dim wdDoc As Word.Document
' Error handling
Set wdApp = GetObject(, "word.application")
If wdApp Is Nothing Then
Set wdApp = GetObject("[LOCATION OF WORD MAIL MERGE DOC]", "word.application") ' End If
On Error GoTo 0
With wdApp
' Set wdDoc = .Documents.Open
Set wdDoc = .Documents.Open(Filename:="LOCATION OF WORD MAIL MERGE DOC]") '
wdDoc.Application.Visible = True
With wdDoc.MailMerge
.OpenDataSource Name:="[LOCATION OF EXCEL DATABASE]"
.MainDocumentType = wdFormLetters
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.Execute Pause:=False
End With
wdDoc.Application.Visible = True
.Selection.WholeStory
.Selection.Fields.Update
wdDoc.Close SaveChanges:=False
Set wdDoc = Nothing
End With
End Sub
如果您能帮助我消除错误,我将不胜感激 - 正如我所说,我可以 运行 通过 运行 对宏进行两次合并,但我宁愿现在就消除任何问题!
调试显示是这一段惹的祸-
Set wdDoc = .Documents.Open(Filename:="K:\Team London & South East\Prop Letter\Prop Letter Bare Bones2.docx")
提前致谢!
似乎 wdApp
设置不正确。尝试使用 F8 进行调试并在该变量上添加监视以查看它是否已设置。
我使用 CreateObject
而不是 GetObject
方法,以确保对象已创建并且对我有用。尝试修改此代码:
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True
Set wordfile = wdApp.Documents.Open("path to the file")
' dispose of the object
Set wdApp = Nothing
我认为问题出在这里,找不到对象,因为没有打开 Word 实例。
我喜欢您的操作方式以及检查 wdApp 是否为空的方式。
Set wdApp = GetObject(, "word.application")
If wdApp Is Nothing Then
Set wdApp = GetObject("[LOCATION OF WORD MAIL MERGE DOC]", "word.application")
end if
现在您只需要再次检查 wdApp 变量是否为空。如果是,只需创建一个 Word 实例就可以了。
所以我会在您上面看到的代码之后添加这行代码。
if wdApp is Nothing Then
Set wdApp = CreateObject("Word.Application")
end if
我是 VBA 的新手,我设法拼凑了一个代码,通过 excel(与数据库相同的文档)中的宏按钮生成邮件合并,来自非常有帮助的堆栈溢出者。
宏 运行 大部分时间都是无缝的,但是我经常收到 运行-Time error 424 (object required) 消息。 运行在不更改任何内容的情况下再次启用宏总是有效,所以我认为问题与定义我想要定位的 word 文档有关。
我的代码是:
Sub Letter_Generator()
Calculate
MsgBox "Please Select the Word Document (on below taskbar) & select ok to all options."
Dim wdApp As Word.Application
On Error Resume Next
' open the mail merge layout file
Dim wdDoc As Word.Document
' Error handling
Set wdApp = GetObject(, "word.application")
If wdApp Is Nothing Then
Set wdApp = GetObject("[LOCATION OF WORD MAIL MERGE DOC]", "word.application") ' End If
On Error GoTo 0
With wdApp
' Set wdDoc = .Documents.Open
Set wdDoc = .Documents.Open(Filename:="LOCATION OF WORD MAIL MERGE DOC]") '
wdDoc.Application.Visible = True
With wdDoc.MailMerge
.OpenDataSource Name:="[LOCATION OF EXCEL DATABASE]"
.MainDocumentType = wdFormLetters
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.Execute Pause:=False
End With
wdDoc.Application.Visible = True
.Selection.WholeStory
.Selection.Fields.Update
wdDoc.Close SaveChanges:=False
Set wdDoc = Nothing
End With
End Sub
如果您能帮助我消除错误,我将不胜感激 - 正如我所说,我可以 运行 通过 运行 对宏进行两次合并,但我宁愿现在就消除任何问题!
调试显示是这一段惹的祸-
Set wdDoc = .Documents.Open(Filename:="K:\Team London & South East\Prop Letter\Prop Letter Bare Bones2.docx")
提前致谢!
似乎 wdApp
设置不正确。尝试使用 F8 进行调试并在该变量上添加监视以查看它是否已设置。
我使用 CreateObject
而不是 GetObject
方法,以确保对象已创建并且对我有用。尝试修改此代码:
Set wdApp = CreateObject("Word.Application")
wdApp.Visible = True
Set wordfile = wdApp.Documents.Open("path to the file")
' dispose of the object
Set wdApp = Nothing
我认为问题出在这里,找不到对象,因为没有打开 Word 实例。 我喜欢您的操作方式以及检查 wdApp 是否为空的方式。
Set wdApp = GetObject(, "word.application")
If wdApp Is Nothing Then
Set wdApp = GetObject("[LOCATION OF WORD MAIL MERGE DOC]", "word.application")
end if
现在您只需要再次检查 wdApp 变量是否为空。如果是,只需创建一个 Word 实例就可以了。
所以我会在您上面看到的代码之后添加这行代码。
if wdApp is Nothing Then
Set wdApp = CreateObject("Word.Application")
end if