エクセルで同名のファイル名を実行拒否する方法

このQ&Aのポイント
  • エクセルにて保存時に同名のファイル名は実行拒否する方法を教えてください。
  • エクセルで名前を付けて保存のマクロを作成中ですが、同じファイル名が存在する場合に上書きできないようにする方法を教えてください。
  • マクロ初心者で、困っています。エクセルで同名のファイル名を強制的に上書きできないようにする方法を教えてください。
回答を見る
  • ベストアンサー

エクセルにて保存時に同名のファイル名は実行拒否する

今エクセルで、名前を付けて保存のマクロを作っています。 同ファイル名の物が同じフォルダ内にあれば上書きできますが、強制的に上書きできない様にする方法ってありますか? マクロをかじって間もないので、考え方もイマイチな状態で、困っております。 ご教示宜しくお願い致します。 Sub AAA() Dim fname As String fname = Application.Dialogs(xlDialogSaveAs).Show If fname = "False" Then MsgBox "キャンセルが押されました。処理を中止します" Exit Sub End If End sub

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

>強制的に上書きできない様にする 同名のファイルが既に有るか無いか、マクロの中でちゃんと調べて仕分けます。 作成例: sub macro1()  dim myFile as string Start:  myfile = application.getsaveasfilename()  if myfile = "False" then   msgbox "cancel"   exit sub  end if  if not dir(myfile) = "" then   msgbox "file is exist"   goto Start:  end if  activeworkbook.saveas filename:=myfile end sub また、ご利用のエクセルのバージョンによってこのままではうまくない場合もあります。 ご相談投稿ではご利用のソフト名は元より、普段あなたが使うソフトのバージョンまでキチンと明記する事を憶えて下さい。

go-hey
質問者

お礼

早々のお返事誠にありがとうございます。無事、問題解決でき非常に助かりました。 指摘のあったバージョンは2003です。明記が無くて申し訳ありませんでした。 以後気をつけます。本当にありがとうございました。

関連するQ&A

  • エクセルVBAで保存がうまくいきません

    エクセル2000です。 下記のようなVBAを記述しました。 「はい」なら別名保存 「いいえ」なら上書き保存のつもりです。 問題点 Sheets("AAA").Range("I9")の文字列内に.(半角ピリオド)があるとファイルに拡張子がつきません。 どうしたらよいのでしょうか?非常に困っています。 Sub 保存ボタン() Dim myYN As Integer Dim DRtn As Boolean Dim fn As String, fn2 As String fn = Sheets("AAA").Range("I9").Value & "_保存" fn2 = ThisWorkbook.Name myYN = MsgBox("現在の入力内容を別名で保存しますか?" _ + Chr(&HD) + Chr(&HA) + "別名保存なら「はい」" _ + Chr(&HD) + Chr(&HA) + "上書保存なら「いいえ」を選択します。" _ + Chr(&HD) + Chr(&HA) + "", vbYesNoCancel + vbQuestion, " 別名保存") If myYN = vbCancel Then Exit Sub 'キャンセルなら終了 If myYN = vbNo Then fn = fn2 '上書保存ならファイル名はそのまま DRtn = Application.Dialogs(xlDialogSaveAs).Show(ARG1:=fn, ARG2:=1) If DRtn = False Then Exit Sub 'ファイル名を消されたらキャンセル ThisWorkbook.Save '保存 ThisWorkbook.Close '閉じる End Sub

  • ファイル名を合成すると検索できないのでしょうか?

    下記のような式がありまして、一度作成したファイルは上書きされないはずですが何回やっても上書きされてしまいます。 これはファイルを検索していないのでしょうか? 既にファイルがあったら終了するはずですが何か間違えていますか? 'ファイル作成 Sub MakeCopyFile(newfile As String, orgfile As String) If SearchFile(newfile) Then Exit Sub End If Set fs = CreateObject("Scripting.FileSystemObject") fs.CopyFile orgfile, newfile End Sub ' ファイル検索 Function SearchFile(fname As String) As Boolean SearchFile = False Set fs = Application.FileSearch With fs .Filename = fname If .Execute() > 0 Then SearchFile = True End If End With End Function Sub Macro1() Dim name As String '名前 Dim fname As String 'ファイル名 Dim directory As String '作成先ディレクトリ Dim fullpath As String 'フルパス Dim orgfile As String '雛形のファイル名 Dim editbook As Workbook '個人データブック Dim id As String '番号 directory = "H:\test\" orgfile = "H:\test\雛形.xls" For i = 1 To 100 name = ThisWorkbook.Worksheets("Sheet2").Cells(i, 10).Value id = ThisWorkbook.Worksheets("Sheet2").Cells(i, 12).Value If name = "" Then Exit For End If 'コピーしたファイルを作成する fname = name + id + ".xls" 'ファイル名合成 fullpath = directory + fname 'フルパス合成 Call MakeCopyFile(fullpath, orgfile) 'ファイル作成 Workbooks.Open Filename:=fullpath Set editbook = Workbooks(fname) editbook.Worksheets("Sheet3").Cells(8, 14).Value = name editbook.Worksheets("Sheet3").Cells(8, 10).Value = id '※(その他必要な処理があれば追加してください) editbook.Close (True) Next i End Sub

  • 【エクセルVBA】「ファイルを開く」のダイアログボックスの後に文字を追加したい

    【エクセルVBA】で、「ファイルを開く」の操作を複数回するので、 ダイアログボックスに例えば「ファイルを開く:ABC」というよう に、「ファイルを開く」の後に文字を追加したいのですが、 どうすれば良いでしょうか。 現在、下記のようなマクロですが、具体的にどうすれば良いか教えて下さい。 宜しく、お願いします。  Dim fname1 As String  fname1 = Application.GetOpenFilename( _    filefilter:="すべてのファイル,*.*")  If fname1 = "False" Then Exit Sub

  • エクセルファイルをフロッピーに保存するマクロで教えて下さい

    今、フロッピーにファイルを保存する為のマクロを創っているのですが ワイルドカードの使い方を教えて下さい ここから***** Sub フロッピー保存() ' ' Dim fNAME As String fNAME = ActiveWorkbook.Name 'アクティブなブックのファイル名を取得 'ファイルが新規に作成された場合の処理(book1,book2等と成っている場合) If fNAME = "Book*" Then fNAME = Application.InputBox(prompt:="新規ファイルですね。ファイル名を入力して下さい", _          Title:="新規ファイル入力", Type:=2) Else ActiveWorkbook.Save End If '取得したファイル名でフロッピーディスクに保存 ActiveWorkbook.SaveAs Filename:="A:\"&fNAME, _    FileFormat:=xlNormal, _ Password:="",WriteResPassword:="",ReadOnlyRecommended:=False, _ CreateBackup:=False End Sub ここまで***** >>'ファイルが新規に作成された場合の処理(book1,book2等と成っている場合) >> If fNAME = "Book*" Then この、If fNAME = "Book*" Then が有効に働いていないみたいなんです。 「ワイルドカード・・・* や ? はマクロではどの様な書式が正しいのでしょう それと、エラー処理なんですが InputBoxメソッドでキャンセルやファイル名を入力しないで「OK]が押された 場合の処理、又フロッピーが挿入されていなかった場合などの エラー処理の対処法を教えて下さい

  • エクセル シートのみ 保存

    過去の質問も参照しましたが 当てはまる物が無くて質問しました! シート上にボタンを作成して クリックするとそのシートのみ 指定するファイルにコピーさせたいです! 下記の部分で何処を変化させればよいのでしょうか? (1)~(2)の部分で困っています。 Private Sub CommandButton1_Click() Dim FileName As String Dim FileExt As String ’(1)の質問!○=の部分をSheets(セルのA1の値をファイル名に入れたいです) FileName = "○"& Format(Now, "yyyy-mm") & ".XLS" '==== FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".XLS" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If '==== FileName = "D:\保存\ケア\計画\" & FileName If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 上書きしますか?", vbOKCancel, "上書きの確認") = vbCancel Then '##保存せずに終了 Exit Sub ElseIf ThisSheets.FullName = FileName Then '##現在開いているファイルと同じなら上書き保存 ThisSheets.Save Else '##指定ファイルを削除した後保存 Kill FileName ThisSheets.SaveCopyAs FileName:=FileName End If Else '##ファイルを新規保存 ThisSheets.SaveCopyAs FileName:=FileName End If ThisSheets.Saved = True End Sub (2)ThisSheets&指定してもう一つだけ  保存先にコピーしたいです!つまり  2つのSheetのみ保存させたいのですが・・  ここからどのようにしたら良いのか  お願いします!教えて下さい。  

  • OSがVistaのエクセル2007で作ったファイルがXpのエクセル2003で読み取れない

    すいません。教えてください。 Vista PCエクセル2007で保存したファイルが、XP PCエクセル2003で見ると文字化けしてしまうのですが、どこがいけないのか教えてください。 Sub 保存シートの名前を付けて保存() ' シート保存 Macro '***このマクロは見積もり番号と件名を保存ファイル名にし保存します。*** Dim Answer3 Dim 既定ファイル名 As String Dim 保存ファイル名 As Variant Answer3 = MsgBox("本当に保存しますか?", vbYesNo) If Answer3 = vbNo Then MsgBox ("キャンセルしました。") Exit Sub End If Sheets("保存シート").Select Application.CutCopyMode = False Sheets("保存シート").Copy 既定ファイル名 = Range("V7") 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名, "Excel 97-2003ブック, *.xls") If 保存ファイル名 = False Then MsgBox "保存は中止されました。" ActiveWorkbook.Close (False) Else ActiveWorkbook.SaveCopyAs 保存ファイル名 ActiveWorkbook.Close (False) End If End Sub よろしくお願いします。

  • 数値かどうかを取得したい IsNumberではダメ

    Sub Macro2() Dim mystr As String mystr = "1" If IsDate(mystr) = False Then MsgBox "NO" End If End Sub これなら日付型かどうかを取得できるのに、 Sub Macro1() Dim mystr As String mystr = "1" If IsNumber(mystr) = False Then MsgBox "NO" End If End Sub だと、IsNumberがコンパイルエラーになります。 変数に入っている値が数値として評価できるかを取得する方法を教えてください。

  • ExcelのVBAでブックを保存

    住所録Aと住所録Bがあります。 AとBを比較して、差異をを別ファイルに出力しようとしています。 比較元となるファイルは、AでもBでもかまいません。 比較、判定、ファイルへの出力部分は、省略していますが、保存 する場合は、どこに行うのがよいのですか bookですか。sheetですか。 両方で、SaveAsができまが、使い分けがあるのでしょうか。 どのように使い分けするのでしょうか。 書き方、使い方のおかしいところを指摘して頂くとありがたい です。 --------------------------------------------------------------------------------------------------- Option Explicit Sub test() Dim ret As Integer Dim row1 As Long Dim col1 As Long Dim row2 As Long Dim col2 As Long Dim myRtn As Boolean Dim fno1 As String Dim fno2 As String Dim OutBook As New Workbook Dim OutSheet As New Worksheet Dim OutFileName As String Dim cnt As Integer Dim I As Integer ret = MsgBox("処理を開始します。" + Chr(13) + Chr(10) + "よろしいですか。?", _ vbYesNo + vbQuestion) If ret = vbNo Then End End If myRtn = Application.Dialogs(xlDialogOpen).Show If myRtn = False Then MsgBox "[キャンセル]が選択されました" & vbCr & _ "処理を終了します" Exit Sub End If fno1 = Application.ActiveWorkbook.Name myRtn = Application.Dialogs(xlDialogOpen).Show If myRtn = False Then MsgBox "[キャンセル]が選択されました" & vbCr & _ "処理を終了します" Exit Sub End If fno2 = Application.ActiveWorkbook.Name Set OutBook = Workbooks.Add Set OutSheet = ActiveSheet OutBook.Worksheets(1).Name = "テスト" OutFileName = "テスト.xls" With Application.Workbooks(fno1).Worksheets(1) row1 = 1 col1 = 1 cnt = 1 Do While .Cells(row1, 1) <> "" 処理 (省略) Loop End With MsgBox "処理が終了しました。", vbOKOnly + vbInformation, "確認" Application.Workbooks(fno1).Close Application.Workbooks(fno2).Close OutSheet.SaveAs Filename:=OutFileName OutBook.SaveAs Filename:=OutFileName OutBook.Close End Sub --------------------------------------------------------------------------------------------------- OutSheet.SaveAs Filename:=OutFileName or OutBook.SaveAs Filename:=OutFileName のどちらでも保存ができます。 また、書き方、使い方のおかしいところを指摘して頂くとありがたいです。

  • エクセルのシートのデータをVBAを使ってCVS形式で保存したいのですが、文字化けしないようにするにはどうしたらいいでしょうか?

    エクセルのシートのデータをVBAを使ってCVS形式で保存したいのですが、文字化けしてしまいます。手動で「名前を付けて保存」すると文字化けしません。文字化けしないようにするにはどうしたらいいでしょうか? どなたかお教えいただきたく、よろしくお願いします。 ---------------------------------------------------------------------- Sub test5() Dim aaa As String Dim fname As Variant aaa = Format(Now, "YYMMDD") fname = Application.GetSaveAsFilename(InitialFileName:=aaa & ".csv", fileFilter:="csvファイル(*.csv), *.csv") If fname = False Then Exit Sub '保存 Worksheets("sheet1").SaveAs fname End Sub

  • Accessフォームの作成

    Accessで作成されているシステムの ファイル取り込みフォームにある実行ボタンを押下すると、 下記のメッセージが表示されます。 「select case に対応する case がみつからない。」 どこかで指定しないといけないのでしょうか? Private Sub Cmd実行_Click() On Error GoTo Err Dim StrSql As String Dim IntNDCnt As Integer Dim IntNTCnt As Integer '確認メッセージの出力 If MsgBox("処理を開始します。よろしいですか?", vbInformation + vbYesNo, "データ取込処理") = vbNo Then Exit Sub End If '対象データ別の処理実行 Select Case Me.Cmb対象.ListIndex Case -1 'エラー MsgBox "読込むデータを指定してください", vbCritical, "データ取込処理" Exit Sub Case 0 '全データ If F_手数料明細読込() = False Then Exit Sub End If If F_奨励金読込() = False Then Exit Sub End If If F_減額読込() = False Then Exit Sub End If If F_預り金読込() = False Then Exit Sub End If Case 1 '手数料データ If F_手数料明細読込() = False Then Exit Sub End If Case 2 '奨励金データ If F_奨励金読込() = False Then Exit Sub End If Case 3 '減額データ If F_減額読込() = False Then Exit Sub Case 4 '預り金データ If F_預り金読込() = False Then Exit Sub End If End Select 今は、Case 4が黄色に反転します。

専門家に質問してみよう