Я хотел бы добавить Управление и связанное событие во времени выполнения в Excel с помощью VBA, но я не знаю, как добавить события.
Я попробовал код ниже, и Кнопка правильно создается в моей userform, но связанное событие щелчка, которое должно отобразить приветственное сообщение, не работает.
Любой совет/исправление приветствовался бы.
Dim Butn As CommandButton
Set Butn = UserForm1.Controls.Add("Forms.CommandButton.1")
With Butn
.Name = "CommandButton1"
.Caption = "Click me to get the Hello Message"
.Width = 100
.Top = 10
End With
With ThisWorkbook.VBProject.VBComponents("UserForm1.CommandButton1").CodeModule
Line = .CountOfLines
.InsertLines Line + 1, "Sub CommandButton1_Click()"
.InsertLines Line + 2, "MsgBox ""Hello!"""
.InsertLines Line + 3, "End Sub"
End With
UserForm1.Show
Попробуйте следующее:
Sub AddButtonAndShow()
Dim Butn As CommandButton
Dim Line As Long
Dim objForm As Object
Set objForm = ThisWorkbook.VBProject.VBComponents("UserForm1")
Set Butn = objForm.Designer.Controls.Add("Forms.CommandButton.1")
With Butn
.Name = "CommandButton1"
.Caption = "Click me to get the Hello Message"
.Width = 100
.Top = 10
End With
With objForm.CodeModule
Line = .CountOfLines
.InsertLines Line + 1, "Sub CommandButton1_Click()"
.InsertLines Line + 2, "MsgBox ""Hello!"""
.InsertLines Line + 3, "End Sub"
End With
VBA.UserForms.Add(objForm.Name).Show
End Sub
Это навсегда изменит UserForm1 (при условии, что вы сохраните свою рабочую книгу). Если вам нужна временная форма пользователя, то добавьте новую форму пользователя, а не устанавливайте ее в UserForm1. После этого вы можете удалить форму, когда закончите с ней.
Чип Пирсон имеет отличную информацию о кодировании VBE.
Я считаю, что код нужно добавлять в пользовательскую форму, а не в саму кнопку.
Что-то вроде
With UserForm1.CodeModule
'Insert code here
End With
Вместо вашего With ThisWorkbook