200个按钮全部更改一个TextBox - VBA Excel

时间:2017-08-02 17:52:27

标签: excel vba excel-vba button

我有一个带有大约200个按钮的VBA Excel应用程序。我希望他们都改变一个名为" Name"的文本框。按下按钮的标题。我确实模糊了图像中的一些东西,因为这些盒子都是真正的人名。如何在不创建200多个功能的情况下完成此操作?

一个例子是让我说我​​有3个按钮。这三个值为foo1foo2foo3。当我点击任何按钮时,请说我点击foo2,我希望TextBox将值更新为foo2。我知道如何做到这一点,但我怎么做,而不必手动编写所有3个按钮的功能。文本框值始终为按钮值。现在想象它是200多个按钮。

谢谢!

enter image description here

2 个答案:

答案 0 :(得分:3)

以下是我接近它的方法。首先添加一个类模块并将其命名为buttonClass

Option Explicit

    Public WithEvents aCommandButton As msforms.CommandButton

    Private Sub aCommandButton_Click()
         MsgBox aCommandButton.Name & " was clicked"
    End Sub

然后在您的userform启动事件中,使用类似于:

的代码
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

这将连接所有命令按钮,以便在单击时显示其名称。你可以调整buttonClass中的逻辑来发现它。或者您可以调整initialize事件中的逻辑以包含在某些按钮上(在“If”部分上展开)。

希望有所帮助!

答案 1 :(得分:0)

如果我要这样做(我不确定我会这样做),我会通过一个循环创建并填充每个按钮,这也设置一个链接到一个事件处理程序,可以决定该怎么做。 / p>

如果每个按钮都是手动创建的并且已经存在,那么我认为您需要手动更新它们。

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