MW211 EXIT

devlog
ExcelVBA/ブックの上書保存(2)
2018年07月15日
では、自前で上書保存か否かの判断を行うには?
┌──────────────────────────────────────┐
│If Dir(保存先) = "" Then                                                    │
│    ' 既存なし(上書保存ではなく新規保存)                                    │
│Else                                                                        │
│    ' 既存あり(上書保存)                                                    │
│End If                                                                      │
└──────────────────────────────────────┘
Dir()で保存先があれば戻り値が帰ってくるので、それがあるか否かで判断できる

例えば、ファイル選択ダイアログと組み合わせた場合には
以下のような処理となる。
(上書を拒否したら再度選択画面に戻る仕組みとなっている)
┌──────────────────────────────────────┐
│Function 保存先選択() As String                                             │
│    Dim メッセージ As String                                                │
│    Dim 保存先 As Variant                                                   │
│    Dim ファイル名 As String                                                │
│    ファイル名 = "初期表示ファイル名.xlsx"                                  │
│    Do                                                                      │
│        保存先 = Application.GetSaveAsFilename( _                           │
│            InitialFileName:=ファイル名, _                                  │
│            FileFilter:="Excelファイル(*.xlsx),*.xlsx" _                    │
│        )                                                                   │
│        ' キャンセル                                                        │
│        If 保存先 = False Then                                              │
│            MsgBox "キャンセルされました。", vbInformation, "処理の中止"    │
│            保存先選択 = ""                                                 │
│            Exit Function                                                   │
│        End If                                                              │
│        ' 新規追加                                                          │
│        If Dir(保存先) = "" Then                                            │
│            Exit Do                                                         │
│        End If                                                              │
│        ' 上書の確認                                                        │
│        ファイル名 = Dir(保存先)                                            │
│        メッセージ = ファイル名 & " は既に存在します。" & vbCrLf _          │
│                   & "上書きしますか?"                                     │
│        If MsgBox(メッセージ, vbYesNo + vbExclamation, "処理の確認") _      │
│                                                                = vbYes Then│
│            Exit Do                                                         │
│        End If                                                              │
│    Loop                                                                    │
│    保存先選択 = 保存先                                                     │
│End Function                                                                │
└──────────────────────────────────────┘
分類:ExcelVBA