ExcelVBAでメッセージを管理するには標準モジュールかクラスモジュールか検討

ExcelVBAメッセージ管理を標準モジュールを選択する理由

ExcelVBAでメッセージを管理するには標準モジュールかクラスモジュールか検討

こんにちは!大阪住之江区に会社がある縁紡ぐです。ExcelやACCESSなど業務効率化のお困りごとの相談をお受けしていますので、お気軽にお問い合わせください。

Excel VBAを使用している際に、エラーメッセージやユーザーへの通知メッセージなどを管理する必要が出てくることがよくあります。メッセージの管理方法として、今回は標準モジュールとクラスモジュールのどちらを使用するかについて検討し、その結果を共有したいと思います。

目次

結論:標準モジュールで実装

検討結果として、メッセージの管理は、標準モジュールでの実装がよいと判断しました。

  • インスタンス化の手間を省く
  • メッセージ管理に適している

これが理由です。

ただし、処理もクラスモジュールですべて管理しているのであれば、クラスモジュールでの実装もありだと思います。実際、クラスモジュールでビジネスロジック部分を開発するときは、クラスモジュールで実装することもあります。

JavaのようなDIコンテナが使えたらインスタンス化の手間もかからないのですが…まぁ、ないものは仕方ないですよね。

クラスで実装した場合

コードを見ると手間が分かりやすいと思います。

ApplicationMessageクラス

Option Explicit

'入力値のエラーメッセージ
Private Const COUNT_INPUT_MESSAGE As String = "〇の数を入力してください" 
'Getメソッド
Public Property Get getCountInputMessage() As String
    getCountInputMessage = COUNT_INPUT_MESSAGE 
End Property

メッセージクラスを利用する時

Sub test()

    '変数の宣言
    Dim toCount As Variant
    '定数メッセージクラスをインスタンス化
    Dim constMessage As ApplicationMessage
    Set constMessage = New ApplicationMessage
        
    toCount = Application.InputBox( _
                            prompt:=constMessage.getCountInputMessage, _
                            Default:=1, _
                            Type:=1)
    
End Sub

実際に利用するときに、インスタンス化をしてGetメソッドで取得する必要がでてきます。まぁ、クラスでもっている変数をPrivateにしなければ、メソッドは必要ないですが、隠蔽しないならあまりクラスで用意する必要がないということで。。。

標準モジュールでの実装

Messageモジュールを作成する。

Public Const COUNT_INPUT_MESSAGE   As String = "〇の数を入力してください"

メッセージを利用する時

Sub test()

    '変数の宣言
    Dim toCount As Variant

        
    toCount = Application.InputBox( _
                            prompt:=Message.MSG_COUNT_INPUT, _
                            Default:=1, _
                            Type:=1)
    
End Sub

インスタンス化も必要がないですし、Publicで宣言しているので「モジュール名+プロパティ名」で、値を参照することができます。この場合「Message.MSG_COUNT_INPUT」です。

インスタンス化の手間を省く

VBAではDIコンテナのような技術はありません。なので、クラスモジュールを使用する場合、メッセージを管理するたびに新たにインスタンスを生成する必要があります。多くのメッセージを扱う場合において、毎回インスタンス化することは、開発の効率を低下させる可能性があります。

標準モジュールではこのようなインスタンス化が不要であり、よりスムーズに開発を進めることができます。

メッセージの管理に適している

VBAの場合、定数の宣言は、Constで行います。Constで宣言した変数に、再代入することはできません。なので、勝手に変数を書き換えられることもありません。

なので、メッセージを変に書き換えされ、それが表示されてしまった💦ということも、考えにくいです。

そして、メッセージは通常、アプリケーション全体で一貫して使用されるのが普通ですよね。標準モジュールでは、これらのメッセージを一箇所に集約して管理することができ、プログラムの可読性や保守性を向上させてくれると思います。また、定数は上書きされることがないため、誤ってメッセージが変更されるリスクを回避することが可能です。

結論

VBAで開発する場合、クラスですべて作成するなどのプロジェクトでの制約がない場合は、標準モジュールでの実装が工数の削減ができ、管理上も問題ないと思います。

なので、わたしとしては、

ExcelVBAでは、メッセージは標準モジュールで実装がオススメ

という結論になりました。

もし迷っている方がいらっしゃって、少しでも参考になれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次