2015-05-29 1 views
0

Прежде всего я из Голландии, извините за мой плохой английский.Создание пользовательской формы с помощью 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 
+1

Возможный дубликат [Назначить код кнопке, созданной динамически с использованием VBA на Excel] (http://stackoverflow.com/questions/10224511/assign-code-to-a-button-created-dynamically-using-vba- on-excel) – USFBS

ответ

1

Assign code to a button created dynamically

выше, может помочь вам. Вам действительно нужно назначить код кнопке. Есть два способа, как это сделать в приведенной выше ссылке.

+0

@Matthijs Я использовал этот пример, чтобы помочь мне создать Userform, который делает именно то, что вы ищете. Это хороший материал – USFBS

0

Вы должны добавить код, который хотите запустить, нажав кнопку в Sub CommandButton1_Click(), где CommandButton1 является именем кнопки.

Чтобы создать этот Sub, дважды щелкните по кнопке в дизайнере формы.

Sub UserForm_Initialize() выполняется при загрузке формы.