让我们看看是否有人知道如何解决此问题:
我有一个包含多个元素的表单:其中一些是称为A1,A2,A3,A4 ...的文本框。
现在,它们的AfterUpdate子过程非常长,但彼此几乎不相似:A1_AfterUpdate,A2_AfterUpdate,A3_AfterUpdate ...等...非常相似,但它们更改的文本框名称相同。
我的想法是在这样定义的子过程中收集所有相等的对象:
Private Sub Update(Box As String, Menu As Boolean)
If Menu=True{
Me!Box.Text = "This is the text that is going to change"
}
End Sub
因此,我唯一要做的就是以这种方式调用它,例如:
Update(A1, True)
但是它似乎不起作用。关于如何实现这一目标的任何想法吗?
答案 0 :(得分:2)
添加一个类模块-我将其称为clsTextBoxEvents
。
将此代码添加到类中:
Public WithEvents txt As Access.TextBox
Private Sub txt_AfterUpdate()
MsgBox txt.Name & " has been updated."
End Sub
在您的表单模块中添加以下代码:
Public MyTextBoxes As New Collection
Private Sub Form_Open(Cancel As Integer)
Dim ctl As Control
Dim txtBoxEvent As clsTextBoxEvents
For Each ctl In Me.Controls
If TypeName(ctl) = "TextBox" Then
Set txtBoxEvent = New clsTextBoxEvents
Set txtBoxEvent.txt = ctl
txtBoxEvent.txt.AfterUpdate = "[Event Procedure]"
MyTextBoxes.Add txtBoxEvent
End If
Next ctl
End Sub
MyTextBoxes
声明必须位于模块的顶部。
这仅将AfterUpdate
事件添加到表单上的所有文本框。您可能需要对该名称进行一些调整,以使其具有名称中包含特定文本的文本框,或位于表单中特定框架中的控件。
答案 1 :(得分:0)
如果您使用函数而不是子函数:
Private Function UpdateCtl(Menu As Boolean)
If Menu Then
activecontrol = "This is the text that is going to change"
End If
End Sub
然后您可以直接从控件的AfterUpdate属性中调用它:=UpdateCtl(True)
。
简单快捷