VBA - 在用户窗体上添加按钮:如何添加其操作

问题描述 投票:0回答:1

在 Excel 中,我在运行时在用户窗体上添加按钮。如何添加这些按钮操作以调用带参数的子/函数?

这是我目前添加按钮的方式,它不接受我添加的“OnAction”

Dim MyR As Range, MyB As MSForms.Control

For i = 2 To ActiveSheet.UsedRange.Rows.Count
    If (Len(ActiveSheet.Cells(i, 1).Value) > 0) Then
        
        Set MyR = Range(ActiveSheet.Cells(i, 1), ActiveSheet.Cells(i, 1))
        Set MyB = UserForm1.Controls.Add("Forms.CommandButton.1")
        
        With MyB
            .Name = i
            .Left = 50
            .Top = 25 * i
    
            .Caption = "Caption text"
            
            .OnAction = "SomeFunction"
            .Parameter = i
        End With
        
    End If
Next i

上面的代码在 .OnAction 上失败,我找不到如何在这里以编程方式添加一个操作,每个按钮的参数都不同?

excel vba runtime userform
1个回答
0
投票

看看这里:Assign on-click VBA function to a dynamically created button on Excel Userform

你会发现 @598Bubblehead 提供了一个很好解释的例子。不同之处在于您要传递参数。我建议使用自定义按钮的

Tag
属性。

您需要做的就是:

  • 添加类模块并命名

    MyCustomButton

    Public WithEvents btn As MSForms.CommandButton
    Public frm As UserForm
    
    Dim iCount As Long
    
    Private Sub btn_Click()
    
      MsgBox "Parameter is: '" & btn.Tag & "'", vbInformation, "Welcome!"
    
    End Sub
    
  • 然后使用下面的代码:

     Option Explicit
    
     Sub DoSomething()
       Dim MyB As MSForms.Control
       Dim btnEvent As MyCustomButton
    
      Set MyB = UserForm1.Controls.Add("Forms.CommandButton.1")
       With MyB
          .Name = "DynamicButton"
          .Caption = "Click me!"
          .Left = 10
          .Top = 10
          .Width = 75
          .Height = 32
          .Tag = "Hello from VBA!"
       End With
    
    
      Set btnEvent = New MyCustomButton
      Set btnEvent.btn = MyB
      Set btnEvent.frm = UserForm1
    
      UserForm1.Show
    
    End Sub
    
© www.soinside.com 2019 - 2024. All rights reserved.