Как добавить события к Средствам управления, созданным во времени выполнения в Excel с VBA

Я хотел бы добавить Управление и связанное событие во времени выполнения в 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
15
задан Fred FLECHE 4 July 2013 в 14:25
поделиться

2 ответа

Попробуйте следующее:

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.

5
ответ дан 1 December 2019 в 01:53
поделиться

Я считаю, что код нужно добавлять в пользовательскую форму, а не в саму кнопку.

Что-то вроде

With UserForm1.CodeModule
  'Insert code here
End With

Вместо вашего With ThisWorkbook

1
ответ дан 1 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: