Использование одной пользовательской формы несколькими макросами

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

Вот у меня на пользовательской форме 2 кнопки.
Я вызываю эту форму с помощью макроса. Может ли находится обработчик событий для этих кнопок в самом макросе, а не в коде формы?
То есть как в MsgBox: появляется диалоговое окно и выполнение макроса прекращается, пока я не нажму кнопку.
И если это можно, то можно ещё ключевых слов или ссылки на ресурсы, где не просто про формы написано, а вот что-то связанное с тем, что я хочу.
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Всё очень просто:

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

[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]
Пример:

Изображение
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

EducatedFool

Я хочу использовать немодальные диалоговые окна. Я так понимаю, что если диалоговое окно немодальное, то после его появления, если в макросе есть ещё команды, то они будут выполняться до End Sub, независимо от того, закрыли мы немодальное диалоговое окно или нет. Можно ли остановить этот поток?
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Вот пример с немодальной формой:

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

[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]
Изображение
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Аватара пользователя
Busine2009
Сообщения: 322
Зарегистрирован: 18 июл 2009, 15:34
Контактная информация:

Всё работает. А вот это зачем?

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

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