アプリ版:「スタンプのみでお礼する」機能のリリースについて

ExcelVBAで困っております。

現在Excelで住所録を作り、1度送付してから1ヶ月したら自動でwordを起動し
送付の印刷をするマクロを作ってます。

普通に開いて閉じることはできましたが、
既にwordが開いていた場合に読み込み専用になり、少し困っております。

理想としては、既に開いていた場合、1度保存して終了し、
再度開くようにしたいです。


分かる方がいらっしゃいましたら教えてください。

よろしくお願い致します。

A 回答 (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

この回答への補足

素早いご対応ありがとうございます。

試してみたのですが、
なぜか開いていても、なくてもExit Subで終了してしまいます。。。

wordデータのディレクトリはエクセルとは違う場所なんですが、それが原因なんでしょうか?

ちなみにExcelは2003、VBAは6.5です。


自分でも調べてみます。

補足日時:2014/08/03 17:24
    • good
    • 0

立ち上げているワード(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 ファイルが見つかりません
となるのですけどねー。
    • good
    • 1
この回答へのお礼

ありがとうございます!

教えていただいた内容を取り入れ、しっかり動くようになりました!

リネームで判断する方法は知らなかったので
勉強になりました!


ありがとうございます!

お礼日時:2014/08/05 15:01

>No.1 この回答への補足


補足になっていません。

どんな状況で動かしましたか?
Wordドキュメントは開いていますか?
取りあえず
abc.docx
としていますが
正しい名前に書き変えましたか?

回答したコードそのままで動かしましたか?
一部書き換えましたか?

テストするときは
On Error Resume Next
を外してテストしてみてください。

エラーが出たら内容と発生行を教えてください。
    • good
    • 0
この回答へのお礼

返信が遅くなりすいませんでした。


そして、無事に動くことができました。
私のミスでした。

wordの拡張子が.docと.docxで違っていた為、
開いていても、閉じていても終了していました。

本当に申し訳ありません!!


ありがとうございました!!!

お礼日時:2014/08/05 14:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています