В книге "Проффесиональное программиронвиае на VBA в EXcel 2003" (Автор Джон Уокенбах) описано "Несклько кнопок с одной процедурой обработки событий"
Там написано следующее:
"... В данном разделе описывается способ, который поможет обойти это ограничение. Будет использован МОДУЛЬ КЛАССА с целью создания нового класса.
1. Создайте пользовательское диалоговое окно и добавьте в него несколько элементов управления CommandButton (например 16 кнопок и одно кнопка ОК). Предположим, что диалоговое окно называется UserForm1.
2. Вставьте в проект модуль класса (для этого необходимо выбрать команду Insert->Class Module), назовите его BtnClass и введите следующий код. Вам следует модифицировать процедуру ButtonGroup_Click.
Public WithEvents ButtonGroup As MsForms.CommandButton
Private Sub ButtonGroup_Click()
Msg = "Вы щелкнули на " & ButtonGroup.Name & vbCrLf
Msg = Msg & "Название " & ButtonGroup.Caption & vbCrLf
Msg = Msg & "Расстояние слевуа: " & ButtonGroup.Left & vbCrLf
Msgbox Msg, vbInformation, ButtonGroup.Name
End Sub
3. Вставьте обычные модуль VBA и введите приведенный ниже код. Эта процедура используется для отображения диалогового окна UserForm.
Sub ShowDialog()
UserForm1.Show
End Sub
4. В модуле кода диалогового окна UserForm введите следующий код:
Dim Buttons() As New BtnClass
Private Sub UserForm_Initialize()
Dim ButtonCount As Integer
Dim ctl As Control
' Создание объектов Button
ButtonCount=0
For Each ctl In UserForm1.Controls
If TypeName(ctl) = "CommandButton" Then
If ctl.Name <> "OKButton" Then 'Пропуск OKButton
ButtonCount=ButtonCount+1
RemDim Preserve Buttons (1 To ButtonCount)
Set Buttons(ButtonCount).ButtonGroup=ctl
End If
End If
Next ctl
End Sub
Данная процедура будет запускаться при возникновении события Initialize для диалогового окна UserForm. Обратите внимание, что и в коде исключается "реакция" на кнопку с названием OKButtonю Таким образом, щелчок на кнопке OKButton не приведет к вызову процедуры ButtonGroup_Click.
После выполнения этих инстукций можно запустить процедуру ShowDialog, чтобы отобразить диалоговое окно UserForm. Щелчок на одной из кнопок CommandButton (кроме кнопки ОК) приведет к появлению процедуры ButtonGroup_Click.
Данную методику можно легко адаптировать для работы и с другими элементами управления. Необходимо изменить имя типа в объявлении Public WithEvents. например, если вместо элементов управления CommandButton используются элементы управления OptionButton, то воспользуйтесь следующим оператором объявления объектовю
Public WithEvents ButtonGroup As MsForms.OptionButton
"
|