Удаление листов в макросе

Большинство команд Excel доступны для использования в ваших макросах при условии, что вы знаете правильные команды VBA для выполнения поставленной задачи. Вы можете использовать следующую макрос-команду для удаления активного листа:

ActiveSheet.Delete

Если вы введете команду в своем макросе, вы обнаружите, что Excel приостанавливает макрос и спросит вас, уверены ли вы, что хотите удалить рабочий лист. Когда вы нажимаете «Да», рабочий лист удаляется и макрос возобновляется.

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

Application.SendKeys («{ENTER}») ActiveSheet.Delete

SendKeys ничего не делает, кроме как записывает нажатия клавиш в буфер клавиатуры, как если бы вы набирали их с клавиатуры. Таким образом, строка SendKeys должна предшествовать строке Delete, чтобы нажатие клавиши Enter находилось в буфере до того, как оно понадобится.

Любой давний разработчик макросов может указать несколько потенциальные проблемы с использованием SendKeys, основная проблема заключается в том, что вы не можете использовать его, чтобы указать, что вы принимаете опцию Да в диалоговом окне подтверждения, и только в этом диалоговом окне. Однако маловероятно, что если в нужный момент появится другое диалоговое окно (возможно, созданное другой программой), нажатие клавиши Enter будет применено к этому диалоговому окну, а не к тому, которое вы ожидается.

Лучшее решение – отключить на короткое время функции предупреждений в Excel. Рассмотрим следующий код макроса:

Application.DisplayAlerts = FalseActiveSheet.DeleteApplication.DisplayAlerts = True

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

Важно запомнить последнюю строку кода, показанного здесь. Если вы не установите для свойства DisplayAlerts значение True, Excel больше не будет показывать предупреждающие сообщения даже после завершения макроса. Как вы понимаете, это может вызвать проблемы. Лучше всего установить для него значение False только на короткое время, когда вам нужно отключить предупреждения.

Даже если для DisplayAlerts установлено значение False, вы все равно будете видеть сообщения об ошибках, если они сгенерированы. Например, если вы выполните приведенный выше код и в книге есть только один лист, вы все равно увидите сообщение об ошибке. (Это происходит потому, что вы не можете удалить последний лист в книге.)

Источник: frestage.ru

Бытовой вопрос