Страница 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
Всё работает. А вот это зачем?

Код: Выделить всё

НазваниеНажатойКнопки = ""