Трюк №4. Запрещение ненужных сообщений в Excel

Болтливость Excel может, в конце концов, надоесть — он постоянно просит подтвердить, что вам действительно нужно то действие, которое вы только что попросили выполнить. Давайте прекратим разговоры и призовем Excel к делу. Мы говорим о таких сообщениях, как, например, вопрос, хотите ли вы включить макросы (когда у вас ни одного макроса нет) или же уверены ли вы, что хотите удалить лист. Далее рассказывается, как раз и навсегда избавиться от большинства часто появляющихся сообщений.

Включение макросов, когда у вас их нет

Excel демонстрирует прекрасную память, когда дело доходит до запоминания факта, что вы записали в книге макрос. К сожалению, он не забывает об этом, даже если вы уже удалили все макросы командой Сервис → Макрос → Макросы (Tools → Macro → Macros) или сочетанием клавиш Alt/Option+F8. Откройте рабочую книгу заново и вы снова увидите приглашение включить макросы, даже если их уже не осталось.
[stextbox id=»warning»]Приглашение включить макросы появляется, только если выбран средний уровень безопасности. При низком уровне безопасности макросы будут включаться без вывода предупреждения. На высоком уровне безопасности для максимальной защиты макросы автоматически выключаются.[/stextbox]
Когда вы записываете макрос, Excel вставляет модуль Visual Basic, содержащий ваши команды и пользовательские функции. При открытии рабочей книги Excel проверяет наличие таких модулей, пустых или заполненных макросами. При удалении макроса из рабочей книги удаляется только код внутри модуля, но не сам модуль — как если бы, выпив остатки молока, вы поставили пустую коробку обратно в холодильник, который вы купили в интернет-магазине бытовой техники. Чтобы избежать ненужных приглашений включить макросы, необходимо удалить модуль. Вот как это делается.

Откройте VBE командой Сервис → Макрос → Редактор Visual Basic (Tools → Macro → Visual Basic Editor) или сочетанием клавиш Alt/Option+Fll и выберите команду View → Project Explorer. (Ha Macintosh окно Projects открыто всегда, поэтому Project Explorer открывать не нужно.).

Найдите в Project Explorer свою рабочую книгу и щелкните значок плюс (+) слева от нее, чтобы развернуть компоненты книги, в частности, модули. Щелкните значок плюс слева от папки Modules, чтобы увидеть все существующие модули. Правой кнопкой мыши по очереди щелкайте все модули и в контекстном меню выбирайте команду Remove Module. Откажитесь от экспорта модулей. Не удаляйте модули, не подумав. Перед удалением по очереди дважды щелкайте все модули, чтобы убедиться, что они действительно не нужны. Как обычно, чтобы вернуться обратно в Excel, нажмите сочетание клавиш Att/Apple+Q.

Приглашение сохранить несуществующие изменения

Вы могли заметить, что иногда, когда вы просто открываете рабочую книгу и просматриваете ее, Excel выдает приглашение сохранить изменения в вашей личной книге макрокоманд, хотя вы не вносили никаких изменений. Знаете вы это или нет, в вашей личной книге макрокоманд, вероятно, есть пересчитываемая функция.

Личная книга макросов (personal macro workbook) — это скрытая рабочая книга, созданная, когда вы впервые записывали макрос, и открывающаяся каждый раз вместе с Excel. Пересчитываемая функция (volatile function) (или формула) — это функция, которая автоматически пересчитывается, когда вы практически ничего не делаете в Excel, например, просто открываете или закрываете рабочую книгу или все приложение. Две самые распространенные пересчитываемые функции — это TodayQ и Now().

Так, хотя вручную в рабочей книге вы ничего не изменили, эти пересчитываемые функции, выполняющиеся в фоновом режиме, могли все же внести какие-то изменения. Это считается допустимым и вызывает появление приглашения Excel сохранить подобные невидимые изменения. Если вы хотите, чтобы Excel прекратил требовать сохранять изменения, которые вы не делали, это можно сделать двумя способами. Самый очевидный — не хранить пересчитываемые функции в личной книге макрокоманд и удалить уже записанные туда. Или, если они все же нужны, можно применить следующий простой фрагмент кода из листинга 1.7, чтобы обойти проверку, заставив Excel думать, что ваша личная книга макрокоманд была сохранена в момент открытия.

1
2
3
4
// Листинг 1.7
Private Sub workbook_0pen( )
	Me.Saved = True
End Sub

Этот код должен находиться в частном модуле вашей личной книги макрокоманд. Чтобы открыть его, из любой рабочей книги выберите команду Окно → Отобразить (Window → Unhide), затем в диалоговом окне Вывод на экран скрытого окна книги (Unhide Workbook) выберите книгу Personal.xls и щелкните на кнопке ОК. Откройте редактор VBE и введите предыдущий код. Закончив, нажмите сочетание клавиш Alt/Apple+Q, чтобы вернуться в Excel.

Конечно, если у вас есть переменная функция, которая должна пересчитываться, и вы хотите сохранить изменения, необходимо сказать об этом Excel явно, при помощи кода из листинга 1.8.

1
2
3
4
// Листинг 1.8
Private Sub workbook_0pen( )
	Me.Save
End Sub

Этот макрос будет автоматически сохранять вашу личную книгу макрокоманд при каждом ее открытии.

Запрещение предупреждений и приглашений Excel для записанных макросов

Один из многих недостатков записанных макросов заключается в том, что, хотя они довольно хорошо имитируют практически любую команду, они обычно забывают ваши ответы на приглашения. Удалите рабочий лист и увидите просьбу подтвердить команду; запустите макрос, делающий то же самое, и также увидите приглашение. Давайте выключим эти приглашения.

Выберите команду Сервис → Макрос → Макросы (Tools → Macro → Macros) (Alt/Option+F8), чтобы вывести список ваших макросов. Удостоверьтесь, что в списке Находится в (Macros In) выбран пункт Все открытые книги (All Open Workbooks). Выберите нужный макрос и щелкните кнопку Изменить (Edit). Поместите курсор перед первой строкой кода, то есть перед первой строкой, в начале которой не стоит апостроф, и введите следующую строку:

1
Application.DisplayAlerts = False

В самом конце кода добавьте следующую строку:

1
Application.DisplayAlerts = True

Теперь ваш макрос должен выглядеть так, как это показано в листинге 1.9.

1
2
3
4
5
6
7
8
// Листинг 1.9
Sub МуМасго()
' макрос МуМасrо
' удаляет активный рабочий лист
	Application.DisplayAlerts = False
	ActiveSheet.Delete
	Application.DisplayAlerts = True
End Sub

Обратите внимание, что в конце макроса вы снова включили вывод сообщений, чтобы во время работы в Excel выводились стандартные сообщения и приглашения Excel. Если этого не делать, то вы не увидите вообще никаких сообщений, даже тех, которые бывают весьма полезны.
[stextbox id=»alert»]Если выполнение вашего макроса по какой-то причине не завершится, например, из-за ошибки выполнения, Excel может никогда не добраться до строки кода, включающей предупреждения. В этом случае, вероятно, будет полезно закрыть и заново запустить Excel, чтобы вернуться к нормальному состоянию дел.[/stextbox]
Теперь вы знаете, как работать в Excel, не натыкаясь на предупреждения и приглашения. Однако помните, что для создания этих сообщений существовали определенные причины. Удостоверьтесь, что вы полностью понимаете назначение сообщения, перед тем как отключить его.

Top