如何获取函数上动态按钮的ID?

时间:2017-02-09 05:54:41

标签: vba excel-vba excel

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

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

我目前正在使用UserForm,我在这篇文章中对其进行了修改,但基本上也是如此:

Assign code to a button created dynamically

我也尝试使用Sheet上的动态按钮,但无法运行该函数,它应该运行以下内容:

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”Sub

中使用
Application.Caller

任何帮助都会非常感激,虽然我宁愿使用UserForm,因为它看起来更好

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

1 个答案:

答案 0 :(得分:0)

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

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

CheckBox es动态添加到User_FormUserForm_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