Трюк №86. Отображение сообщения «Please Wait»

Вы встречались с макросами, которые, казалось, никогда не закончатся? Если такая проблема возникает с вашим макросом, можно сделать так, чтобы во время работы макроса выводилось сообщение «Please Wait».

Большинство пользователей ожидает, что код будет выполняться и завершаться практически мгновенно. К сожалению, так бывает не всегда. Записанные макросы особенно часто выполняются намного дольше, чем правильно написанный код VBA. Хуже того, код VBA в Excel в целом выполняется медленнее, чем большинство других видов кода.

К счастью, можно написать еще немного кода и создать сообщение «Please Wait», чтобы пользователи знали, что код выполняется и Excel не завис во время работы макроса. К сожалению, один из наиболее популярных способов сообщить пользователям, что код выполняется, — использовать индикатор хода выполнения Excel.

В этом случае возникают две проблемы. Во-первых, индикатор хода выполнения может еще более замедлить ваш код, ухудшая ситуацию. Во-вторых, возможно, медленная работа кода вызвана циклом, а использовать утилиту записи макроса для создания цикла невозможно.

Мы предпочитаем код VBA, например, следующий макрос Dolt, который использует прямоугольник с панели инструментов Рисование (Drawing). Код его приведен в листинге 7.10.

1
2
3
4
5
6
7
8
9
10
// Листинг 7.10
Sub DoIt()
Application.ScreenUpdating = True
	With Sheetl.Shapes("Rectangle1")
		.Visible = msoTrue = (Not Sheet1.Shapes("Rectangle1") .Visible)
End With
//Переключение листов заставляет отображаться Rectangle1 во время выполнения кода
Sheet2.Select
Sheetl.Select
End Sub

Чтобы воспользоваться этим кодом, вставьте прямоугольник с панели инструментов Рисование (Drawing) на любой лист нужной рабочей книги. Не снимая выделения прямоугольника, щелкните поле Имя (Name) и введите имя прямоугольника — Rectangle1 (если ему еще не присвоено такое имя).

Введите текст, который должен отображаться во время выполнения кода, и отформатируйте, переместите и измените размер прямоугольника. Введите предыдущий макрос Dolt в стандартный модуль вашей рабочей книги. Если нужно, замените Sheet1 в коде на кодовое имя листа, на который вы поместили Rectangle1. Подробнее о кодовых именах — в разделе «Трюк № 83. Использование кодовых имен для ссылки на листы в рабочих книгах Excel».

Теперь выберите команду Разработчик → Макросы (Developer → Macros) и запустите макрос Dolt. Он полностью скроет Rectangle1. В самом начале медленно выполняющегося кода поместите код из листинга 7.11.

1
2
3
// Листинг 7.11
Run "Dolt"
Application.ScreenUpdating = False

Благодаря строке Application.ScreenUpdating = False экран перестанет мерцать, и скорость выполнения макроса увеличится. В конце этого кода поместите строку Run «Dolt». Затем запустите макрос, как обычно.

Top