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とすることで、インテリセンス(入力補完機能)が働いてくれる。これは便利だ。
f:id:Infoment:20200413222925p:plain

またvbYesの実体が数字の6であることから、最初コードでも問題なく動作するが、後者の方が可読性という点では優れていると思う。
f:id:Infoment:20200413223146p:plain

ここで思うのは、最初のコードは果たして「初心者向け」なのかな?ということ。少なくとも現時点では、後者の方が分かり良いのではないだろうか。

きっと、賛否両論あるのでしょうけど。

参考まで。