- ベストアンサー
ExcelVBAによる上書き保存時の処理について
- ExcelVBAを使用して上書き保存する際の処理方法について教えてください。
- 上書き保存時に「いいえ」を選択した場合にファイルの新規保存ダイアログを表示する方法を教えてください。
- VBAコードを使用してSheet1というシートを上書き保存する際、同名のファイルが存在する場合にどのように処理すれば良いですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
必要な部分を Do ~ Loopで囲んでやれば良いです。 Do LoopFLG=FALSE SaveName = Application.GetSaveAsFilename(filefilter:="Microsoft Office Excelブック,*.xls") If SaveName <> "False" Then 'キャンセルが押下されたならば、一時保存用のExcelファイルを閉じる If Dir(SaveName) <> "" Then If MsgBox("同名ファイルがあります。上書きしますか?", vbYesNo) = vbNo Then LoopFLG=TRUE End If End If End If Loop Until LoopFLG=TRUE
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
ロジックとしては、上書きしますか?で、「はい」「いいえ」だけで、「ファイル新規保存」が出てきますと、見かけ上の無限ループが、「いいえ」側で発生しますから、「キャンセル」を設けます。 Sub MacroTest1() Dim SaveName As Variant Dim Fname As String Dim ret As VbMsgBoxResult Const EXT As String = "xls" Worksheets("Sheet1").Copy Do SaveName = Application.GetSaveAsFilename(Fname, "Microsoft Office Excelブック,*.xls") If VarType(SaveName) = vbBoolean Or SaveName = "" Then ActiveWorkbook.Close False Exit Sub End If If InStr(1, SaveName, EXT, 1) = 0 Then SaveName = SaveName & "." & EXT Fname = Dir(SaveName) If Fname <> "" Then ret = MsgBox("同名ファイルがあります。上書きしますか?(キャンセルは取りやめ)", vbYesNoCancel) If ret = vbCancel Then ActiveWorkbook.Close Exit Sub ElseIf ret = vbYes Then Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=SaveName, FileFormat:=xlNormal Application.DisplayAlerts = False ActiveWorkbook.Close True Exit Sub End If End If Loop While Fname <> "" ActiveWorkbook.SaveAs Filename:=SaveName, FileFormat:=xlNormal ActiveWorkbook.Close End Sub
- keithin
- ベストアンサー率66% (5278/7941)
まぁ,GoTo制御はダメとは言われますが。 Sub macro1() Dim SaveName As Variant Worksheets("Sheet1").Copy roopStart: savename = Application.GetSaveAsFilename(filefilter:="Microsoft Office Excelブック,*.xls") If savename = False Then ActiveWorkbook.Close False Exit Sub End If If Dir(savename) <> "" Then If MsgBox("同名ファイルがあります。上書きしますか?", vbYesNo) = vbNo Then GoTo roopStart End If Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=savename, FileFormat:=xlNormal Application.DisplayAlerts = True End Sub
- kmetu
- ベストアンサー率41% (562/1346)
訂正です Loop Until LoopFLG=TRUE ↓ Loop While LoopFLG=TRUE