【问题标题】:How to get the ID of a dynamic button on a function?如何获取函数上动态按钮的 ID?
【发布时间】:2017-02-09 05:54:40
【问题描述】:

我一直在尝试获取在单击任何动态按钮时调用的函数上动态创建的按钮的 ID。

该程序非常简单,是冰淇淋店的结账,按钮从工作表上的产品列表中获取它们的值,我唯一需要的是获取按钮的名称以获取索引位于哪个位置,所以我可以读取产品属性(例如价格)

我目前正在使用一个用户表单,我从这篇文章中修改了它,但基本上是一样的:

Assign code to a button created dynamically

我也尝试在工作表上使用动态按钮,但无法运行该功能,它应该运行以下内容:

Set btn = Sheet1.Buttons.Add(t.Left, t.Top, t.Width, t.Height)
With btn
    .OnAction = "Button_Click"
    .Caption = Product(idx)
    .Name = Product(idx) & " " & i
End With

而且我很确定这将在“Button_Click”子中起作用

Application.Caller

任何帮助将不胜感激,虽然我宁愿使用用户窗体,因为它看起来更好

PS。我不想隐藏/显示按钮来解决这个问题,这将成为可以读取的项目数量的潜在限制,而且,每个项目都会被永久固定

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    CheckBox 创建一个名为"cCheckBox"Class 模块并使用以下代码。

    cCheckBox 类模块代码

    Option Explicit
    
    Public WithEvents CheckBoxEvents As MSForms.CheckBox
    
    Private Sub CheckBoxEvents_click()
    
        Dim CbIndex As Long
    
        CbIndex = CInt(Mid(CheckBoxEvents.Name, 3)) ' get the CheckBox Index pressed
        MsgBox "CheckBox Index selected is " & CbIndex ' display in a msgbox
    
    End Sub
    

    CheckBoxes 动态添加到User_Form(在UserForm_Initialize 事件中)的代码是:

    Option Explicit
    
    ' ===== Variables and Objects decleration section ===== 
    Dim TchkBox                          As MSForms.CheckBox
    Dim CheckBoxArray()                  As New cCheckBox
    
    
    Private Sub UserForm_Initialize()
    
    Dim i As Long
    
    For i = 1 To 5 ' create 5 dynamic Check Boxes in User_Form
        Set TchkBox = Me.Controls.Add("Forms.CheckBox.1", "Cb" & i, True) ' create a checkbox in user_form
    
        With TchkBox ' modify checkbox size and placement
            .Width = 180
            .Height = 18
            .Left = 40
            .Top = 54 + 24 * i
    
            ReDim Preserve CheckBoxArray(0 To i) ' add another CheckBox to array
            Set CheckBoxArray(i).CheckBoxEvents = TchkBox
        End With
    Next i
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      相关资源
      最近更新 更多