【问题标题】:Unique code for several CommandButtons in UserForm用户窗体中多个命令按钮的唯一代码
【发布时间】:2021-12-05 06:44:08
【问题描述】:

我正在尝试获取用户窗体中几个命令按钮的标题。我知道如何获取一个命令按钮的标题,但我不想复制粘贴所有命令按钮的代码,例如

Sub CommandButton1_Click()
CodeXYZ
End Sub

Sub CommandButton2_Click()
CodeXYZ
End Sub

....

有没有可能做类似的东西

Sub Master_CommandButton_Click()
ActiveSheet.Range("A1").Value = Master_CommandButton.Caption 

End Sub

编辑: 我正在从表中动态加载标题(取决于行和列)。如果单击其中一个命令按钮,则单击按钮的标题将写入单元格。

Private Sub UserForm_Initialize()
CommandButton1.Caption = ThisWorkbook.ActiveSheet.Range("B2").Value
CommandButton2.Caption = ThisWorkbook.ActiveSheet.Range("C2").Value
CommandButton3.Caption = ThisWorkbook.ActiveSheet.Range("D2").Value
CommandButton4.Caption = ThisWorkbook.ActiveSheet.Range("E2").Value
CommandButton5.Caption = ThisWorkbook.ActiveSheet.Range("F2").Value
End Sub

Private Sub CommandButton1_Click()
ThisWorkbook.ActiveSheet.Cells(5, 5).Value = CommandButton1.Caption
End Sub

我知道需要的不是定义每个按钮本身。我想将一个主代码交给所有按钮。

【问题讨论】:

  • 不太清楚您想要完成什么...您是否希望将宏分配/分配给每个按钮Click 事件,并且此宏可以识别单击的那个?如果是这样,Master_CommandButton 应该是什么?它是您未在问题中向我们展示的按钮的示例吗?如果没有,请更好地描述您想要完成的内容。
  • @FaneDuru 欢迎回复。我更新了我的问题。

标签: excel vba


【解决方案1】:

您可以使用类模块来处理表单上所有命令按钮的点击事件。

这是一种方法。

创建一个名为CCmdBtns 的类模块并将此代码添加到其中。

Option Explicit

Public WithEvents CmdGroup As MSForms.CommandButton

Private Sub CmdGroup_Click()
    ThisWorkbook.ActiveSheet.Cells(5, 5).Value = CmdGroup.Caption
End Sub

在标准模块中添加此代码。

Option Explicit

Public CmdButtons() As New CCmdBtns

现在您可以在用户表单模块中添加此代码。

Option Explicit

Private Sub UserForm_Initialize()
Dim ctl As MSForms.Control
Dim cnt As Long
    
    For Each ctl In Me.Controls
        If TypeName(ctl) = "CommandButton" Then
            cnt = cnt + 1
            ctl.Tag = ctl.BackColor
            ReDim Preserve CmdButtons(1 To cnt)
            Set CmdButtons(cnt).CmdGroup = ctl
        End If
    Next ctl
    
End Sub

现在,当您单击用户窗体上的任何命令按钮时,它的标题将被写入活动工作表上的 E5。

请注意,您可以使用循环来简化设置字幕的代码。

Dim idx As Long

    For idx = 1 To 5
        Me.Controls("CommandButton" & idx).Caption = ThisWorkbook.ActiveSheet.Cells(2, idx + 1).Value        
    Next idx

【讨论】:

  • 谢谢。它正在工作。但我有理解它的问题。你为什么要写Public CmdButtons() As New CCmdBtns 到一个模块。你知道课堂上好的文学作品吗?我想学习它:D
  • 我会尝试找到一个好的链接并发布它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多