运行时创建的命令按钮代码无效[Excel VBA]
我需要为将在运行时创建的运行时创建的命令按钮代码无效[Excel VBA],vba,excel,class,userform,Vba,Excel,Class,Userform,我需要为将在运行时创建的CommandButton创建代码。此命令按钮是动态的,因为它基于用户数据 来自代码的用户\u 类模块代码 问题是,如果创建了多个按钮,则代码仅适用于最后创建的按钮。单击第一个和第二个按钮时,什么也没有发生。每个CommandButton都需要包含其名称的自己的事件过程。为了创建此过程,您需要访问VBA项目,这是非常不鼓励的,因为任何黑客都可以通过该门控制您的计算机。因此,你有两种方法来处理这个问题 创建尽可能多的命令按钮,每个按钮都有自己的事件过程。隐藏不需要的按钮,取
CommandButton
创建代码。此命令按钮是动态的,因为它基于用户数据
来自代码的用户\u
类模块代码
问题是,如果创建了多个按钮,则代码仅适用于最后创建的按钮。单击第一个和第二个按钮时,什么也没有发生。每个CommandButton都需要包含其名称的自己的事件过程。为了创建此过程,您需要访问VBA项目,这是非常不鼓励的,因为任何黑客都可以通过该门控制您的计算机。因此,你有两种方法来处理这个问题
每个CommandButton都需要包含其名称的自己的事件过程。为了创建此过程,您需要访问VBA项目,这是非常不鼓励的,因为任何黑客都可以通过该门控制您的计算机。因此,你有两种方法来处理这个问题
RevCounter
在哪里声明、填充,调用时它的值是多少?类的名称是什么?在类中
代码中,您需要在顶部添加Public with events CmdEvents As MSForms.CommandButton
,然后在子中,您需要使用Dim ctlttxt As MSForms来定义它。CommandButton
@MarkFitzgerald RevCounter在另一个模块中声明为Public。调用时的值是修订的总数available@ShaiRado艾尔·雷迪宣布。对不起,我没有把它包括在问题中。已经更改了ctlTXT,但没有任何效果。您应该将对象添加到循环内的数组中,而不是在它之后。在哪里声明、填充了RevCounter
,调用时它的值是多少?类的名称是什么?在类中
代码中,您需要在顶部添加Public with events CmdEvents As MSForms.CommandButton
,然后在子中,您需要使用Dim ctlttxt As MSForms来定义它。CommandButton
@MarkFitzgerald RevCounter在另一个模块中声明为Public。调用时的值是修订的总数available@ShaiRado艾尔·雷迪宣布。对不起,我没有把它包括在问题中。已经更改了ctlTXT,但没有任何效果。您应该将对象添加到循环中的数组中,而不是之后。感谢您提供的解决方案。遵循第一个选项会很复杂,因为我不知道应该创建多少,因为这取决于用户。现在开始工作了。谢谢你的解决方案。遵循第一个选项会很复杂,因为我不知道应该创建多少,因为这取决于用户。现在开始工作了。
Private Sub UserForm_Activate()
Dim ctlTXT As Control
For RevNo = 1 To RevCounter
Set ctlTXT = Me.Controls.Add("Forms.CommandButton.1")
ctlTXT.name = RevNo
ctlTXT.Caption = Sheet4.Range("D" & RevNo + 4).value
ctlTXT.Left = 18
ctlTXT.Height = 18: ctlTXT.Width = 72
ctlTXT.Top = 15 + ((RevNo - 1) * 25)
Next
Me.Height = (RevNo * 17) + 50
ReDim Preserve cmdArray(1 To RevNo)
Set cmdArray(RevNo).CmdEvents = ctlTXT
Set ctlTXT = Nothing
End Sub
Private Sub CmdEvents_Click()
Dim i As Integer
i = CmdEvents.name
RevisionFormPrevious.LblResponsible.Caption = Sheet4.Range("C" & i +4).value
RevisionFormPrevious.LblEdition.Caption = Sheet4.Range("D" & i + 4).value
RevisionFormPrevious.LblTelNo.Caption = Sheet4.Range("E" & i + 4).value
RevisionFormPrevious.LblFeatures.Caption = Sheet4.Range("D" & i + 4).value
RevisionFormPrevious.Features.value = Sheet4.Range("F" & i + 4).value
Load RevisionFormPrevious
RevisionFormPrevious.Show
End Sub