- ベストアンサー
ExcelVBAで既に開いてるwordを閉じる
ExcelVBAで困っております。 現在Excelで住所録を作り、1度送付してから1ヶ月したら自動でwordを起動し 送付の印刷をするマクロを作ってます。 普通に開いて閉じることはできましたが、 既にwordが開いていた場合に読み込み専用になり、少し困っております。 理想としては、既に開いていた場合、1度保存して終了し、 再度開くようにしたいです。 分かる方がいらっしゃいましたら教えてください。 よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
試してください。 (例) Dim wdapp As Object Dim wddoc As Object Dim wdpath As String Dim wdname As String wdname = "abc.docx" On Error Resume Next Set wdapp = GetObject(, "Word.Application") Set wddoc = wdapp.Documents(wdname) On Error GoTo 0 If wddoc Is Nothing Then Set wdapp = Nothing: Exit Sub wdpath = wddoc.FullName wddoc.Save wddoc.Close wdapp.Documents.Open FileName:=wdpath, ReadOnly:=False Set wdapp = Nothing: Set wddoc = Nothing
その他の回答 (2)
- NotFound404
- ベストアンサー率70% (288/408)
立ち上げているワード(WINWORD)が一つだけなら #1 さんの考えの方向で良いかと思いますが、 複数のWINWORDを立ち上げている場合には GetObject は一つのインスタンスしか返しません。 http://support.microsoft.com/kb/288902/ja タスクマネージャのプロセスタブで見た時に 一番目のWINWORD 二番目のWINWORD が有った時に二番目が欲しくても一番目が消えてくれないことには 二番目をGetできません。 Getobject(,"word.application") で欲しい方が得られたらラッキーです。 すべてのWINWORDを閉じるのなら比較的簡単に出来るでしょうけど 開いているかもしれないワードファイルを狙い撃ちして 保存・終了するのは、APIを駆使してやることになるので 大変だと思います(私にはそこまでのスキルは有りません)。 開いていたら警告するだけでしたら ファイルを同名でリネームしてそのエラー内容によって判断すれば・・と思います。 Name "e:\あのワード.doc" as "e:\あのワード.doc" エラーが返ってこなければ誰も使用していません。 ファイルを開いていた時に 当方のWindows7 & Office2010 では 『実行時エラー75 パス名が無効です』 不適切・不親切なエラーメッセージが出ました。 ファイルが無い・Pathが間違っている場合などにはチャンと エラー53 ファイルが見つかりません となるのですけどねー。
お礼
ありがとうございます! 教えていただいた内容を取り入れ、しっかり動くようになりました! リネームで判断する方法は知らなかったので 勉強になりました! ありがとうございます!
- xls88
- ベストアンサー率56% (669/1189)
>No.1 この回答への補足 補足になっていません。 どんな状況で動かしましたか? Wordドキュメントは開いていますか? 取りあえず abc.docx としていますが 正しい名前に書き変えましたか? 回答したコードそのままで動かしましたか? 一部書き換えましたか? テストするときは On Error Resume Next を外してテストしてみてください。 エラーが出たら内容と発生行を教えてください。
お礼
返信が遅くなりすいませんでした。 そして、無事に動くことができました。 私のミスでした。 wordの拡張子が.docと.docxで違っていた為、 開いていても、閉じていても終了していました。 本当に申し訳ありません!! ありがとうございました!!!
補足
素早いご対応ありがとうございます。 試してみたのですが、 なぜか開いていても、なくてもExit Subで終了してしまいます。。。 wordデータのディレクトリはエクセルとは違う場所なんですが、それが原因なんでしょうか? ちなみにExcelは2003、VBAは6.5です。 自分でも調べてみます。