我有一个带有大约200个按钮的VBA Excel应用程序。我希望他们都改变一个名为" Name"的文本框。按下按钮的标题。我确实模糊了图像中的一些东西,因为这些盒子都是真正的人名。如何在不创建200多个功能的情况下完成此操作?
一个例子是让我说我有3个按钮。这三个值为foo1
,foo2
和foo3
。当我点击任何按钮时,请说我点击foo2
,我希望TextBox将值更新为foo2
。我知道如何做到这一点,但我怎么做,而不必手动编写所有3个按钮的功能。文本框值始终为按钮值。现在想象它是200多个按钮。
谢谢!
答案 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>
如果每个按钮都是手动创建的并且已经存在,那么我认为您需要手动更新它们。
另一种可能性是捕捉另一个更高级别的事件,例如鼠标点击,然后从该事件提供的信息中找出按下了哪个按钮。