运行时创build的命令button代码不起作用
我需要创build将在运行时创build的CommandButton
的代码。 这个命令button是dynamic的,因为它基于用户数据。
User_From代码
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
问题是,如果创build了多个button,代码仅适用于最后创build的button。 当第一个和第二个button点击时,什么都没有发生。
每个CommandButton都需要自己的事件过程,包括它的名字。 为了创build这个程序,你需要访问VBA-Project,这是非常不鼓励的,因为任何黑客都可以通过这个门控制你的计算机。 所以你有两种方法来处理这个问题。
- 创build尽可能多的CommandButtons,你可能需要,每个人都有自己的事件过程。 隐藏你不需要立即需要的button,并取消隐藏,并将它们重新定位在您的代码现在创build它们的位置。
- 只有一个事件过程只创build一个button,但为其Caption或可能的Tag属性分配不同的值。 然后编程您的事件过程,根据单击button时的标题或标记做不同的事情。