在运行时创建的命令按钮代码不起作用[Excel VBA]

时间:2017-04-10 10:10:42

标签: excel vba excel-vba class userform

我需要创建将在运行时创建的CommandButton代码。此命令按钮是动态的,因为它基于用户数据。

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

问题是,如果创建了多个按钮,则代码仅适用于创建的最后一个按钮。点击第一个和第二个按钮时,没有任何反应。

1 个答案:

答案 0 :(得分:2)

每个CommandButton都需要自己的事件过程,其中包含其名称。为了创建此过程,您需要访问VBA项目,这是非常不鼓励的,因为任何黑客都可以通过该门控制您的计算机。因此,您有两种方法来处理问题。

  1. 创建尽可能多的CommandButtons,每个CommandButtons都有自己的事件过程。隐藏您不需要的按钮,取消隐藏,然后将它们重新定位到代码现在创建它们的位置。
  2. 仅创建一个只包含一个事件过程的按钮,但为其标题或可能的标记属性指定不同的值。然后根据单击按钮时标题或标记的内容,对事件过程进行编程以执行不同的操作。