※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロでワード文書を強制的に閉じるには)
エクセルマクロでワード文書を強制的に閉じる方法
このQ&Aのポイント
エクセルマクロでワード文書を強制的に閉じる方法についてご教示ください。
ワード様式ファイルを閉じる際に表示される変更保存のメッセージを出さずに閉じたいです。
現在、ワード様式ファイルを閉じるときに、「〇〇.docに対する変更を保存しますか?」というメッセージが表示されてしまいます。これを回避する方法はありますか?
エクセルマクロでワードへの差し込み印刷を行っています。
時々、ワード様式ファイルを二重起動してしまい、その結果読み取り専用で開くかとのメッセージで出て処理がストップすることがあります。
そこで
差し込み印刷を行う前に、ワード様式ファイルが開いているかどうか確認し、開いていれば一旦ワード様式ファイルを閉じてから、差込印刷を開始するように改良しました。
ところが、今度は、ワード様式ファイルを閉じる段階で
「〇〇.docに対する変更を保存しますか?
保存 保存しない キャンセル」のメッセージが表示され、処理がストップしてしまいます。
メッセージが出ない方法について数日、いろいろ試みましたがいまだできません。どなたかご教示のほどよろしくお願いいたします。
★印の箇所が最後に試みたcordです。
===============================
Option Explicit
Dim myxls, mydoc As String
'----------------------
Sub 差込印刷()
'----------------------
myxls = ThisWorkbook.Path & "\VBA差込元data.xls"
mydoc = ThisWorkbook.Path & "\差込先ワード様式.doc"
'↓Word差込印刷時の二重起動による休止を避けるためのcode
On Error GoTo ErrorHandler
'↓差込先ワード様式.docが既に開いていると次行でerror75が発生、ErrorHandlerに飛んで注意を促す。
Name mydoc As mydoc
'--------
Word差込
'--------
Exit Sub
ErrorHandler:
'↓★ここで差込先ワード様式.docを「保存」「保存しない」「キャンセル」の確認ウィンドウが表示されてしまう。★
Let Application.DisplayAlerts = False '★←これを書いても無駄だった★
GetObject(mydoc).Application.Quit
Let Application.DisplayAlerts = True '★
Resume
End Sub
'-----------------
Sub Word差込()
'-----------------
Dim objword, wddoc As Object
Set objword = CreateObject("Word.Application") '←Wordオブジェクトを作成
With objword
.Visible = True
'↓Wordドキュメントオブジェクトを作成→指定ワード文書が読み込まれた。
Set wddoc = .Documents.Open(Filename:=mydoc)
End With
'----------------------------------
With wddoc.MailMerge '↓フルパスでよろしくね!
.MainDocumentType = wdFormLetters
.OpenDataSource Name:=myxls, _
Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
myxls & ";Mode=Read;Jet OLEDB:Engine Type=35" _
, SQLSTATEMENT:="SELECT * FROM [sheet1$]"
'-----------------------
Dim rc As Integer
rc = MsgBox("人数分のワードのページを作成しますか?" & vbCr & _
"【は い】・・人数分のページを作ります。" & vbCr & _
"【いいえ】・・ページをつくりません。(Word様式原本のみ作成)", vbYesNo + vbQuestion, "確認")
If rc = vbYes Then
'-----------------------
'下記3行により[個々の文書の編集]まで一気に
.ViewMailMergeFieldCodes = False
.Destination = wdSendToNewDocument
.Execute
'-----------------------
wddoc.Close '←word原本・Wordドキュメントオブジェクトを閉じる。
Set objword = Nothing
Set wddoc = Nothing
End If
'-----------------------
End With
'----------------------------------
End Sub
お礼
realbeatin さん ありがとうございました!できました! この数日間、かかりきりで頭がパンパンとなっておりましたが、おかげさまで解放されました。 エラーステートメントの件、気づいていませんでした。早速に修正しました。 レネームときのwaitの件、そこまで想定すべきとは思いもよりませんでした。 多くの示唆に富むご助言いただき、本当にありがとうございました。