200个button全部更改一个文本框 – VBA Excel

我有一个约200个button的VBA Excel应用程序。 我希望他们都改变一个名为“Name”的文本框,并按下button的标题。 我确实模糊了图像中的一些东西,因为这些框都是真实的人名。 我怎样才能做到这一点,而不必创build200多个function?

一个例子就是我有3个button。 这三个值是foo1foo2foo3 。 当我点击任何button,让我们说我点击foo2 ,我想要文本框更新值为foo2 。 我知道如何做到这一点,但我怎么做,而不必手动编写一个function的所有3个button。 文本框的值将始终是button的值。 现在想象它是200+button。

谢谢!

在这里输入图像说明

这是我如何接近它。 首先添加一个类模块并将其称为buttonClass

 Option Explicit Public WithEvents aCommandButton As msforms.CommandButton Private Sub aCommandButton_Click() MsgBox aCommandButton.Name & " was clicked" End Sub 

然后在您的用户表单启动事件中,使用类似于以下的代码:

 Dim myButtons() As buttonClass Private Sub UserForm_Initialize() Dim ctl As Object, pointer As Long ReDim myButtons(1 To Me.Controls.Count) For Each ctl In Me.Controls If TypeName(ctl) = "CommandButton" Then pointer = pointer + 1 Set myButtons(pointer) = New buttonClass Set myButtons(pointer).aCommandButton = ctl End If Next ctl ReDim Preserve myButtons(1 To pointer) End Sub 

这将连接你所有的命令button,点击显示他们的名字。 你可以调整buttonClass中的逻辑来发烧。 或者你可以调整initialize事件中的逻辑来包含在某些button上(展开“If”部分)。

希望有所帮助!

如果我要做到这一点(我不知道我会这样做),我会通过一个循环来创build和填充每个button,循环也会build立一个链接到一个事件处理程序,它可以确定要做什么。

如果每个button是手动创build并已经存在,那么我认为你需要手动更新它们。

另一种可能性是捕获另一个更高级别的事件,例如鼠标点击,然后从该事件提供的信息中找出哪个button被按下。