代码之家  ›  专栏  ›  技术社区  ›  user8476939

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

  •  1
  • user8476939  · 技术社区  · 7 年前

    我对VBA很陌生,我已经设法从excel中的宏按钮(与数据库相同的文档)中,从一个非常有用的堆栈溢出中,生成了一个邮件合并代码。

    我的代码是:

    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 回复  |  直到 7 年前
        1
  •  1
  •   Michał Turczyn    7 年前

    wdApp 设置不正确。尝试用F8进行调试,并在该变量上添加watch,以查看它是否已设置。

    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
    
        2
  •  0
  •   Moosli    7 年前

    我认为问题在于,无法找到对象,因为没有打开Word实例。

    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