• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAによる 上書き保存時の処理について)

ExcelVBAによる上書き保存時の処理について

このQ&Aのポイント
  • ExcelVBAを使用して上書き保存する際の処理方法について教えてください。
  • 上書き保存時に「いいえ」を選択した場合にファイルの新規保存ダイアログを表示する方法を教えてください。
  • VBAコードを使用してSheet1というシートを上書き保存する際、同名のファイルが存在する場合にどのように処理すれば良いですか?

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

必要な部分を 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)
回答No.4

ロジックとしては、上書きしますか?で、「はい」「いいえ」だけで、「ファイル新規保存」が出てきますと、見かけ上の無限ループが、「いいえ」側で発生しますから、「キャンセル」を設けます。 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)
回答No.3

まぁ,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)
回答No.2

訂正です Loop Until LoopFLG=TRUE ↓ Loop While LoopFLG=TRUE

関連するQ&A