Прежде всего я из Голландии, извините за мой плохой английский.Создание пользовательской формы с помощью vba, commandbutton не работает
У меня есть листы с большим количеством записей (от 10 до 1000, в зависимости от пользователя). Моя идея состояла в том, чтобы динамически создать пользовательскую форму, в которой создается строка текстовых полей для каждой записи. Затем я хочу сделать команду на запись для изменения данных в записях. Наконец, я добавляю код в пользовательскую форму для определения действий, выполняемых при щелчке по команде.
Текстовые поля и командная кнопка видны, когда отображается пользовательская форма, но ничего не происходит, когда я нажимаю кнопку Commandbutton, несмотря на то, что код создается в пользовательской форме.
У меня есть пример файла, но я не знаю, как его загрузить.
Под ним код (находится под UserForm)
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
Возможный дубликат [Назначить код кнопке, созданной динамически с использованием VBA на Excel] (http://stackoverflow.com/questions/10224511/assign-code-to-a-button-created-dynamically-using-vba- on-excel) – USFBS