После закрытия эксель макрос не работает
Не так давно очередной раз столкнулся с ошибками приложения Excel при попытке включения макросов после открытия файлов .xlsm. Вспомнил, что подобные проблемы преследуют пользователей довольно давно, но чаще всего они наблюдались с Excel 2013 и Excel 2016. Характерные особенности этой группы ошибок следующие:
- Приложение Excel закрывается при открытии файла с макросами (при включенном режиме безопасности Включить все макросы );
- Ошибка приложения Excel возникает при попытке включить содержимое (нажатии соответствующей кнопки);
- Ошибка приложения Excel возникает при сохранении файла с макросами;
Ну и по горячим следам очередного инцидента, дабы не откладывать на потом, решил для себя собрать небольшой хаб по ошибкам приложения Excel с последующей модификацией, дабы опять не терять время на поиск информации в Сети и на составление облака причин.
Суть в том, что в процессе открытия файла xlsm, и при отключенных макросах, в верхней части основного окна (над таблицей), высвечивается строка уведомления: ПРЕДУПРЕЖДЕНИЕ СИСТЕМЫ БЕЗОПАСНОСТИ Запуск макросов отключен , с кнопкой включения содержимого (макросов). Как только пользователь её нажимает, Excel попросту аварийно завершается (падает) с ошибкой Программа Microsoft Excel не работает и характерным окном уведомления:
При этом было замечено, что непосредственно перед возникновением ошибки приложения Excel никаких системных обновлений и обновлений пакета Office не устанавливалось. Возможно, каким-то образом задействованы последние обновления на Office, но прямой связи я не заметил, а подробного исследования проблемы не проводил. При этом зависимости от версии операционной системы (мною лично сбои наблюдались на Windows 10 LTSC и Windows 7 Professional) так же выявлено не было. При анализе аварийного дампа приложения ( *.hdmp ) обычно можно увидеть подобную информацию исключения (вывод урезан):
ExceptionAddress : 00007ff86a1e05ac ( VBE 7+ 0x00000000001405ac ) ERROR_CODE : ( NTSTATUS ) 0xc0000005 - < Unable to get error code text > EXCEPTION_CODE : ( NTSTATUS ) 0xc0000005 - < Unable to get error code text >обычно это NTSTATUS с кодом c0000005 - Access violation, доступ запрещен. И чаще всего в дампе можно увидеть такой вот стек потока (вывод оптимизирован для улучшения представления):
000000b9 ` 1acfdd00 000001d3 ` 2fb24e90 : 000001d3 ` 5a0e0ef0 00000000 ` 00000000 : VBE 7+ 0x1405ac 000000b9 ` 1acfdd08 000001d3 ` 24c1fe20 : 00000000 ` 00000000 000001d3 ` 2fda9640 : 0x000001d3 ` 2fb24e90 000000b9 ` 1acfdd10 000001d3 ` 6cf35760 : 000001d3 ` 2fda9640 000001d3 ` 045c9b30 : 0x000001d3 ` 24c1fe20 000000b9 ` 1acfdd18 000001d3 ` 5a0e0ef0 : 000001d3 ` 045c9b30 000001d3 ` 2fcbb2b0 : 0x000001d3 ` 6cf35760 000000b9 ` 1acfdd20 00000000 ` 00000000 : 000001d3 ` 2fcbb2b0 000001d3 ` 2fcbb318 : 0x000001d3 ` 5a0e0ef0из которого единственное что понятно, так это то, что падение Excel происходит в недрах функций библиотеки vbe7.dll (среда исполнения VBA), подгруженной в адресное пространство процесса. Это указывает на проблемы с обработчиком VBA-скриптов, в контексте Excel чаще именуемых макросами.
НЕРЕШЕННОЕ: при отладке приложений из комплекта MS Office, вы не увидите имен функций в стеке вызовов, поскольку отсутствуют отладочные символы как к основным исполняемым файлам (Excel/Word/Outlook), так и к многочисленным библиотекам. Интересно, есть ли какое-либо решение?Так что же такое VBA и для чего он предназначается?
VBA (Visual Basic for Application) - язык макропрограммирования, основанный на языке Visual Basic.В приложениях, входящих в комплект MS Office, таких как Excel, Word, PowerPoint и Access, VBA используется для автоматизации множества рутинных задач (напр.: повторяющихся однотипных действий), позволяет создавать формы для общения с пользователем и предлагает множество иного богатого функционала. При помощи VBA доступно управление электронной таблицей посредством объектно-ориентированной модели кода/данных, при помощи VBA-кода входные данные таблиц могут быть обработаны и представлены в итоговых (результирующих) таблицах и диаграммах (графиках). Таблица становится интерфейсом кода, позволяя легко работать, изменять его и управлять расчётами. На выходе VBA проект, используемый в структурах описанных выше приложений (электронные таблицы Excel, презентации PowerPoint, базы Access), компилируется в специальный бинарный исполняемый файл, который размещается внутри файла основного формата. Применительно к Excel это файл vbaProject.bin , который располагается внутри *.xslm-файла в директории /xl , представляющий собой бинарный исполняемый файл проекта, содержащий макрос в откомпилированном (готовом к исполнению) виде.
Наиболее вероятной причиной сбоя является повреждение блока кода VBA, содержащегося в книге Excel. Об истоках этого остается только догадываться, возможно что в структуре .xlsm-файла, в процессе работы с документом, происходят какие-то [непредвиденные разработчиками] изменения, способные приводить блок кода в неработоспособное состояние.Решение 1: вставка нового листа
Выполните приведенную последовательность действий:
- Открываем [проблемный] .xlsm-файл (файл с макросами).
- Не нажимаем кнопку Включить содержимое .
- Добавляем в книгу Excel новый лист: правая кнопка мыши на ярлыках Лист1/Лист2/Лист3 → Вставить → Лист .
- Сохраняем электронную таблицу. Закрываем Excel.
- Открываем проблемный файл заново и включаем макросы.
Решение 2: перекомпиляция проекта
Выполните последовательность действий:
- Запускаем и открываем новую книгу Excel (не ваш проблемный файл).
- Открываем меню Файл - выбираем Параметры - далее открываем Центр управления безопасностью и заходим в Параметры центра управления безопасностью .
- В разделе Параметры макросов - выставляем чекбокс Отключить все макросы с уведомлением .
- В разделе Надежные расположения - выставляем чекбокс Отключить все надежные расположения .
- В разделе Надежные документы - выставляем чекбокс Отключить надежные документы .
- Жмем везде OK . Закрываем Excel.
- Открываем [проблемный] .xlsm-файл (файл с макросами).
- Не нажимаем кнопку Включить содержимое .
- Открывает редактор Visual Basic при помощи комбинации клавиш Alt + F11 . Либо можно использовать обходной маневр: в настройках включаем меню Разработчик , после этого в появившемся сверху в ленте меню Разработчик выбираем пункт Visual Basic .
- В открывшемся окне редактора Visual Basic (VBA редактор) пересохраняем проект: для этого жмем на панели инструментов кнопку Сохранить (изображение дискетки или комбинация Ctrl + S ).
- Выбираем из меню Debug - выбираем пункт меню Compile VBA Project :
Решение 3: добавление модуля
Дополнительное решение состоит в том, что бы внести изменения в макрос без перекомпиляции.
- Открываем [проблемный] .xlsm-файл (файл с макросами).
- Не нажимаем кнопку Включить содержимое .
- Открывает редактор Visual Basic (при помощи комбинации клавиш Alt + F11 ).
- Открываем меню Tools → пункт Options . В открывшемся окне переходим на вкладку General и деактивируем чекбокс Compile on Demand :
Отключить макрос при закрытии книги
Всем добрый вечер! Подскажи пожалуйста, нужен был макрос который блокировал бы нажатия клавиш.
DefaultValue не сохраняется при закрытии формы
Проблема. На форме есть комбобокс. Значения там меняются редко. Жесткая установка значения по.
Переменная, значение которой сохраняется при закрытии программы
Как создать переменную, которая сохраняла бы свое, измененное в ходе работы программы, значение.
Событие, возникающее при закрытии книги
Мужики, нужна ваша помощь! Есть файл Excel 2010.. В нем прописано несколько Sub'ов.. Где и что.
надо сохранить с поддержкой макроса с расширением (.xlsx) скорее всего
Добавлено через 2 минуты
- студенты. Им задают задания в учебных заведениях. Студенты делятся на две группы: одним студентам нужна только работающая программа, другим нужно, чтобы программа была написана по каким-то правилам;
- люди, которые работают в программах MS Office, и которые хотят ускорить свою работу или избавиться от монотонной работы;
- программисты, которые сталкиваются с какими-то проблемами и спрашивают, как решить проблему.
формат Excel-файлов с поддержкой макросов - xlsm.
- в диапазоне "C3:H8"?
- определять максимальное число для всего диапазона "C3:H8" или для каждой строки, например, для строки "C3:H3" и т.д.?
И, кстати, функция дана готовая. ТС не может сам переписать в модуль? Спасибо Всем большое. До задания 2.2 я вроде верно сделала, ее делать не надо, я добавила просто все задание.
Начиная с задания 2.3- я не знаю как делать правильно, у меня не получается.
SoftIce, у меня почему-то как у Вас заливка красным цветом не получилось
Странно, у меня всё работает, и ваш макрос "Цвет" тоже.
Если в выделенном диапазоне ячеек содержатся ячейки с отрицательным значением - то они заливаются красным
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Удаление листов из книги при закрытии
Добрый день. нужно при закрытии файла удалить все листы, кроме листа "Макрос". Использую такую.
Выполнение события при закрытии книги
1)Знаю как зделать выполнение события при открытии книги: Private Sub Workbook_Open() End Sub Ка.
Закрытие книги Excel при закрытии формы
В общем хочу, чтобы при любом завершении моего приложения, срабатывал код закрытия книги. Через.
При закрытии Form всё сохраняется, как очистить всё?
Здравствуйте, такой вопросик, при закрытии формы, хоть me.close(), хоть me.hide(), всё почему то.
При закрытии одной книги записать информацию во вторую
Всем привет) столкнулся с проблемой: есть две книги в одну заношу информацию, и во вторую заношу.
Как при закрытии книги эксель - убрать иконку
Добрый вечер. Помогите решить вопрос. При открытии файл эксель подгружает иконку (.ico) по.
Отказ макроса или надстройки от выполнения своих функций имеет ряд причин. Рассмотрим наиболее распространенные из них.
Операционная система
Вплоть до Office 2016 пакет приложений Microsoft Office выпускается в различных версиях, для Windows и для Mac OS. Встроенный в приложения Office язык программирования при этом использует отличающиеся друг от друга библиотеки операционной системы. В связи с этим макрос/надстройка, написанная для работы в приложениях под Windows, может не работать, либо работать некорректно в MacOS. Проверьте операционную систему, для которой разрабатывался макрос/надстройка.
Разработчик пакета офисных приложений
Кроме Microsoft Office, пользователи достаточно часто используют альтернативные пакеты офисных приложений, такие как OpenOffice или LibreOffice. Приложения этих пакетов также имеют встроенные языки программирования, но эти языки отличаются друг от друга. Макросы или надстройки, написанные в Visual Basic for Application в приложениях пакета Microsoft Office, не будут работать в приложениях OpenOffice или LibreOffice. Уточните, для какого пакета офисных программ разработан макрос/надстройка.
Наличие компонента VBA
Для того, чтобы можно было запустить макрос или надстройку в каком-либо приложении пакета Office, необходимо, чтобы с этим пакетом был установлен компонент VBA – встроенный язык программирования Visual Basic for Application. В некоторых версиях Office этот пакет может устанавливаться отдельно. Проверьте, установлен ли этот компонент на компьютере. Нажмите сочетание клавиш Alt+F11, если после этого появляется окно редактора Visual Basic, то компонент установлен. В случае, если компонент отсутствует, его необходимо установить.
Версия Microsoft Office
Активация Microsoft Office
Убедитесь в том, что Microsoft Office не требует активации. Проведите активацию, чтобы избежать каких-либо ограничений при использовании приложений.
Снятие блокировки файла
Файл, полученный с другого компьютера или из сети интернет может быть заблокирован. Чтобы разблокировать такой файл, необходимо кликнуть на нем правой кнопкой мыши и на вкладке "Общие" нажать кнопку "Разблокировать".
Система безопасности
Используемые библиотеки
Это окно также можно вызвать и самостоятельно, если в редакторе VB выбрать пункт меню Tools/References.
Кроме этого не все библиотеки подключаются автоматически. Если на компьютере разработчика макроса или надстройки какая-то библиотека была подключена вручную, затем макрос или надстройка были перенесены на другой компьютер, где эта библиотека не подключена, возникает такая-же ошибка.
Предположим, Вы скачали файл с данного сайта с примером макроса, открываете файл, но макросы в нем не работают! Как такое может быть? Неужели автор сайта выложил неработающий пример и не знает об этом? И тем более как может случиться такое, что Вы перенесли со своего ПК на другой ПК файл с рабочими макросами на флешке, запускаете, а он не работает. Почему? Вроде все правильно делаете, да ведь и у Вас работает на ПК. И начинает закрадываться мысль: "А чем же этот ПК и Excel на нем такие особенные?" . А ответ может быть прост - перед выполнением макроса не было разрешено выполнение этих самых макросов. Да, в большинстве случаев по умолчанию выполнение макросов в Excel отключено. И их надо включить. Для этого:
- Excel 2003:
Сервис-Безопасность-Уровень макросов "Низкий" - Excel 2007:
Кнопка Офис-Параметры Excel (Excel Options) -Центр управления безопасностью (Trust Centr) -Параметры центра управления безопасностью (Trust Centr Settings) -Параметры макросов (Macro Settings) -Разрешить все макросы (Enable All Macros) - Excel 2010-2016:
Файл (File) -Параметры (Options) -Центр управления безопасностью (Trust Centr) -Параметры центра управления безопасностью (Trust Centr Settings) -Параметры макросов (Macro Settings) -Разрешить все макросы (Enable All Macros)
Если макросы уже включены, но некоторые макросы отказываются работать (как правило те, которые записаны в модулях листов и книг и запускаются при наступлении определенного события - Worksheet_SelectionChange (выделение ячеек), Worksheet_Change (изменение значений ячеек) и т.п.), то скорее всего когда-то вы выполнили какой-нибудь макрос и он отключил отслеживание событий. Тогда надо в любую активную книгу добавить модуль(переходим в редактор VBA( Alt + F11 ) -Insert -Module), вставить в него приведенный ниже код и запустить:
Sub Reset_Events() Application.EnableEvents = True End Sub
чтобы запустить(выполнить) данный макрос макрос необходимо установить курсор в любое место между Sub и End Sub и нажать клавишу F5 .
Доброго времени суток всем читателям!
Коротко о сути вопроса:
Есть две книги!
Задача первой (Книга Запуск) книги запускать вторую книгу.
На второй (Книга Файл) книге имеется форма которую надо заполнит (В примере не стал их выкладывать, так как вопрос не о них).
Также две кнопки "Войти" и "Выйти".
Когда нажали "Войти", тогда должна остаться вторая книга (Книга Файл) и закрыться первая (Книга Запуск), с этой задачей макрос справляется.
Когда нажимаем "Выйти", то обе книги должны закрыться. Но почему-то макрос останавливается после закрытия второй книги и первая книга (Книга Запуск) остается открытой, т.е макрос обрывается.
Код первого файла:
[vba]
Код второго файла:
[vba]
Код формы во втором файле (Основной файл)
[vba]
Варианты
• Показать форму в запускающем файле не подойдет, есть на то свои причины.
• Application.Quit тоже не подойдет, по причине того что, если открыты еще файлы кроме этих, то они тоже закрываются.
Доброго времени суток всем читателям!
Коротко о сути вопроса:
Есть две книги!
Задача первой (Книга Запуск) книги запускать вторую книгу.
На второй (Книга Файл) книге имеется форма которую надо заполнит (В примере не стал их выкладывать, так как вопрос не о них).
Также две кнопки "Войти" и "Выйти".
Когда нажали "Войти", тогда должна остаться вторая книга (Книга Файл) и закрыться первая (Книга Запуск), с этой задачей макрос справляется.
Когда нажимаем "Выйти", то обе книги должны закрыться. Но почему-то макрос останавливается после закрытия второй книги и первая книга (Книга Запуск) остается открытой, т.е макрос обрывается.
Код первого файла:
[vba]
Код второго файла:
[vba]
Код формы во втором файле (Основной файл)
[vba]
Варианты
• Показать форму в запускающем файле не подойдет, есть на то свои причины.
• Application.Quit тоже не подойдет, по причине того что, если открыты еще файлы кроме этих, то они тоже закрываются. Sobirjon
Код первого файла:
[vba]
Код второго файла:
[vba]
Код формы во втором файле (Основной файл)
[vba]
Варианты
• Показать форму в запускающем файле не подойдет, есть на то свои причины.
• Application.Quit тоже не подойдет, по причине того что, если открыты еще файлы кроме этих, то они тоже закрываются. Автор - Sobirjon
Дата добавления - 24.02.2020 в 04:34
И напрасно не стали! Далеко не каждый захочет сам создавать АЖ 2 книги, населять их макросами и одну еще и формой с двумя кнопками. У меня было настроение - я создал сам и повозился дома. Будь файлы-примере в этой теме, я бы еще сегодня и на работе повозился в минуты перекура. В общем, зря не создали.
Что заметил в ходе упражнений - ThisWorkbook.Close упорно не хочет выполняться два раза подряд с разными книгами, хотя контекст ThisWorkbook своевременно и правильно переключается. Есть смутное соображение, что работают некие защитные "рефлексы" среды выполнения Excel, не позволяющие удалить полностью все контейнеры кода VBA, имеющие отношение к этой кросс-файловой задаче. Т.е. типа хоть один, но должен остаться. Поэтому при клике на кнопке 1 живым остается файл "Книга Запуск" (а по замыслу, как я понял, хотелось, что бы и он закрылся) , а при клике на кнопке 2 - остается живым файл "Книга Файл".
В примере не стал их выкладывать, так как вопрос не о нихИ напрасно не стали! Далеко не каждый захочет сам создавать АЖ 2 книги, населять их макросами и одну еще и формой с двумя кнопками. У меня было настроение - я создал сам и повозился дома. Будь файлы-примере в этой теме, я бы еще сегодня и на работе повозился в минуты перекура. В общем, зря не создали.
Что заметил в ходе упражнений - ThisWorkbook.Close упорно не хочет выполняться два раза подряд с разными книгами, хотя контекст ThisWorkbook своевременно и правильно переключается. Есть смутное соображение, что работают некие защитные "рефлексы" среды выполнения Excel, не позволяющие удалить полностью все контейнеры кода VBA, имеющие отношение к этой кросс-файловой задаче. Т.е. типа хоть один, но должен остаться. Поэтому при клике на кнопке 1 живым остается файл "Книга Запуск" (а по замыслу, как я понял, хотелось, что бы и он закрылся) , а при клике на кнопке 2 - остается живым файл "Книга Файл". Gustav
В примере не стал их выкладывать, так как вопрос не о нихИ напрасно не стали! Далеко не каждый захочет сам создавать АЖ 2 книги, населять их макросами и одну еще и формой с двумя кнопками. У меня было настроение - я создал сам и повозился дома. Будь файлы-примере в этой теме, я бы еще сегодня и на работе повозился в минуты перекура. В общем, зря не создали.
Читайте также: