hakeの日記

Windows環境でプログラミングの勉強をしています。

EXCEL VBAメモ - 自作のクラスにイベントを追加する

MyClassオブジェクトのメンバ変数m_dataが5以上になるとOverflowイベントを発生する。
標準モジュールではイベント処理が記述できないので、シートモジュールかユーザーフォームで記述する。

MyClass(クラスモジュール)

Private m_data As Long

' Overflowイベント追加
Public Event Overflow(ByVal sender As Object)

Private Sub Class_Initialize()
    m_data = 0
End Sub

Private Sub Class_Terminate()
    'do_anything
End Sub

Public Property Get data() As Long
    data = m_data
End Property

Public Property Let data(d As Long)
    m_data = d
    If m_data >= 5 Then RaiseEvent Overflow(Me) 'イベント発生
End Property

Public Sub Increment()
    m_data = m_data + 1
    If m_data >= 5 Then RaiseEvent Overflow(Me) ' イベント発生
End Sub

シートモジュールまたはユーザーフォーム

Private WithEvents Obj As MyClass

' ObjのOverflowイベント処理
Private Sub Obj_Overflow(ByVal sender As Object)
    MsgBox "OverFlow" & vbCrLf & _
            "Sender : " & TypeName(sender)
End Sub

Sub Sample()
    Set Obj = New MyClass
    Obj.data = 4
    Obj.Increment 'm_dataが5になりイベント発生
End Sub