Jim*_*ket 5 events ms-access vba class commandbutton
我正在尝试创建一个类来处理 Access 中的多个控制事件。这是为了避免重复键入多行相同的代码。
我已遵循下一页上的答案,但进行了一些调整以使其适合 Access 而不是 Excel。
我的班级代码如下:
Option Compare Database
Public WithEvents ct As Access.CommandButton 'Changed object type to something recognised by Access
Public Sub ct_Click()
MsgBox ct.Name & " clicked!"
End Sub
Run Code Online (Sandbox Code Playgroud)
我的表单代码如下:
Option Compare Database
Private listenerCollection As New Collection
Private Sub Form_Load()
Dim ctItem
Dim listener As clListener
For Each ctItem In Me.Controls
If ctItem.ControlType = acCommandButton Then 'Changed to test whether control is a Command Button
Set listener = New clListener
Set listener.ct = ctItem
listenerCollection.Add listener
End If
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
我已在注释中指出我对(工作)Excel 代码进行了更改。我认为问题出在类中的对象声明上。注意:在此过程中不会引发任何错误;它根本不会触发该事件。
提前致谢!
编辑:
此后,我将问题范围缩小到“单击”事件中没有“[事件过程]”。如果我手动添加它,该类将按预期工作。显然,我不想手动添加这些 - 它会破坏对象。有什么想法我该怎么做吗?
在您的 OnLoad 事件中,您可以添加此行
Dim ctItem
Dim listener As clListener
For Each ctItem In Me.Controls
If ctItem.ControlType = acCommandButton Then 'Changed to test whether control is a Command Button
Set listener = New clListener
Set listener.ct = ctItem
listener.ct.OnClick = "[Event Procedure]" '<------- Assigned the event handler
listenerCollection.Add listener
End If
Next
Run Code Online (Sandbox Code Playgroud)
尽管我不确定这是否比双击设计器中的 OnClick 并粘贴方法调用的代码更多还是更少。无论如何,这很酷。
编辑: 你可以这样改变你的班级
Public WithEvents ct As Access.CommandButton 'Changed object type to something recognised by Access
Public Function AddControl(ctrl as Access.CommandButton) as Access.CommandButton
set ct = ctrl
ct.OnClick = "[Event Procedure]"
Set AddControl = ct
End Function
Public Sub ct_Click()
MsgBox ct.Name & " clicked!"
End Sub
Run Code Online (Sandbox Code Playgroud)
然后在你的表单中你可以添加一个像这样的ct
For Each ctItem In Me.Controls
If ctItem.ControlType = acCommandButton Then 'Changed to test whether control is a Command Button
Set listener = New clListener
listener.AddControl ctItem
listenerCollection.Add listener
End If
Next
Run Code Online (Sandbox Code Playgroud)
现在事件处理程序已添加到类中。
| 归档时间: |
|
| 查看次数: |
12635 次 |
| 最近记录: |