gpt4 book ai didi

excel - VBA许多按钮指向同一个_Click sub

转载 作者:行者123 更新时间:2023-12-03 00:36:07 27 4
gpt4 key购买 nike

我的表单上有一堆文本框按钮对。单击按钮时,我想将文本框的值插入数据库。名称“文本框”和“按钮”遵循命名标准,例如 Value1Tb - Value1Cmd 和 Value2Tb - Value2Cmd。

我的问题是,因为我想对每个按钮做同样的事情,所以我希望能够编写一个像这样的子:

Private Sub AnyButton_Click(sender As CommandButton)
Dim tb As TextBox
Set tb = GetTBByName(s.Name)
PutValueToDatabase(s.Name,tb.Text)
End Sub

但是我找不到一种方法将按钮的 Click 事件指向与标准 Name_Click() 不同的子控件。

有谁知道解决这个问题的方法,而不需要我编写 50 个左右不同的 Name_Click() 子程序吗?

最佳答案

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

每个按钮都需要一个 stub ,因此首先需要进行一些复制和粘贴,但随后易于维护等等,因为所有 _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

关于excel - VBA许多按钮指向同一个_Click sub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4860724/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com