生成邮件合并时的运行时错误424

时间:2017-08-17 08:51:20

标签: vba excel-vba mailmerge excel

我是VBA的新手,并设法将一个代码整合在一起,从excel中的宏按钮(与数据库相同的文档)生成邮件合并,从一个非常有用的堆栈overflower。

宏在大多数时间无缝运行,但是我经常得到运行时错误424(需要对象)消息。再次运行宏而不改变任何东西总是有效的,所以我认为问题与定义我想要定位的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")

提前致谢!

2 个答案:

答案 0 :(得分:1)

似乎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

答案 1 :(得分:0)

我认为问题在于此处,无法找到对象,因为没有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