MsgBoxの戻り値を受け取る
今日会社で、MsgBox(メッセージボックス)について問い合わせを受けた。
何某かの参考書(入門書)を見たらしく、このようなコードになっていた。
Sub Test() Dim 回答 As Integer 回答 = MsgBox("○○しますか?", vbYesNo) If 回答 = 6 Then ' Yesの場合の処理。 MsgBox "あなたは「はい」を選びました。" Else ' Noの場合の処理。 MsgBox "あなたは「いいえ」を選びました。" End If End Sub
どうやら ↓ この部分が、難しかったようだ。
回答=6
私はこのコードを見て、以下のようなアドバイスをした。
- まず、この内容でも全然問題ない。ちゃんと処理できているから。
実際、私も昔はこう書いていた。 - ただ出来れば、↓ のような記述だと更に分かり易いかも。
Sub Test() Dim MsgBoxResult As VbMsgBoxResult MsgBoxResult = MsgBox("○○しますか?", vbYesNo) If MsgBoxResult = vbYes Then ' Yesの場合の処理。 MsgBox "あなたは「はい」を選びました。" Else ' Noの場合の処理。 MsgBox "あなたは「いいえ」を選びました。" End If End Sub
ポイントとなるのは、この部分。
Dim MsgBoxResult As VbMsgBoxResult MsgBoxResult = MsgBox("○○しますか?", vbYesNo) If MsgBoxResult = vbYes Then
答えを受け取る変数の型をvbMsgBoxResultとすることで、インテリセンス(入力補完機能)が働いてくれる。これは便利だ。
またvbYesの実体が数字の6であることから、最初コードでも問題なく動作するが、後者の方が可読性という点では優れていると思う。
ここで思うのは、最初のコードは果たして「初心者向け」なのかな?ということ。少なくとも現時点では、後者の方が分かり良いのではないだろうか。
きっと、賛否両論あるのでしょうけど。
参考まで。