gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:58:18 25 4
gpt4 key购买 nike

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

最佳答案

创建 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转为 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

关于vba - 如何获取函数上动态按钮的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42129233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com