ray88’s diary

お仕事で困ったとき用の自分用の覚書

VBA MsgBoxの引数・戻り値一覧

■引数一覧

名称 概要 規定値
prompt メッセージとして表示する文字列 なし
buttons 表示するボタンの数や種類、アイコンスタイルなど(省略可) 0(vbOkOnly)
title ボックスのタイトルバーに表示する文字列(省略可) "MicrosoftExcel(Access)"
helpfile cpmtextとともに必要。ボックスの[ヘルプ]ボタンから開くヘルプファイルを指定(省略可) なし
context helpfileとともに必要。ヘルプ内のコンテキスト番号を指定(省略可) なし

■buttons引数のアイコン一覧

定数 イメージ
vbCritical 16 f:id:ray88:20201030211634p:plain
vbQuestion 32 f:id:ray88:20201030212208p:plain
vbExclamation 48 f:id:ray88:20201030212242p:plain
vbInformation 64 f:id:ray88:20201030211410p:plain

■buttons引数のボタン種類一覧

定数 イメージ
vbOKOnly 0 f:id:ray88:20201030213840p:plain
vbOkCancel 1 f:id:ray88:20201030213907p:plain
vbAbortRetryIgnore 2 f:id:ray88:20201030213933p:plain
vbYesNoCancel 3 f:id:ray88:20201030213959p:plain
vbYesNo 4 f:id:ray88:20201030214204p:plain
vbRetryCancel 5 f:id:ray88:20201030214234p:plain

■戻り値一覧(Long型)

定数 押されたボタン
vbOK 1 OK
Cancel 2 キャンセル
vbAbort 3 中止
vbRetry 4 再試行
vbIgnor 5 無視
vbYes 6 はい
vbNo 7 いいえ

(例)
引数の順番:MsgBox(prompt,buttons,title,helpfle,context)
ポイント:ボタンとアイコンは両方「buttons」の引数となるため、両方設定するときは 
ボタンの定数 + アイコンの定数(vbOKOnly + vbCritical)の様に記述する

Sub msgboxTest()
    Dim res As Long
    res = MsgBox("中止します", vbOKOnly + vbCritical, "テスト")
    MsgBox res
    If res = vbOK Then
        MsgBox "定数vbOkの値は1"
    End If
End Sub

f:id:ray88:20201031091026p:plain
(例)頻繁に同じアイコンとボタンの組み合わせを使用してメッセージボックスを使用するとき,いちいち引数のコードを書くのが面倒なのでにメッセージボックスをオーバーライドっぽく部品化

Function fncMsgbox(prompt As String) As VbMsgBoxResult
    fncMsgbox = VBA.MsgBox(prompt, vbInformation + vbYesNo)
End Function
Sub testMsg()
    fncMsgbox "部品化テスト"
End Sub

※MsgBoxの戻り値は「VbMsgBoxResult」で内部処理形式がLong型。
戻り値はLong型でも可能だがvbMsgBoxResult型を使用することでインテリセンスが利用可能となるメリットがある。