銀河鉄道

【VBA】メッセージボックスをモジュールに集める|OKOnly,OKCancel,YesNo

サムネイル
[VBA]ShowMessage Box

OKCancelとYesNoはTrue/falseを返す

'=============================
' Module: MsgBoxHelper.bas
'=============================

Option Explicit

'--- OKのみ ---
' 情報メッセージ用(デフォルトタイトル: "お知らせ")
Public Sub MsgOKOnly( _
                        		ByVal text As String, _
                        		Optional ByVal title As String = "お知らせ")

	MsgBox text, vbOKOnly + vbInformation, title
End Sub


'--- OK/Cancel ---
' OKでTrue, CancelでFalse(デフォルトタイトル: "確認")
Public Function MsgOKCancel( _
                        		ByVal text As String, _
                        		Optional ByVal title As String = "確認") As Boolean

	MsgOKCancel = (MsgBox(text, vbOKCancel + vbQuestion, title) = vbOK)
End Function


'--- Yes/No ---
' YesでTrue, NoでFalse(デフォルトタイトル: "確認")
Public Function MsgYesNo( _
                        		ByVal text As String, _
                        		Optional ByVal title As String = "確認") As Boolean

	MsgYesNo = (MsgBox(text, vbYesNo + vbQuestion, title) = vbYes)
End Function


'--- Error ---
' エラーメッセージ用(デフォルトタイトル: "やり直してください")
Public Sub MsgError( _
                        		ByVal text As String, _
                        		Optional ByVal title As String = "やり直してください")

	MsgBox text, vbCritical, title
End Sub

Caller example

' decide how to proceed based on result
' 呼び出し側例:結果に応じて処理方針を決定

	' 入力検証
	If Not IsValidInput() Then
		MsgError "入力が不正です。"
		Exit Sub	' ← 終了は呼び出し側で
	End If
関数化のメリット

後で「全部英語にしたい」「警告音なしにしたい」となったときに
関数の中身を変えることえ全体が反映される

ポイント

  1. 統一UI方針を決める|Consistent Message UI
     → メッセージタイトルやアイコン(vbInformation / vbExclamation / vbQuestion)を統一。
  2. 返り値を明示的に変換|Explicit Return Conversion
     → 返り値型(Boolean)に合わせて比較式で整える。
  3. メッセージ共通化モジュールを作る
     → 例:MsgInfo, MsgError, MsgYesNo, MsgOKCancel などを同一モジュールにまとめる。

MsgOKCancelでやってること

  • MsgBox() の戻り値は数値(VbMsgBoxResult 列挙体)
    • vbOK = 1
    • vbCancel = 2
  • MsgOKCancel = (res = vbOK)
    vbOK のときだけ True、それ以外は False

ボタンとアイコンの組み合わせ例

vbOKCancel + vbCritical '警告
vbYesNo + vbQuestion '質問
vbOKOnly + vbExclamation '注意
vbAbortRetryIgnore + vbQuestion

Vocabulary

| Message Wrapper|メッセージラッパー関数 |
| Wrapper Function|ラッパ関数 |
| Thin Abstraction Layer|薄い抽象化レイヤー |
| VbMsgBoxResult|メッセージボックスの戻り値 |
| VbMsgBoxStyle|メッセージボックスの表示スタイル |
| Explicit Conversion|明示的変換 |
| Consistent UI|一貫したUI |
| Centralized UI Feedback|UIメッセージの集中管理 |
Keep message functions consistent, and your UI will feel professional.

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。

記事一覧