0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ExcelVBAで使用できるダイアログ

Posted at

はじめに

最近、Excelのアドイン作りに勤しんでいます。
Application.InputBoxでキャンセルした際に少し困ったので纏めようと思います。

Application.InputBoxだけだと詰まらないので、VB標準のダイアログについても記載します。

VBAのダイアログ4種

メッセージボックス(MsgBox)

シンプルにダイアログを表示します。

image.png

Dim Result As Long
Result = MsgBox("元気ですか?", vbYesNo + vbInformation, "タイトル!")

右上の「×」で閉じた場合は「キャンセル」が返却されます。
※キャンセルボタンを表示させていない場合は、「×」を押せません。

ボタンや戻り値の種類は以下を参照してください。

インプットボックス(Application.InputBox)

入力ダイアログを表示します。
image.png

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)

文字列入力ダイアログを表示します。

image.png

Dim SelectRange As String
SelectRange = InputBox("名前を入力してください。", "たいとる")

If SelectRange = "" Then
    'キャンセル または 未入力の場合の処理
Else
    '入力された場合の処理
End If

ファイル選択ダイアログ(GetOpenFilename)

ファイルを選択するダイアログを表示します。

image.png

Dim FilePath As String
FilePath = Application.GetOpenFilename("Excelブック,*.xlsx,CSVファイル,*.csv", 2, "タイトル")

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?