Модальность диалоговых окон в Word

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

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

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

Что нужно написать в коде, чтобы диалоговые окна становились или модальными или не модальными.
Например, я запустил макрос, содержащий MsgBox. Пока я не нажму на кнопку в выскочившем диалоговом окне, то ничего не смогу делать в документе. Как сделать так, чтобы Диалоговое окно висело, но что бы я мог, например, текст вводить, или перемещаться по документу.
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Надо использовать не встроенный MsgBox, а создать форму, которая внешне выглядит как MsgBox.

Или использовать API-функцию MessageBox, которая может отображать немодальное сообщение:

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

Private Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" ( _
     ByVal hwnd As Long, _
     ByVal lpText As String, _
     ByVal lpCaption As String, _
     ByVal wType As Long) As Long
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

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

EducatedFool

то есть к встроенным диалоговым окнам, например, vbOKCancel, нельзя применить модальность?

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

то есть к встроенным диалоговым окнам, например, vbOKCancel, нельзя применить модальность?
Нет, нельзя.
Читаем справку по MsgBox:
vbApplicationModal 0
Application modal; the user must respond to the message box before continuing work in the current application.

vbSystemModal 4096
System modal; all applications are suspended until the user responds to the message box.
Как видишь, немодального режима здесь нет (есть только 2 вида модальных).
На самом ли деле макросы будут медленнее выполняться, если использовать свои диалоговые окна, а не встроенные?
Не скорость макросов это почти не влияет.
По крайней мере, ты не заметишь разницы в скорости.
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Ответить