VBA许多按钮指向相同的_Click子

PKe*_*eno 2 excel vba

我在表单上有一堆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()潜艇?

Sim*_*wen 5

如果您可以使用表单控件而不是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)