'ファイル選択ダイアログでキャンセルした場合に分岐する If Application.FileDialog(msoFileDialogFilePicker).Show = -1 Then MsgBox Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) Else MsgBox "キャンセル実行" End If
ダイアログボックスを表示した際に、指定の操作を行わなかった場合(キャンセルを行った場合)にそのまま処理を継続はできません
取得するアイテムが存在しないためエラーになります
その場合はキャンセルされた場合の処理分岐を作成する必要があります
それが、例コードになります
If Application.FileDialog(msoFileDialogFilePicker).Show = -1 Then
まず最初のIF条件文の箇所です
これはダイアログの表示と同時に、戻り値を判定基準にしています
ダイアログは選択されると「-1」を返します
なので、これを条件にすることで選択されたかどうかが判定できます
このコードでいえば、「-1」(選択した)であれば真(True)となります
MsgBox Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) Else MsgBox "キャンセル実行" End If
残りのコードは、分岐によって処理される部分です
1行目は真の時に実行されるので、選択された状態であることが確認されているので
その指定ファイルの絶対パスをメッセージに表示します
Else以降は偽(False)の場合になるので、キャンセルされた場合に当てはまりますので、メッセージでキャンセルを知らせます
このコードは、ダイアログ全ての種類で有効です
名前を付けて保存のダイアログでも、キャンセルすればこの条件分岐で処理できます
選択個数で分岐
一応、選択個数で判定を行うこともできます
すこし条件文が冗長になるので、ここで解説しておきます
'ファイル選択ダイアログでキャンセルした場合に分岐する If Application.FileDialog(msoFileDialogFilePicker).SelectedItems.Count >= 1 Then MsgBox Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) Else MsgBox "キャンセル実行" End If
データの選択個数を取得するプロパティを使用します
その個数が1以上であれば選択していると判断します
なので、「>= 1」として1以上なら真になるように条件をたてます
どちらの条件分岐でもいいのですが、少し長くなるこちらはあまり意味はないかもしれません
指定したときに「-1」が返されることが分かっていれば、トップのコードでいいですね
関連の記事