Показать сообщение отдельно
Старый Добавлено: 01.10.2008, 14:14
  (#3)
MDmitryS
Наблюдающий
Пользователь
 
Аватар для MDmitryS

По умолчанию

В книге "Проффесиональное программиронвиае на 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

"
MDmitryS вне форума Отправить личное сообщение для MDmitryS
Вверх
Ответить с цитированием
Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение:
izrukvruki (04.04.2011)
 
Время генерации страницы 0.10365 секунды с 12 запросами