Страницы: 1
RSS
VBA: программно отключить выполнение макроса
 
Добрый день! Подскажите плиз.
МегаМакрос перебирает файлы эксель (xlsm) и одним из действий сохраняет его под другим именем. В перебираемых файлах есть МикроМакрос запускаемый по условию - вызов действия "сохранить как" и соответственно перехватывает выполнение МегаМакроса и портит мне весь кайф.
Как мне при открытии файла с МикроМакросом отключить его выполнение выполнение или удалить (он там больше не нужен)?
Спасибо
во так не работает почемуто

Код
Workbooks.Open FolderPath & sFiles
        Workbooks(sFiles).RunAutoMacros xlAutoDeactivate 

.
Изменено: jfd - 10.12.2013 17:05:31
 
В начало мегамакроса
Код
application.enableevents=false
и не забудьте в конце включить назад.
 
Спасибо. Все заработало как надо
 
офф - интересно, где Вы берёте эти
RunAutoMacros xlAutoDeactivate  :)

Хотя на MSDN всё есть... Но на форумах я их не видел :)
Изменено: Hugo - 10.12.2013 18:06:04
 
Тут такой момент....RunAutoMacros это больше пережиток старых версий и оставлен для совместимости. Т.к. макросы Auto_Open и Auto_Close не срабатывают при программном открытии/закрытии книг(то же самое и auto_Activate/Deactivate). И чтобы можно было их запустить при программном открытии книг и создан данный метод.
На данный момент Microsoft пишет, что предпочтительнее использовать события книги, а не автопроцедуры. Поэтому, возможно, на форуме их встретить сложно - практически не применяются(если бы все использовали автопроцедуры вместо Workbook_Open(и иже с ними) - уверен, встречали бы часто).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Hugo
вобщемто да, в гугле есть все и ссылки на MSDN тоже )
 
тогда еще дополняющий вопрос по Workbook.Open. А можно открыть книгу с макросами  (xlsm) как книгу эксель (xls*)?
 
Она так и откроется. Вопрос непонятен...
 
фигню спросил. вопрос фактически отсылает к первоначальному вопросу  и поиску несуществующего параметра Workbook.Open типа RunMacro:= False
ps. хотя могли бы и сделать )
 
Итак. Если Вы открываете программно книгу и в ней прописана автопроцедура Auto_Open - она не выполнится. Если откроете руками - выполнится.
Если открываете программно книгу, в которой в модуле книги записано Workbbok_Open, то событие будет выполнено в любом случае. Если только перед открытием программно Вы не отключите выполнение событий:
Код
Application.EnableEvents = False
Workbook.Open
Не забудьте после выполнения кода вернуть в исходное положение:
Код
Application.EnableEvents = True
Так что замечание "могли бы и сделать" несправедливо - сделано давно :-)

И не забудьте у себя удалить строку:
Код
Workbooks(sFiles).RunAutoMacros xlAutoDeactivate

Т.к. она как раз и запускает событийную процедуру.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Т.е. Вам хотелось бы открыть книгу xlsm с отключёнными макросами. А если открыть, сохранить Как xlsx, и продолжать работать с этой копией?
 
The_Prist теперь понятно. спасибо за разъяснения.
 
Юрий М такое приходило в голову, но это усложняет макрос. кроме того возникает порочный круг: чтобы сохранить книгу xlsm как xls надо отключить выполнение макроса (поскольку в ней есть Workbook_BeforeSave). а отключив макрос исчезает необходимость пересохранять книгу в xls  :D
 
Дима дал нормальное объяснение, а я говорил не про сохранение в формате xls (макросы останутся), а про сохранение в обычную книгу (xlsx) - там макросы не живут.
 
The_Prist, спасибо!
Улыбнись.
Страницы: 1
Читают тему
Наверх