VB6・VBA関数メモ:MsgBox関数

MsgBox関数についてメモしておきます。
メッセージダイアログを表示する際に良く使うかと思います。

メッセージ以外にボタンの種類やアイコン等の表示も変更できます。

ただしボタン名の変更やフォントの変更、モードレス表示等はできないようなので、
このような場合は自分でフォームを作る必要がありそうです。
また最前面表示等、ヘルプに書いてある動作が実はできなかったりします。(私が調べた限りでは) (昔はできた?)

以下の内容はWin7(64bit)+Office2010で試しています。
環境によっては動作が異なるかもしれません。


概要

MsgBox(Prompt, [Buttons As VbMsgBoxStyle=vbOKOnly], [Title], [HelpFile], [Context]) As VbMsgBoxResult
機能 メッセージダイアログを表示
引数 Prompt メッセージ文字列 Variant型
Buttons (省略可能)
表示するボタンやアイコン、ダイアログの設定等を設定
省略時はvbOKOnly([OK]ボタンのみ表示)
VbMsgBoxStyle型
Title (省略可能)
表示するタイトル
省略時はアプリケーション名
Variant型
HelpFile (省略可能)※Contextを指定した場合は必須
F1キーまたは[ヘルプ]ボタンを押した時に開くヘルプファイル
Variant型
Context (省略可能)※HelpFileを指定した場合は必須
F1キーまたは[ヘルプ]ボタンを押した時に開くヘルプコンテキスト
Variant型
戻り値 押したボタンの定数 VbMsgBoxResult型


使用例

説明 記述例 出力
ダイアログにメッセージを表示 Call MsgBox("abc")
ボタンやアイコン、ダイヤログのスタイルを変更
(例では[はい][いいえ][ヘルプ]ボタン表示、第2ボタンを標準ボタン、警告アイコン表示、最前面表示)
(定数はVbMsgBoxStyle列挙体を参照)
Dim style As VbMsgBoxStyle

style = 0
style = style Or vbYesNo
style = style Or vbMsgBoxHelpButton
style = style Or vbDefaultButton2
style = style Or vbCritical
style = style Or vbMsgBoxSetForeground

ret = MsgBox("abc", style)
ダイアログにタイトルを指定 Call MsgBox("abc", ,"title")
ヘルプファイルを表示できるようにする
(ヘルプボタン押下またはF1キー押下でヘルプページ表示)
(Vista以降だと表示できないかも?)
Dim style As VbMsgBoxStyle
style = vbMsgBoxHelpButton
Call MsgBox("abc",style , , "DEMO.HLP", 1000)
押したボタンによって処理を分岐
(定数はVbMsgBoxResult列挙体を参照)
Dim ret As VbMsgBoxResult

ret = MsgBox("abc", vbYesNoCancel)

Select Case ret
Case vbYes:
   Debug.Print "はい"
Case vbNo:
   Debug.Print "いいえ"
Case vbCancel:
   Debug.Print "キャンセル"
End Select


キー操作

キー 説明
[F1]キー [ヘルプ]を表示
[Esc]キー [キャンセル]ボタン表示時に[キャンセル]ボタンを実行


VbMsgBoxStyle列挙体

定数名 説明 使用例
vbOKOnly 0 [OK]ボタン Call MsgBox("abc", vbOKOnly)
vbOKCancel 1 [OK][キャンセル]ボタン Call MsgBox("abc", vbOKCancel)
vbAbortRetryIgnore 2 [中止][再試行][無視]ボタン Call MsgBox("abc", vbAbortRetryIgnore)
vbYesNoCancel 3 [はい][いいえ][キャンセル]ボタン Call MsgBox("abc", vbYesNoCancel)
vbYesNo 4 [はい][いいえ]ボタン Call MsgBox("abc", vbYesNo)
vbRetryCancel 5 [再試行][キャンセル]ボタン Call MsgBox("abc", vbRetryCancel)
vbCritical 16 [警告]アイコン Call MsgBox("abc", vbCritical)
vbQuestion 32 [問い合わせ]アイコン Call MsgBox("abc", vbQuestion)
vbExclamation 48 [注意]アイコン Call MsgBox("abc", vbExclamation)
vbInformation 64 [情報]アイコン Call MsgBox("abc", vbInformation)
vbDefaultButton1 0 第1ボタンを標準ボタン Dim style As VbMsgBoxStyle

style = 0
style = style Or vbYesNoCancel
style = style Or vbDefaultButton1

Call MsgBox("abc", style)
vbDefaultButton2 256 第2ボタンを標準ボタン Dim style As VbMsgBoxStyle

style = 0
style = style Or vbYesNoCancel
style = style Or vbDefaultButton2

Call MsgBox("abc", style)
vbDefaultButton3 512 第3ボタンを標準ボタン Dim style As VbMsgBoxStyle

style = 0
style = style Or vbYesNoCancel
style = style Or vbDefaultButton3

Call MsgBox("abc", style)
vbDefaultButton4 768 第4ボタンを標準ボタン Dim style As VbMsgBoxStyle

style = 0
style = style Or vbYesNoCancel
style = style Or vbMsgBoxHelpButton
style = style Or vbDefaultButton4

Call MsgBox("abc", style)
vbApplicationModal 0 アプリケーションモーダル表示
(メッセージ表示中はアプリケーションを停止)
Call MsgBox("abc", vbApplicationModal)
vbSystemModal 4096 システムモーダル表示
(メッセージ表示中は全システムを停止)
(…とヘルプにはありますが動作しないようです)
Call MsgBox("abc", vbSystemModal)
vbMsgBoxHelpButton 16384 [ヘルプ]ボタン Call MsgBox("abc", vbMsgBoxHelpButton)
vbMsgBoxSetForeground 65536 最前面表示
(…とヘルプにはありますが動作しないようです)
Call MsgBox("abc", vbMsgBoxSetForeground)
vbMsgBoxRight 524288 テキスト右寄せ Call MsgBox("abc", vbMsgBoxRight)
vbMsgBoxRtlReading 1048576 テキストを右から左の方向に表示
(…とヘルプにはありますが動作しないようです)(環境によっては動作する?)
Call MsgBox("abc", vbMsgBoxRtlReading)


VbMsgBoxResult列挙体

定数名 説明 使用例
vbOK 1 [OK]ボタンクリック時 Dim ret As VbMsgBoxResult

ret = MsgBox("abc", vbOKCancel)

Select Case ret
Case vbOK:
   Debug.Print "OK"
Case vbCancel:
   Debug.Print "キャンセル"
End Select
vbCancel 2 [キャンセル]ボタンクリック時 Dim ret As VbMsgBoxResult

ret = MsgBox("abc", vbOKCancel)

Select Case ret
Case vbOK:
   Debug.Print "OK"
Case vbCancel:
   Debug.Print "キャンセル"
End Select
vbAbort 3 [中止]ボタンクリック時 Dim ret As VbMsgBoxResult

ret = MsgBox("abc", vbAbortRetryIgnore)

Select Case ret
Case vbAbort:
   Debug.Print "中止"
Case vbRetry:
   Debug.Print "再試行"
Case vbIgnore:
   Debug.Print "無視"
End Select
vbRetry 4 [再試行]ボタンクリック時 Dim ret As VbMsgBoxResult

ret = MsgBox("abc", vbAbortRetryIgnore)

Select Case ret
Case vbAbort:
   Debug.Print "中止"
Case vbRetry:
   Debug.Print "再試行"
Case vbIgnore:
   Debug.Print "無視"
End Select
vbIgnore 5 [無視]ボタンクリック時 Dim ret As VbMsgBoxResult

ret = MsgBox("abc", vbAbortRetryIgnore)

Select Case ret
Case vbAbort:
   Debug.Print "中止"
Case vbRetry:
   Debug.Print "再試行"
Case vbIgnore:
   Debug.Print "無視"
End Select
vbYes 6 [はい]ボタンクリック時 Dim ret As VbMsgBoxResult

ret = MsgBox("abc", vbYesNo)

Select Case ret
Case vbYes:
   Debug.Print "はい"
Case vbNo:
   Debug.Print "いいえ"
End Select
vbNo 7 [いいえ]ボタンクリック時 Dim ret As VbMsgBoxResult

ret = MsgBox("abc", vbYesNo)

Select Case ret
Case vbYes:
   Debug.Print "はい"
Case vbNo:
   Debug.Print "いいえ"
End Select


コメント
コメントする








    
この記事のトラックバックURL
トラックバック