2017-07-01 25 views
1

埋め込みWord文書のいくつかのフィールドをいくつかのセルにリンクしています。PrintOutマクロ、For..NextループWord文書がExcel VBAから閉じられていることを確認してください

各印刷タスクの後に、プログラムがドキュメントを閉じてから次の印刷を行うまで待つ必要があります。

この場合、エラーが発生します。誰も助けることができますか?

Sub contract() 

Dim i As Integer 

For i = 1 To 100 
    Cells(Sheets("SheetName").ListObjects("StaffInfo").ListRows.Count + 9, 8).Value = i 

    General.PrintIt ("EmbeddedDoc") 'Doc has many linked fields 

Next i 

End Sub 

印刷方法

Sub PrintIt(P As String) 
Dim objWord As Object 
Dim ObjDoc As Object 
Dim Oshp As Object 

Application.ScreenUpdating = False 

ActiveSheet.OLEObjects(P).Activate 
Set objWord = GetObject(, "Word.Application") 
objWord.Visible = False 

Set ObjDoc = objWord.ActiveDocument 

ObjDoc.Fields.Update 
For Each Oshp In ObjDoc.Content.ShapeRange 
    Oshp.TextFrame.TextRange.Fields.Update 
Next 

ObjDoc.PrintOut Background:=False 
ObjDoc.PrintOut 

objWord.Quit SaveChanges:=False 
Application.ScreenUpdating = True 
End Sub 'Print it 
+0

どのようなエラーが表示されますか?そして、どのラインでそれを手に入れますか? – YowE3K

+0

'DoEvents'を' objWord.Quit SaveChanges:= False'の後ろに追加するとどうなりますか –

+0

エラー:実行時エラー '5479:ダイアログボックスが開いているため、Microsoft Wordを閉じることができません。 [OK]をクリックし、単語に切り替えて、ダイアログボックスを閉じます。その後、このエラーが表示されます。Microsoft Wordに問題が発生したため、終了する必要があります。 ...エラーレポートを送信し、送信しないでください。 Wordウィンドウを閉じます。 Excelは開いており、この行はエラーとして表示されます:VBAでは 'ObjDoc.PrintOut Background:= False'です。 – mgae2m

答えて

0

導入問題は、このコードによって解決しました。 上記のコードは、埋め込まれた単語文書を100回開いたり閉じたりします。この問題は、近くの文書で起こっていました。 正確には、私はなぜドキュメントを開いて、フィールドを更新した後で、そのエラーを生成するかを示すprintoutコマンドの直後に、ドキュメントを閉じることを理解できません。 このように私は問題をきれいにしました! ドキュメントの印刷出力ごとに "PrintIt"を呼び出さずに、その親である "Contract"メソッドで "PrintIt"メソッドを統合すると、埋め込まれたドキュメントがそれぞれを開き、次のループとクローズワードアプリケーションのためにドキュメントリンクを更新して100回印刷するそして、最後に、それぞれも文書化する。

簡単に言えば、いくつかのOpen-Print-Close文書で問題の原因をすぐに見つけることはできません。しかし、私はアルゴリズムをOpen-Many印刷に変更します。閉じると問題は解決しました!

Sub contract() 
Application.ScreenUpdating = False 
Sheets("SheetName").Unprotect 

'Declare variables 
Dim i As Integer 
Dim objWord, ObjDoc As Object 

'Core 
ActiveSheet.OLEObjects("Contract").Activate 
Set objWord = GetObject(, "Word.Application") 
objWord.Visible = False 

Set ObjDoc = objWord.ActiveDocument 

For i = 1 To 100 

    Cells(x, y).Value = i 'A specific cell that 
' word embedded document fields are linked to 
'corresponding fields they values change 
'by changing this cell. 
    ObjDoc.Fields.Update 

    ObjDoc.PrintOut Background:=False 
    ObjDoc.PrintOut 

Next i 
objWord.Quit SaveChanges:=False 
Sheets("SheetName").Protect AllowFiltering:=True 
End Sub 
+0

もちろん................ – mgae2m

関連する問題