Страницы: 1
RSS
Отследить нажатие программно созданной кнопки
 
Здравствуйте! В форме программно пытаюсь создать кнопку. Кнопка создается, но не могу отследить ее нажатие. В строке With Me.CodeModule выдает ошибку: метод или элемент данных не определен. Прошу помощи в решении возникшей проблемы.
Код
Private Sub UserForm_Initialize()
   With Me.Controls.Add(bstrProgID:="Forms.CommandButton.1")
         .Name = "CommandButton1"
         .Left = 190
         .Top = 20
         .Height = 24
         .Width = 78
         .Caption = "Отменить"
    End With
    
    With Me.CodeModule
        Line = .CountOfLines
        .InsertLines Line + 1, "Sub CommandButton1_Click()"
        .InsertLines Line + 2, "НажатиеКнопки1"
        .InsertLines Line + 3, "End Sub"
    End With
End Sub

Sub НажатиеКнопки1 ()
    MsgBox "Кнопка нажата"
    UserForm5.Hide
End Sub
 
http://stackoverflow.com/questions/10224511/assign-code-to-a-button-created-dynamically-using-vba-on-excel
 
Спасибо, pharmaprofi, за доходчивый пример - все получилось.
 
А с какой целью создаёте себе проблему (программное добавление кнопки)? Почему её нельзя просто нарисовать?
 
Нарисовать кнопки можно, но хотелось создать программно. С кнопками проблем не возникло, т.к. их всего две и у них нужно отследить только click. В примере, предложенном pharmaprofi, в модуле класса вставил:
Код
Private Sub CmdEvents_Click()
    If CmdEvents.Name = "CommandButton1" Then Call ...
    If CmdEvents.Name = "CommandButton2" Then Unload UserForm5
End Sub

С чекбоксами немного сложнее. Их количество зависит от исходных данных. Создал их в цикле по аналогии с кнопками. В Private Sub CheckEvents_Click() через CheckEvents.Name и CheckEvents.Value сделал запись значений в массив размерностью по количеству чекбоксов. И вот тут-то у меня имеется вопрос: можно ли возвратить значения чекбоксов без использования их событий? UserForm5.CheckBox1.Value и Me.CheckBox1.Value - не проходят.
 
Перебрать их циклом и опросить значение.
 
Проверьте вариант:
Код
Private Sub CommandButton1_Click()
Dim x As Control
    For Each x In Me.Controls
        If TypeOf x Is MSForms.CheckBox Then
            MsgBox x.Name & " = " & x.Value
        End If
    Next
End Sub
 
Уважаемый Юрий М, большое спасибо! В вашем варианте изменил Me.Controls на UserForm5.Controls, т.к. с Me vba ругается, что не определен метод или элемент данных.
 
У меня на реальной форме не ругался))
Страницы: 1
Читают тему
Наверх