Страница 1 из 1
Использование одной пользовательской формы несколькими макросами
Добавлено: 06 окт 2009, 14:16
Busine2009
Вот у меня на пользовательской форме 2 кнопки.
Я вызываю эту форму с помощью макроса. Может ли находится обработчик событий для этих кнопок в самом макросе, а не в коде формы?
То есть как в MsgBox: появляется диалоговое окно и выполнение макроса прекращается, пока я не нажму кнопку.
И если это можно, то можно ещё ключевых слов или ссылки на ресурсы, где не просто про формы написано, а вот что-то связанное с тем, что я хочу.
Re: Использование одной пользовательской формы несколькими макросами
Добавлено: 06 окт 2009, 16:26
EducatedFool
Всё очень просто:
Код: Выделить всё
[color=darkblue]Public[/color] НазваниеНажатойКнопки [color=darkblue]As[/color] [color=darkblue]String[/color]
[color=darkblue]Sub[/color] ЗапускФормы()
UserForm1.Show
[color=darkblue]Select[/color] [color=darkblue]Case[/color] НазваниеНажатойКнопки
[color=darkblue]Case[/color] "CommandButton1", "CommandButton4": MsgBox "Нажата кнопка 1 или 4"
[color=darkblue]Case[/color] "CommandButton2": MsgBox "Нажата кнопка 2"
[color=darkblue]Case[/color] "CommandButton3": MsgBox "Нажата кнопка 3"
[color=darkblue]End[/color] [color=darkblue]Select[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Код: Выделить всё
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] CommandButton1_Click()
НазваниеНажатойКнопки = Me.CommandButton1.Caption: Me.Hide
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] CommandButton2_Click()
НазваниеНажатойКнопки = Me.CommandButton2.Caption: Me.Hide
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] CommandButton3_Click()
НазваниеНажатойКнопки = Me.CommandButton3.Caption: Me.Hide
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
[color=darkblue]Private[/color] [color=darkblue]Sub[/color] CommandButton4_Click()
НазваниеНажатойКнопки = Me.CommandButton4.Caption: Me.Hide
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Пример:

Re: Использование одной пользовательской формы несколькими макросами
Добавлено: 06 окт 2009, 17:37
Busine2009
EducatedFool
Я хочу использовать немодальные диалоговые окна. Я так понимаю, что если диалоговое окно немодальное, то после его появления, если в макросе есть ещё команды, то они будут выполняться до End Sub, независимо от того, закрыли мы немодальное диалоговое окно или нет. Можно ли остановить этот поток?
Re: Использование одной пользовательской формы несколькими макросами
Добавлено: 06 окт 2009, 18:29
EducatedFool
Вот пример с немодальной формой:
Код: Выделить всё
[color=darkblue]Public[/color] НазваниеНажатойКнопки [color=darkblue]As[/color] [color=darkblue]String[/color]
[color=darkblue]Sub[/color] ЗапускФормы()
НазваниеНажатойКнопки = ""
UserForm1.Show
[B][color=darkblue]While[/color] UserForm1.Visible: DoEvents: [color=darkblue]Wend[/color][/B]
[color=darkblue]Select[/color] [color=darkblue]Case[/color] НазваниеНажатойКнопки
[color=darkblue]Case[/color] "CommandButton1", "CommandButton4": MsgBox "Нажата кнопка 1 или 4"
[color=darkblue]Case[/color] "CommandButton2": MsgBox "Нажата кнопка 2"
[color=darkblue]Case[/color] "CommandButton3": MsgBox "Нажата кнопка 3"
[color=darkblue]Case[/color] Else: MsgBox "Ошибка", vbCritical
[color=darkblue]End[/color] [color=darkblue]Select[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color]

Re: Использование одной пользовательской формы несколькими макросами
Добавлено: 06 окт 2009, 18:55
Busine2009
Всё работает. А вот это зачем?