2017-08-17 26 views
1

私はVBAで非常に新しく、Excelのマクロボタン(データベースと同じドキュメント)から差し込み印刷を生成するコードを、仲間のスタックオーバーフロー。メールマージの生成時のランタイムエラー424

ほとんどの場合、マクロはシームレスに実行されますが、実行時エラー424(オブジェクトが必要です)メッセージが表示されることがよくあります。何も変更せずにマクロを再実行すると、常に問題なく動作するので、目標とする文書という単語を定義することになります。

私のコードは次のとおりです。

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") 

感謝を!

答えて

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 
+0

おかげさまで、あなたのお手伝いをしてくれたMoosli - 完璧に働きました! – user8476939

+0

@ user8476939ようこそ – Moosli

1

wdAppが正しく設定されていないようです。 F8でデバッグを試し、その変数にwatchが追加されているかどうか確認してください。

GetObjectメソッドの代わりにCreateObjectメソッドを使用して、オブジェクトが作成され、それが私のために働いていることを確認しました。このコードを変更してみてください:

Set wdApp = CreateObject("Word.Application") 
wdApp.Visible = True 
Set wordfile = wdApp.Documents.Open("path to the file") 
' dispose of the object 
Set wdApp = Nothing 
+0

おかげさまで、お手数ですが、下記のムーリスのコードと共にcreateObjectを使用してください。 – user8476939