電子書籍の厳選無料作品が豊富!

以下の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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/02 23:08

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/02 23:06

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