我一直在尝试获取动态创建的按钮的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。我不想隐藏/显示按钮来解决这个问题,这将成为可以读取的项目数量的潜在限制,而且,每个项目都将永久固定
答案 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_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