はじめに
最近、Excelのアドイン作りに勤しんでいます。
Application.InputBoxでキャンセルした際に少し困ったので纏めようと思います。
Application.InputBoxだけだと詰まらないので、VB標準のダイアログについても記載します。
VBAのダイアログ4種
メッセージボックス(MsgBox)
シンプルにダイアログを表示します。
Dim Result As Long
Result = MsgBox("元気ですか?", vbYesNo + vbInformation, "タイトル!")
右上の「×」で閉じた場合は「キャンセル」が返却されます。
※キャンセルボタンを表示させていない場合は、「×」を押せません。
ボタンや戻り値の種類は以下を参照してください。
インプットボックス(Application.InputBox)
Dim SelectRange As Range
Set SelectRange = Application.InputBox("範囲を選択してください。", "たいとる", "", , , , , 8)
戻り値は以下になりますが、キャンセルを押すと「FALSE」が返されます。
TYPE | 型 |
---|---|
0 | 数式 |
1 | 数値 |
2 | 文字列 |
4 | 論理値 |
8 | セル参照 |
16 | エラー値 |
64 | 配列 |
つまり上記のダイアログで「キャンセル」ボタンを押すとエラーになります。
そこで、以下のようにします。
Dim SelectRange As Range
On Error Resume Next
Set SelectRange = Application.InputBox("範囲を選択してください。", "たいとる", "", , , , , 8)
On Error GoTo 0
If SelectRange Is Nothing Then
'キャンセル または 範囲未選択の場合の処理
Else
'範囲選択の場合の処理
End If
これで「Set SelectRange」でRange型以外の値を設定しようとしたとき、エラーが発生しますが次の処理に移ります。
インプットボックス(InputBox)
文字列入力ダイアログを表示します。
Dim SelectRange As String
SelectRange = InputBox("名前を入力してください。", "たいとる")
If SelectRange = "" Then
'キャンセル または 未入力の場合の処理
Else
'入力された場合の処理
End If
ファイル選択ダイアログ(GetOpenFilename)
ファイルを選択するダイアログを表示します。
Dim FilePath As String
FilePath = Application.GetOpenFilename("Excelブック,*.xlsx,CSVファイル,*.csv", 2, "タイトル")