Использование MsgBox без остановки приложения - PullRequest
14 голосов
/ 28 марта 2011

Мне нужно отобразить сообщение пользователю.Когда я делаю это, используя MsgBox, программа останавливается до тех пор, пока пользователь не щелкнет мышью.Я хотел бы знать, есть ли способ открыть MsgBox без остановки программы.

Ответы [ 7 ]

24 голосов
/ 28 марта 2011

Звучит так, как будто вы не ожидаете какого-либо пользовательского ввода от MsgBox.В этом случае, в зависимости от вашего приложения, StatusBar может быть адекватной заменой.

В Excel это легко:

Application.StatusBar = "Please be patient..."
Application.StatusBar = iDone & " of " & iTotal & " items done."

Чтобы очистить StatusBar, когда закончите:

Application.StatusBar = False

В Access синтаксис немного более запутан:

Temp = SysCmd(acSysCmdSetStatus, "Hey, look at me!") ' Puts out your message
Temp = SysCmd(acSysCmdClearStatus) ' Clears StatusBar
6 голосов
/ 28 марта 2011

MsgBox является модальным (это означает, что окно появляется и останавливает выполнение кода до его очистки). Как упоминали другие авторы / комментаторы, вы можете написать собственную версию всплывающего окна, которая не является модальной. Не стоит усилий, если только вам это не нужно.

6 голосов
/ 28 марта 2011

Насколько я когда-либо мог обнаружить, ответ - ты не можешь.Обходной путь - это пользовательская форма, которая служит диалоговым окном.

См. http://www.mvps.org/access/forms/frm0046.htm (не совсем ваш вопрос, но применимо).

4 голосов
/ 08 января 2015

Создайте форму вместо.Я создал небольшую форму, в которой есть только текстовое поле с надписью «Работает, пожалуйста, подождите».При необходимости я открываю форму в виде всплывающего окна (docmd openform «имя формы»), обычно перед началом какой-либо операции, выполнение которой займет некоторое время.Когда работа завершается, я закрываю форму (docmd close acform "имя формы").Это не останавливает программу, но предоставляет «Сообщение» пользователю.

3 голосов
/ 07 февраля 2015

В редакторе VB: Выберите Вставить в меню UserForm.На панели инструментов выберите TextBox: перетащите прямоугольник в пользовательской форме и введите в него текст.Щелкните правой кнопкой мыши на пользовательской форме и выберите Свойства.В свойстве ShowModal: выберите False.В вашем модуле VBA введите UserForm1.Show, где вы хотите его включить, и UserForm1.Hide, где вы хотите его отключить.UserForm1 - мое, конечно, используйте соответствующее имя для формы, которую вы создали.

1 голос
/ 29 марта 2011

Я полагаю, что сначала вам нужно оценить, действительно ли вам нужен msgbox для всплывающего окна и поддержания работы кода.

Функциональность msgbox (как уже было сказано) является модальной, и вы не можете ее «обойти».Однако вы можете создать форму (похожую на msgbox), установить эту форму как «не модальную» и вызвать код, чтобы показать эту форму.Рабочий процесс кода продолжается.Проверено и работает в Excel.

Обновление: мой доступ потерял ссылку, сейчас я не смогу ее проверить.Надеюсь, что это работает и в Access.

Rgds

1 голос
/ 29 марта 2011

Вы можете использовать метод всплывающего окна WScript. Вот полная информация, включая пример кода: http://msdn.microsoft.com/en-us/library/x83z1d9f%28v=vs.85%29.aspx

...