Открытие книги, но отключение макросов (Microsoft Excel)
Боб обрабатывает информацию в книге с помощью макроса. Он хотел бы, чтобы макрос открывал вторую книгу, в которой есть макрос AutoClose, но он не хочет, чтобы он запускался при закрытии второй книги.
Он ищет способ открыть вторую книгу под управлением макроса в первой книге, не включая макросы во второй книге.
Невозможно отключить макросы во второй книге при ее открытии в режиме управления макросами. (Если вы открываете его вручную, вы, очевидно, можете удерживать клавишу Shift при открытии книги, но это не помогает вашему макросу — у него нет пальцев, чтобы удерживать эту клавишу!)
Однако есть несколько обходных путей. Первый включает изменение кода, закрывающего вторую книгу, следующим образом:
Application.EnableEvents = False Workbooks("SecondBook.xls").Close Application.EnableEvents = True
Если для свойства EnableEvents установлено значение False, событие, которое должно произойти (закрытие книги), не вызовет макрос AutoClose.
Затем вы можете (и должны) установить для свойства EnableEvents значение True, чтобы события могли продолжаться позже.
Другой обходной путь — установить своего рода «флаг» в макросе AutoClose второй книги. Этот флаг может проверить, открыта ли первая книга, и, если это так, не запускать основной код в макросе AutoClose.
Для этого во вторую книгу вверху страниц модуля добавьте следующий код:
Dim AutoCloseDisabled as Boolean Sub DisableAutoClose() AutoCloseDisabled=True End Sub
Обратите внимание, что оператор объявления для переменной AutoCloseDisabled находится вне какой-либо процедуры, что означает, что он будет глобальным по области действия и доступным для всех процедур.
Затем измените макрос AutoClose так, чтобы его тело было заключено в оператор If, как показано здесь:
Sub AutoClose() 'variable declarations here If Not AutoCloseDisabled then 'body of AutoClose here End if End Sub
Идея состоит в том, что при обычном открытии второй книги переменной AutoCloseDisabled автоматически будет присвоено значение False. (Булевы переменные по умолчанию имеют значение False, когда они объявлены.) Поскольку процедура DisableAutoClose никогда не запускается в книге, оператор If в макросе AutoClose позволяет выполнить фактическое тело макроса.
Если вы откроете вторую книгу из своей первой книги, то код в вашей первой книге может вызвать макрос DisableAutoClose во второй книге, тем самым установив для флага AutoCloseDisabled значение True. Это означает, что при закрытии второй книги оператор If пропускает тело макроса AutoClose.
_Примечание: _
Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.
link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера]
.
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (3158) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:
link: / excelribbon-Opening_a_Workbook_but_Dispting_Macros [Открытие книги, но отключение макросов]
.