VBA_MsgBox_1.0

[1.はじめに](#はじめに)
[2.さっそく](#さっそく)
[3.イメージ](#イメージ)
[4.つかうもの](#つかうもの)
[5.サンプル](#サンプル)
[6.さいごに](#さいごに)
#### <INS>はじめに</INS>
はじめての投稿になります。
これまで使用してきたRPA(BluePrism)やVBAのあれこれ、これから学ぶあれこれを
いざという時やおさらいとして書き留めたいと思います。


#### <INS>さっそく</INS>
Excelマクロ実行時に（個人的に）よく使用しているものから・・・

例えば下記のような、
[総務省統計局](https://www.stat.go.jp/data/guide/download/index.html)からダウンロードしたとあるファイルからデータを抽出、転記する
Excelマクロファイルがあるとして
![2023090501ed_qt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552400/ef7d50bb-d0d2-7d3f-95f4-ad1bbabb9b0a.png)
赤枠で囲ってあるのは処理の実行ボタンです。
誤ってボタンを押してしまった場合、ボタン押下後すぐにメイン処理が走ってしまうと
処理の内容によっては、その後のリカバリが面倒なことになってしまいます。
マクロファイルを使用するのが自分以外のユーザーの場合、より有り得ると思います。
***
#### <INS>イメージ</INS>
ですのでメッセージボックスを表示して誤操作を防ぎます。
今回の場合、結果のイメージはこんな感じです。
![2023090503_qt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552400/a93dcc93-23fd-d83a-974a-f202fb937596.png)
OKの場合は処理を実行、キャンセルの場合は処理を中断します。

#### <INS>つかうもの</INS>
使用するのは[MsgBox関数](https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/msgbox-function)です。
構文は下記のとおり。
```
MsgBox prompt, [ buttons, ] [ title, ] [ helpfile, context ]
```
prompt：
この第一引数[prompt]のみ必須。
メッセージボックス上で表示させたい文章部分になります。
vbcrlf等で改行が可能です。

buttons：
[prompt]で指定した文章下部のボタンについての指定です。
ボタンの種類を指定しなかった場合、既定値の「vbOKOnly」となります。
また、文章左側のアイコンもここで指定できます。

定数部分は値と対応しています。
|定数 |値 |説明 |
|:-----------|:-----------|:-----------|
| vbOKOnly   | 0|OKのみ表示|
| vbOKCancel | 1|OKとCancelを表示|
| 　　︙| ︙|　　　　︙|

（引数の設定等については[MsgBox関数(Microsoft.com)](https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/msgbox-function)にズラリと並んでいます。）


title：
メッセージボックス左上に表示する文字の指定ができます。

helpfile：
ヘルプファイルのフルパスを指定する場合に使用するそうです。
（使用したことがなく[こちら](https://jovba.com/2023/04/15/msgbox_01/#helpfile)のサイトにお世話になりました・・・）
[helpfile]の指定がある場合、[context]の指定がセットとなります。

context：
[helpfile]のファイル内の表示したい項目の数値（コンテキスト番号）を指定。

また、戻り値がある場合は引数を括弧で囲います。
```
check = MsgBox("処理を実行しますか？", vbQuestion + vbOKCancel, "確認")
```

#### <INS>サンプル</INS>
先程の実行ボタン押下後の処理ですが、
私はこんな感じでMsgBox関数を使用しています。
メッセージボックス内のどのボタンを押したかによって処理を分岐させています。
```
'----------------------------------------------------------------------
'処理：btnExec
'概要：ボタン「実行」押下時、メッセージボックスを表示
'　　　ＯＫの場合、メイン処理を実行。キャンセルの場合、処理を中断
'作成：2023/09/05 hogehoge
'----------------------------------------------------------------------
Sub btnExec()
    '変数定義
    Dim LintRet         As Integer
    Dim LstrMsgPrompt   As String
    
    'ボタン「処理実行」押下時判定
    If vbOK = MsgBox("処理を実行しますか？", vbQuestion + vbOKCancel, "確認") Then
        'ボタン「ＯＫ」押下時、関数「メイン」実行
        LintRet = fncMain(LintRet, LstrMsgPrompt)
    Else
        'ボタン「キャンセル」押下時、処理中断
        MsgBox "処理を中断します。", vbExclamation + vbOKOnly, "確認"
        Exit Sub
    End If
    
    '処理終了
    If 0 = LintRet Then
        '正常終了
        MsgBox "処理が正常終了しました。", vbInformation + vbOKOnly, "確認"
    Else
        '異常終了
        MsgBox "処理が異常終了しました。" & vbCrLf _
                & LstrMsgPrompt, _
                vbCritical + vbOKOnly, "確認"
    End If
End Sub
```
#### <INS>さいごに</INS>
最初はちょっとした備忘録のようになってしまいましたが、
今後仕事で使用するBluePrismについても発信できたらと思います。
マークダウン記法にも慣れないと・・・

エンジニアファーストの会社 [株式会社CRE-CO](https://www.cre-co.jp/)

<INS>参考サイト</INS>
・https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/msgbox-function
・https://jovba.com/2023/04/15/msgbox_01/#helpfile