Excel VBA MsgBoxについて(3)アイコンとタイトルも追加する

Microsoft Excel

スポンサーリンク

はじめに

Excel VBA MsgBoxについて(2)選択肢があるタイプのMsgBox

Excel VBAの入り口 MsgBoxについて(1)OKボタンしか無い単なるメッセージボックス

前回の記事で、Excel VBAのメッセージボックスMsgBoxについて、選択肢を持たせるタイプのものを扱った。

そこまでの段階では、このMsgBoxはまだちょっと味気ないものになっているので、今回はMsgBoxにデザイン的な要素も追加していく。

MsgBoxに、オプション的に追加できる主なものは、アイコンタイトルだ。
順に述べていく。

アイコンを追加する

アイコンを使ったソースコードを書いてみる

前回使用したMsgBoxのソースコードがこちら。
少しだけコメント文を追加してるけど。

で、これを、ちょっと次のように書き換えてみる。
vbInfomationという、情報のアイコンを使うものだ。

  1. コメントで「ここから」「ここまで」っていうのがあるけど、この間にあるソースコードをいったん消去。そして
    If MsgBox(“OKかキャンセルを選んで下さい。”
    のところだけコピペで書いてみる。
  2. そして次にカンマ , 文字を打つと、選択肢が表示されるはずだ。
    その選択肢から「vbOKCancel」を選ぶ。
    選ぶには、カーソルを下に持っていってもいいし、vboとか途中までキーボードで打っていくと候補がより出やすくなる。
  3. vbOKCancel」を入力できたら、「+」文字を打つと、またすぐ候補が一覧表示されるはずだ。
    その中から今度は「vbInfomation」を選ぶ。
  4. 次に
    )=
    と入力。また選択肢が表示されるので「vbCancel」を選択し、
    Then Exit Sub
    まで続けて入力する。

動画にもしてみた。

これで、キャンセルボタンが押されたら処理終了っていうだけのマクロが書けた。
実際にMsgBoxを使うマクロを書くときもこんな感じで、ちょっと文字を打って入力候補を表示させながら書いている。

慣れたら、どのくらい入力すれば効率的に入力候補を表示させながらやれるか、ケースごとに分かってくる。

選択肢とアイコンは足し算する

さて今回、アイコンを表示させるに当たって
vbOKCancel+vbInformation
という、見慣れない足し算のコードを書いた。

で、ちょっと実験してみれば分かるが、選択肢のvbOKCancelとアイコンのvbInformationを逆順にして
vbInformation+vbOKCancel
としても、マクロの動きは何も変わらない。

なぜこんな足し算をするのか。
前回、MsgBoxの選択肢に対するvbCancelとかの実態は数値なのだと述べたが、vbOKCancelとかvbInformationとかも全部、同じことで実体は数値だ。

たとえばvbOKCancel=1、vbInformation=64で、足すと65になるけど、そういう組み合わせは他に無いように設計されてるというわけ。
その辺を意識しても何のメリットもないから、これ以上は書かない。興味があったら他所のサイトで調べれば出てくる。

アイコンの種類

さて、上記の例ではvbInformationという情報のアイコンを扱ったのだけど、他にどんなアイコンがあるかというと、次のようになる。

vbInfomation (情報) vbCritical (警告)
vbExclamation (注意) vbQuestion (問い合わせ)

どのアイコンを使っても、マクロの動作そのものには関係しないから、自由は自由だ。
私の基準では

アイコンの使い分け
  • vbInfomation:文字通り、何らかの情報を表示するだけのもの。
  • vbExclamation :エラー表示
  • vbQuestion :明確な疑問文
  • vbCritical:使ったことがない
という感じだ。
各自、自分の基準を見つければよいだろう。

タイトルを追加する

ではこれで、MsgBoxにアイコンを付けたわけだけど、その部分のソースコードがこちら。

If MsgBox(“OKかキャンセルを選んで下さい。”, vbOKCancel + vbInformation) = vbCancel Then Exit Sub

次にタイトルを付ける。これは簡単で、vbInformationの次に
, “タイトルを付けました”
とでも打ってみよう。

If MsgBox(“OKかキャンセルを選んで下さい。”, vbOKCancel + vbInformation, “タイトルを付けました”) = vbCancel Then Exit Sub

そしてマクロを実行すると、タイトル付きのMsgBoxが出てくる。

いま書いたソースコード

If MsgBox(“OKかキャンセルを選んで下さい。”, vbOKCancel + vbInformation, “タイトルを付けました”) = vbCancel Then Exit Sub
で、最初の“OKかキャンセルを選んで下さい。”がメインのメッセージそのもので、“タイトルを付けました”がタイトルだ。

それって別にソースコードに明記されてないみたいだけど、自動判定してくれているようだ。

では、MsgBoxって、vbOKCancel とかの選択肢表記を省略したら自動的に、OKボタンしか持たない単なるメッセージボックスになるんだけど、それについて同じように

MsgBox “メッセージです”, “タイトルを付けました”
というようにアイコンもどれも省略してタイトルだけ書いて実行すると、「型が一致しません」とかいうエラーが出る。

「型が一致しません」エラー

なんでそうなるかって、エラーにならない方のコード

If MsgBox(“OKかキャンセルを選んで下さい。”, vbOKCancel + vbInformation, “タイトルを付けました”) = vbCancel Then Exit Sub
は、
メッセージ > アイコン+ボタンの種類 > タイトル
という順序じたいは省略せず順番通りに書いてるからで、だから自動判定が効いてくれる。

だから、OKボタンのみの単なるMsgBoxを使うときも、

MsgBox “メッセージです”,vbInformation, “タイトルを付けました”
というようにアイコンを明記するようにすれば、すんなり通ってくれる。

MsgBoxには必ずアイコンとタイトルを付けるのを、習慣づけるようにしよう。

スポンサーリンク