首页 > 解决方案 > 访问 vba 包装类处理事件

问题描述

我正在尝试编写一个用于获取事件的包装类。这是一个不起作用(编辑:不显示消息框)简单示例:错误在哪里?

' CLASSE1
Private WithEvents frm As Access.Form
Private Const Evented As String = "[Event Procedure]"
Public Sub Init(pFrm As Access.Form)
    Set frm = pFrm
    frm.OnLoad = Evented
End Sub
Private Sub frm_Load()
    MsgBox "OK!" 'NOT SHOW
End Sub

'Form1
Private SL As Classe1
Private Sub Form_Load()
    Set SL = New Classe1
    SL.Init Me
End Sub

标签: vbams-access

解决方案


您混淆了表单加载。这有效:

第一类

Option Compare Database
Option Explicit

Private WithEvents frm As Access.Form
Private Const Evented As String = "[Event Procedure]"

Public Sub Initialize(pFrm As Access.Form)
    Set frm = pFrm
    frm.OnCurrent = Evented
End Sub

Public Sub Terminate()
    Set frm = Nothing
End Sub

Private Sub frm_Current()
    MsgBox "OK"
End Sub

表格1

Option Compare Database
Option Explicit

Private FormCollection   As Collection

Private Sub Form_Load()

    Dim EventProcedure  As Class1
    
    Set EventProcedure = New Class1
    Set FormCollection = New Collection

    EventProcedure.Initialize Me.Form
    FormCollection.Add EventProcedure, Me.Name

    Set EventProcedure = Nothing
    
End Sub

Private Sub Form_Unload(Cancel As Integer)

    ' Unload events for all colour value textboxes.
    
    Dim EventProcedure  As Class1
    
    For Each EventProcedure In FormCollection
        EventProcedure.Terminate
    Next
    
    Set EventProcedure = Nothing
    Set FormCollection = Nothing

End Sub

推荐阅读