我在表单上有一堆TextBox-Button对.单击按钮时,我想将文本框的值插入数据库.名称TextBoxes和Buttons遵循命名标准,例如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
Run Code Online (Sandbox Code Playgroud)
但我找不到将Button的Click事件指向与标准不同的子的方法Name_Click().
任何人都知道这方面的方法,这不涉及我写50左右不同的Name_Click()潜艇?
如果您可以使用表单控件而不是ActiveX,因为看起来好像您可能正在使用它,那么Chris的解决方案似乎很好.
但是,如果您需要ActiveX CommandButtons,那么您将无法(因为VBA编译器将告诉您"过程声明不匹配...")在click事件的回调中具有参数,并且您无法从多个对象,虽然你当然知道哪个按钮引发了事件(因为关系是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
Run Code Online (Sandbox Code Playgroud)
每个按钮需要一个存根,所以一些复制和粘贴开始,但随后很容易维护,因为所有_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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19354 次 |
| 最近记录: |