用vba制作用户表单,commandbutton不起作用

首先,我来自荷兰,对我英语不好,感到抱歉。

我有一个有很多logging(从10到1000,取决于用户)的Excel表格。 我的想法是dynamic地创build一个用户窗体,每个logging创build一行文本框。 然后我想为每个logging创build一个命令button来更改logging中的数据。 最后,我添加了一些代码给用户表单来定义单击commandbutton时执行的操作。

文本框和命令button在用户窗体显示时是可见的,但是当我点击命令button时,什么都不会发生,尽pipe代码是在用户窗体上创build的。

我有一个示例文件,但我不知道如何在这里上传。

下面是代码(放置在用户窗体下)

Private Sub UserForm_Initialize() Dim cCntrl As Control Dim txtB1 As Control Dim cmb1 As Control 'Deleting lines doesn't work yet 'With ThisWorkbook.VBProject.VBComponents("EFRIS").CodeModule 'x = .countoflines 'y = Sheets("Data").Range("A3").Value 'If x > y Then .DeleteLines y, x - y 'x = .countoflines 'End With ' 'Sheets("data").Range("A3") = x 'locatie van de userform in het midden van het scherm plaatsen 'breedte van de userform aanpassen aan de breedte van het scherm 'hoogte van de userform aanpassen aan de hoogte van het scherm a = Application.Width b = Application.Height EFRIS.Left = 5 EFRIS.Width = a - 25 EFRIS.Height = b - 50 'e = de .left van de eerste tekstbox e = 100 'f = het aantal records in de sheet ("FRIS") f = Sheets("FRIS").Range("B10000").End(xlUp).Row - 2 'a is de loop in rijen For a = 1 To f 'b = de loop in kolommen For b = 1 To 8 If b = 1 Then c = "a" If b = 2 Then c = "b" If b = 3 Then c = "c" If b = 4 Then c = "d" If b = 5 Then c = "e" If b = 6 Then c = "f" If b = 7 Then c = "g" If b = 8 Then c = "h" 'If b = 9 Then c = "i" 'If b = 10 Then c = "j" 'breedte per textbox If b = 1 Then d = 30 If b = 2 Then d = 100 If b = 3 Then d = 100 If b = 4 Then d = 130 If b = 5 Then d = 150 If b = 6 Then d = 150 If b = 7 Then d = 150 If b = 8 Then d = 50 'If b = 9 Then d = 100 'If b = 10 Then d = 30 Set txtB1 = Controls.Add("Forms.TextBox.1", "TB" & a & b, True) With txtB1 .Height = 20 .Width = d .Left = e .Top = 5 + (a * 20) .Value = Sheets("FRIS").Range("A2").Offset(a, b) .Locked = True End With '.left van de textbox e = e + d Next 'E resetten naar 100 e = 100 Set cmb1 = Controls.Add("Forms.CommandButton.1") With cmb1 .Caption = "Wijzigen" .Height = 20 .Width = 90 .Left = 5 .Top = 5 + (a * 20) End With With ThisWorkbook.VBProject.VBComponents("EFRIS").CodeModule x = .countoflines Sheets("Data").Range("A3") = x '.InsertLines x + 1, "Private Sub " & cmb1.Name & "_Click()" '.InsertLines x + 2, "AStart.show" '.InsertLines x + 3, "Unload Me" '.InsertLines x + 4, "End Sub" End With 'g bepaald de totale hoogte van de userform voor de scrollbar g = 20 + a * 20 Next EFRIS.ScrollBars = fmScrollBarsVertical EFRIS.ScrollTop = 0 EFRIS.ScrollHeight = g EFRIS.Show End Sub 

将代码分配给dynamic创build的button

以上可能会帮助你。 您需要将代码实际分配给button。 在上面的链接中有两种方法可以做到这一点。

单击Sub CommandButton1_Click()中的button时,必须添加要运行的代码,其中CommandButton1是button名称。

要创build这个Sub,双击表单devise器中的button。

子窗体加载时执行Sub UserForm_Initialize()。