运行时创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,这是非常不鼓励的,因为任何黑客都可以通过这个门控制你的计算机。 所以你有两种方法来处理这个问题。

  1. 创build尽可能多的CommandButtons,你可能需要,每个人都有自己的事件过程。 隐藏你不需要立即需要的button,并取消隐藏,并将它们重新定位在您的代码现在创build它们的位置。
  2. 只有一个事件过程只创build一个button,但为其Caption或可能的Tag属性分配不同的值。 然后编程您的事件过程,根据单击button时的标题或标记做不同的事情。
Interesting Posts