【问题标题】:200 Buttons All Changing One TextBox - VBA Excel200个按钮全部改变一个文本框 - VBA Excel
【发布时间】:2017-08-02 17:52:26
【问题描述】:

我有一个带有大约 200 个按钮的 VBA Excel 应用程序。我希望他们都更改一个名为“名称”的文本框,并按下按钮的标题。我确实从图像中模糊了一些东西,因为这些盒子都是真实的人名。如何在不创建 200 多个函数的情况下做到这一点?

例如,假设我有 3 个按钮。这三个值是foo1foo2foo3。当我单击任何按钮时,假设我单击 foo2,我希望 TextBox 将值更新为 foo2。我知道如何做到这一点,但我如何做到这一点,而无需手动为所有 3 个按钮编写函数。文本框值将始终是按钮值。现在想象一下它有 200 多个按钮。

谢谢!

【问题讨论】:

    标签: vba excel button


    【解决方案1】:

    这是我的处理方法。先添加一个类模块,命名为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
    

    这将连接所有命令按钮,以便在单击时显示它们的名称。您可以将 buttonClass 中的逻辑调整得更漂亮。或者您可以调整初始化事件中的逻辑以包含在某些按钮上(扩展“如果”部分)。

    希望有帮助!

    【讨论】:

    • 我的按钮应该是一个特定的名称吗?
    • 我有两个用户表单,我只希望第二个表单上的按钮生效。
    • 你只需要给你的按钮一个特定的名字,如果你想以某种方式对它们进行子集化。当前代码会将表单上的所有命令按钮添加到单个事件中。
    • 另外,集合仅限于表单的范围。所以你应该很好。
    • 太好了,我会试试的!
    【解决方案2】:

    如果我要这样做(我不确定我是否会这样做),我将通过一个循环创建和填充每个按钮,该循环还设置一个指向一个事件处理程序的链接,该处理程序可以确定要做什么。

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

    另一种可能性是捕获另一个更高级别的事件,例如鼠标单击,然后根据该事件提供的信息确定按下了哪个按钮。

    【讨论】:

      猜你喜欢
      • 2014-01-03
      • 2017-09-03
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 2020-06-23
      • 1970-01-01
      相关资源
      最近更新 更多