我的表单上有一堆文本框按钮对。单击按钮时,我想将文本框的值插入数据库。名称“文本框”和“按钮”遵循命名标准,例如 Value1Tb - Value1Cmd 和 Value2Tb - Value2Cmd。
我的问题是,因为我想对每个按钮执行相同的操作,所以我希望能够编写一个 Sub,如下所示:
Private Sub AnyButton_Click(sender As CommandButton)
Dim tb As TextBox
Set tb = GetTBByName(s.Name)
PutValueToDatabase(s.Name,tb.Text)
End Sub
但我找不到一种方法将按钮的单击事件指向与标准不同的子事件Name_Click()
.
任何人都知道解决这个问题的方法,这并不需要我写 50 种左右不同的东西Name_Click()
subs?
如果您可以使用表单控件而不是 ActiveX(看起来您现在可能就是这样),那么 Chris 的解决方案似乎不错。
但是,如果您需要 ActiveX CommandButtons,那么您无法(因为 VBA 编译器会告诉您,“过程声明不匹配...”)在单击事件的回调中包含参数,并且您无法从多个对象,尽管您当然知道哪个按钮引发了事件(因为关系是 1 CommandButton = 1 Sub)。
所以......我会选择类似的东西:
Private Sub Value1Cmd_Click()
Call TheMethod(Value1Cmd)
End Sub
Private Sub Value2Cmd_Click()
Call TheMethod(Value2Cmd)
End Sub
Private Sub TheRealMethod(sender As CommandButton)
' Do your thing '
Dim tb As TextBox
Set tb = GetTBByName(s.Name)
PutValueToDatabase(s.Name,tb.Text)
' Etcetera... '
End Sub
每个按钮都需要一个存根,因此首先需要进行一些复制和粘贴,但随后易于维护等等,因为所有 _Click 事件回调都指向相同的方法...
编辑:
例如。
Sub AutoWriteTheStubs()
Dim theStubs As String
Dim i As Long
For i = 1 To 10
theStubs = theStubs & "Private Sub Value" & CStr(i) & "Cmd_Click()" & vbCrLf _
& " Call TheMethod(Value" & CStr(i) & "Cmd)" & vbCrLf _
& "End Sub" & vbCrLf & vbCrLf
Next i
Debug.Print theStubs
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)