• ベストアンサー

EXCEL/VBA:WORDファイルの上書き保存を確認する方法

以下のvbaを実行すると、次のように動作します。   test1.xlsを開いて、Atest1.xlsの名前で保存するときに、既にファイルが存在する場合、excelでは上書き保存するか聞いてきます。  しかし、test1.docを開いて、Atest1.docの名前で保存するときは、いきなり上書き保存されます。 wordの場合も上書き保存するか聞くようにするには、どうしたら良いか教えてください。 Workbooks.OpenText Filename:="test1.xls" ActiveWorkbook.SaveAs Filename:="Atest1.xls" ActiveWindow.Close Dim wordApp As Word.Application Dim wordDoc As Word.Document Dim wordRange As Word.Range Set wordApp = New Word.Application wordApp.Visible = True Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\test1.doc") Set wordRange = wordDoc.Content wordDoc.SaveAs Filename:="Atest1.doc" wordDoc.Close wordApp.Quit

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >test1.docを開いて、Atest1.docの名前で保存するときは、いきなり上書き保存されます。 'Atest1.doc' を保存する前に、Dir() でファイルの存在をチェックすればよいと思います。 If Dir("Atest1.doc") <> "" Then  If MsgBox("すでにファイルがありますが、上書きしてよろしいですか? ", vbOKCance) = vbOK Then    wordDoc.SaveAs Filename:="Atest1.doc"  End If End If

pegasusv
質問者

お礼

回答有難うございました。 実際に動かしてみてokでした。 no.1の回答でもokでした。 でも、こちらの方がシンプルですね。 もう少し違いを勉強してみます。

その他の回答 (1)

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

VBAヘルプによると _________________________________________________________________________________________________________________________ SAVEas メソッドでは FileName 省略可能です。バリアント型 (Variant) の値を指定します。文書の名前を指定します。 既定値は、現在のフォルダおよびファイル名です。文書がまだ 1 回も保存されていない場合、既定の名前 (たとえば、Doc1.doc) が使用されます。指定したファイル名が既に存在する場合、文書が上書きされます。このとき、 上書きするかどうかを確認するメッセージは表示されません。 _________________________________________________________________________________________________________________________ 下記のメソッドを使って解決できるのでは・・・・・ ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ FileExists メソッド 機能 指定されたファイルが存在する場合は、真 (True) を返します。存在しない場合は、偽 (False) を返します。 構文 object.FileExists(filespec) FileExists メソッドの構文は、次の指定項目から構成されます。 指定項目 説明 object 必ず指定します。FileSystemObject オブジェクトの名前を指定します。 filespec 必ず指定します。存在するかどうかを調べるファイルの名前を指定します。カレント フォルダ内にないファイルの場合は、 フル パスを指定する必要があります。絶対パス、または相対パスのどちらでも指定できます。 ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇ 以下のソースにしてみてはいかが? (デバッグしてませんので 要チェックです) DIm SvFileName as string DIM M as integer SvFileName = ThisWorkbook.Path & "\Atest1.doc") Set objFso = CreateObject("Scripting.FileSystemObject") 'ファイルの有無チェック If objFso.FileExists(SvFileName) = True Then M=MSGBOX( "同じファイルが存在します上書きしてもよろしいですか?",VBYESNO) if m = VBNO then goto EXLB1 end if end if wordDoc.SaveAs Filename:=SvFileName EXLB1: wordDoc.Close wordApp.Quit __________________________________________________________________________________________________________________________________________ なお、このあたりの Exists に関する情報としては以下が参考になるのでは 「VBScript」でのファイルのコピーについて http://okwave.jp/qa3479988.html

pegasusv
質問者

お礼

回答有難うございました。 実際に動かしてみてokでした。 回答no.2でも動きました。 違いをもう少し勉強してみます。

関連するQ&A

専門家に質問してみよう