スポンサーリンク

複雑な処理、イベントで整理できるって知ってました?

スポンサーリンク
Access
スポンサーリンク

こんにちは、なかぜんです。Access VBAでフォームやボタンの処理がどんどん増えて、「あれ、どこに何書いたっけ?」と迷子になること、ありませんか?

業務が複雑になると、どうしてもコードが「一枚岩」になってしまいがち。でも、そんな時に便利なのが「イベント駆動設計」という考え方です。

今回は、Access VBAでも実践できるイベント駆動設計の手法と、具体的な整理テクニックを解説します。

スポンサーリンク

イベント駆動設計とは?

イベント駆動設計とは、簡単に言えば「ある出来事(イベント)が起きた時だけ、特定の処理を行う」という設計手法です。フォームのボタンクリックや更新イベントなどに処理を分離し、処理を部品化(モジュール化)していくイメージですね。

従来の「手続き型」の課題

  • 1つのボタンに大量の処理が書かれ、読みにくい
  • 処理を再利用しにくい
  • 影響範囲が見えず、修正が怖い

イベント駆動設計のメリット

  • 処理が分離されていて読みやすい
  • 共通処理はモジュールに切り出せる
  • 再利用・テストがしやすくなる

実際のコード例:イベント→処理を振り分ける

以下は「受注ステータスを変更するボタン」を例に、イベント駆動設計でスリム化したコード例です。

' フォームのボタンイベント
Private Sub btnStatusUpdate_Click()
    Call HandleEvent("UPDATE_STATUS")
End Sub

' イベントハンドラ
Private Sub HandleEvent(ByVal eventType As String)
    Select Case eventType
        Case "UPDATE_STATUS"
            Call mod_OrderLogic.UpdateOrderStatus(Me.txtOrderID.Value)
        Case "CANCEL_ORDER"
            Call mod_OrderLogic.CancelOrder(Me.txtOrderID.Value)
    End Select
End Sub

解説:

  • btnStatusUpdate_Click はただのトリガーです。
  • 実際の処理は mod_OrderLogic モジュールに委任しています。
  • イベントの種類を文字列で分岐することで、拡張性も高くなります。

注意点・よくあるミス

1. イベント名のタイポ

イベント名を文字列で指定する場合、タイプミスに注意が必要です。定数化やEnumでの管理がおすすめです。

Enum AppEvent
    UPDATE_STATUS = 1
    CANCEL_ORDER = 2
End Enum

2. モジュールの分けすぎで逆に見づらくなる

処理を分離しすぎると、今度は「どこで何をしているのかわからない」問題も起きます。基本は「画面単位 or 業務単位」でまとめましょう。

3. イベントが多すぎて分岐が肥大化

イベント名が多くなりすぎたら、ディスパッチ(分配)処理を別クラスまたは辞書オブジェクトで整理するのも手です。

応用ポイント:動的なイベント登録

実はAccess VBAでも、コントロールに動的にイベント処理をバインドすることが可能です(WithEvents+クラスを活用)。

' Classモジュール: clsButtonWrapper
Public WithEvents btn As Access.CommandButton

Private Sub btn_Click()
    MsgBox "ボタンがクリックされました!"
End Sub

このように、クラスを使ってイベントを抽象化することで、より柔軟なUI処理設計も可能です。

まとめ:イベント駆動設計で見通しのよいVBAへ

今回は、Access VBAでも実践できる「イベント駆動設計」の基礎と応用についてご紹介しました。

  • イベントごとに処理を分離して整理
  • 再利用性や保守性の向上
  • 将来的な拡張にも強い

最初はちょっとだけ手間が増えたように感じるかもしれませんが、メンテナンス性や業務の複雑化に対応するには、非常に効果的な設計アプローチです。