プロが教えるわが家の防犯対策術!

エクセル2000をベースにマクロ(VBA)を使って、ある技術計算をさせています。
セルに計算の元になるデータを手入力するのですが、
最終的には、その元になるデータをテキストファイルとして保存させているのですが、保存先に同じファイル名(エクセルの方ではなく、テキストファイル)があっても強制的に上書きされてしまいます。
同じ名前が合った場合は、上書き保存確認のダイアログを表示させたいのですが、どのようにすればよいでしょうか?
保存するのは、入力したデータのテキストのみで、エクセルのファイルは保存しません。

A 回答 (3件)

どのようにテキストファイルを保存しているのかにもよるのだが、例えば昔なつかしOpenやCloseを使っているのなら、Dir関数でも使って先にファイルがあるかどうか調べて、あったら自前でダイアログを出してやればよいのではないかな。

    • good
    • 0

(1)あるところに載っていた例です。


If (Dir("c:\3-" & Fname & ".XLS")) = "" Then '同名ファイルのチェック
ActiveWorkbook.SaveAs Filename:="C:\3-" & Fname
Else
MsgBox Fname & " と同名ファイルがあります", vbExclamation
End If
DIR関数を使います。
ファイル名と拡張子xlsをCSVなどに変えてください。
(2)ファイル保存のダイアログもありますが。
Sub test02()
Application.Dialogs(xlDialogSaveAs).Show
End Sub
でも同名の確認は出ます。
(3)
Sub test01()
ActiveWorkbook.SaveAs "aaa14.xls"
End Sub
を実行しても、同名のファイルがあると確認メッセージが出ます。
これらではだめでしょうか。
    • good
    • 0

FileSystemObjectを使った例です。




Option Explicit

Public Sub TEST()

 MsgBox checkAllowOverwrite("\a.txt")

End Sub




Public Function checkAllowOverwrite(ByVal fileName As String) As Boolean

Dim oFS
Dim r As VbMsgBoxResult


 Set oFS = CreateObject("Scripting.FileSystemObject")

 If oFS.FileExists(fileName) Then
  Dim msg As String
  msg = fileName & "は存在します。" & Chr(13)
  msg = msg & "上書きしますか?" & Chr(13) & Chr(13)
  r = MsgBox(msg, vbYesNo, "上書き確認")
  If r = vbYes Then
   checkAllowOverwrite = True
  Else
   checkAllowOverwrite = False
  End If
 Else
  checkAllowOverwrite = True
 End If

 Set oFS = Nothing


End Function
    • good
    • 0

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

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