Страницы: 1
RSS
Привязка события к динамически созданным кнопкам на UserForm
 
Добрый день, уважаемые форумчане!
У меня вопрос, который частенько поднимался, но их решения мне не совсем подходят. У меня есть commandbutton на листе, которая считает количество строк в табличке другой вкладки, затем выводит часть информации на UserForm. На этой форме напротив каждой позиции появляются динамически созданные кнопки, но у меня никак не получается привязать к ним события. Я пытался привязать ко всем кнопкам хоть какое-то событие, хотя нужно уникальное для каждой. Может кто подскажет? Уже три дня копаю, но что-то я делаю или не так, или не то.
 
Для обработки событий динамически создаваемых контролов нужны классы. Посмотрите эту тему. Там The_Prist и пример выкладывал по TextBox-ам
Изменено: Sanja - 30.03.2015 08:08:19
Согласие есть продукт при полном непротивлении сторон
 
Спасибо! Я ее уже просматривал. Только в том примере количество textbox'ов уже оговорено, а у меня количество commandbutton - это количество непустых строк, количество которых может меняться. Как можно решить эту проблему?
 
Посмотрите пример макроса здесь:
http://excelvba.ru/code/ClassModulesForUserform
 
ИМХО. Несколько десятков динамически создаваемых кнопок с одинаковым функционалом (Печать) на одной форме мне кажется излишним. Может подход к решению задачи изменить?  
Согласие есть продукт при полном непротивлении сторон
 
Саня, Вы просто не представляете для чего мне это нужно )))) подход поменять никак, этот алгоритм я выработал за 9 лет работы, и сейчас пытаюсь совершенствоваться )) то, что я выложил это верхушка айсберга, чтобы не запутались в коде
 
Цитата
Игорь написал: Посмотрите пример макроса
Спасибо большое! Это практически мой случай, только тут 1 обработчик, а мне нужен на каждую кнопку свой, может можно как-то передать какой-то аргумент классу при  нажатии кнопки?
Изменено: Rub - 31.03.2015 13:11:09
 
Из кода
Код
msg = "Изменено состояние чекбокса номер  " & Me.Index & vbNewLine & vbNewLine

Это "какой-то аргумент классу", или нет?
 
Код
Public WithEvents Pr As MSForms.CommandButton
' модуль класса
Private Sub Pr_Click()
    MsgBox "My button was clicked!"
End Sub


В модуль общий
Код
Public dCmdbtn() As New clCmdBtn

в модуль формы в момент создания контрола
Код
ReDim Preserve dCmdbtn(i)
Set dCmdbtn(i).Pr = Pr

---------
Должно взлететь
Изменено: B.Key - 30.03.2015 20:15:43
 
да и само событие нужного контрола можно определять по любому свойству контрола

Код
Private Sub Pr_Click()
    MsgBox Me.Pr.Caption
   
End Sub
 
добавил в Ваш файл
 
B.Key, спасибо большое! Я бы сам не догадался. А почему в UserForm2  i=0 To 5? Хотя всё прекрасно работает
Код
Private Sub UserForm_Activate()
H = 30
For i = 0 To 5
Set Pr = Me.Controls.Add("Forms.CommandButton.1")
 
Цитата
Rub написал: А почему
Да просто в цикле пару кнопок добавил:)))
Не парьтесь.
Страницы: 1
Наверх