Вы сталкиваетесь с кодом ошибки базы данных Access 2950 и не можете запустить макрос в базе данных Access? Хотя макросы помогают автоматизировать задачи, которые вы часто выполняете в базе данных, известно, что они легко повреждаются.
Что означает ошибка 2950 в Access?
Ошибка действия Ошибка номер 2950, невозможно запустить макрос в базе данных Access
Ошибка 2950 означает, что макрос не может работать в Access. Эта проблема возникает, когда Microsoft Access не доверяет базе данных, из которой запускается макрос. Последние версии Access открывают базы данных, которым не доверяют в отключенном режиме. В отключенном режиме исполняемое содержимое отключено.
Как исправить ошибку Access Database 2950
Вам необходимо выполнить следующие два шага, чтобы исправить ошибку доступа 2950:
- Включить базу данных для текущего сеанса
- Переместите базу данных в надежное место
1]Включить базу данных для текущего сеанса
В зависимости от имеющейся у вас версии Access этот метод может отличаться. Это решение может работать для всех версий Microsoft Access.
- На панели сообщений щелкните Параметры.
- В диалоговом окне Параметры безопасности Microsoft Office щелкните Включить этот контент, затем щелкните Ok.
2]Переместите базу данных в надежное место
Перед перемещением базы данных следует определить надежное место, в которое можно переместить базу данных.
Щелкните вкладку Файл в строке меню.
Нажмите Параметры в виде за кулисами.
Диалоговое окно параметров доступа
В диалоговом окне щелкните Центр доверия на левой панели.
Затем нажмите Настройки центра управления безопасностью справа.
Нажмите Надежное местоположение и выполните одно из следующих действий:
- Обратите внимание на путь к надежным расположениям, перечисленным в разделе «Расположение пользователя. ‘
- Добавить новое надежное местоположение; для этого нажмите Добавить новое местоположение а затем укажите путь к месту, которое вы хотите добавить.
Затем переместите базу данных Access в надежное расположение.
Мы надеемся, что это руководство поможет вам понять, как исправить ошибку доступа 2950.
.
Вы столкнулись с кодом ошибки базы данных Access 2950 и не можете запустить макрос в базе данных Access? Хотя макросы помогают автоматизировать задачи, которые вы часто выполняете в базе данных, известно, что они легко повреждаются.
Что означает ошибка 2950 в Access?
Action Failed Error Number 2950, невозможно запустить макрос в базе данных Access
Ошибка 2950 означает, что макрос не может быть запущен в Access. Эта проблема возникает, когда Microsoft Access не доверяет базе данных, из которой запускается макрос. Последние версии Access открывают базы данных, которым не доверяют в отключенном режиме. В отключенном режиме исполняемый контент отключен.
Для исправления ошибки Access 2950 необходимо выполнить следующие два шага:
Включить база данных для текущего сеанса Перемещение базы данных в надежное расположение
1] Включить базу данных для текущего сеанса
В зависимости от версии Access, которая у вас есть, этот метод может отличаться. Это решение может работать для всех версий Microsoft Access.
На панели сообщений нажмите”Параметры”. В диалоговом окне”Параметры безопасности Microsoft Office”нажмите”Включить это содержимое”, затем нажмите”ОК”.
2] Переместите базу данных в папку Надежное расположение
Перед перемещением базы данных необходимо определить надежное расположение, в которое можно переместить базу данных.
Щелкните вкладку Файл в строке меню.
Щелкните”Параметры”в представлении Backstage.
Диалоговое окно Параметры доступа
В диалоговом окне щелкните”Центр управления безопасностью”на левой панели.
Затем справа щелкните”Параметры центра управления безопасностью”.
Щелкните”Надежное расположение”и выполните любое из следующих действий:
Запишите путь к надежному местоположения, перечисленные в разделе”Местоположение пользователя”. Добавьте новое надежное местоположение; для этого нажмите «Добавить новое местоположение» и затем укажите путь к местоположению, которое вы хотите добавить.
Затем переместите базу данных Access в надежное местоположение.
Мы надеемся, что это руководство поможет вам понять, как чтобы исправить ошибку доступа 2950.
Download PC Repair Tool to quickly find & fix Windows errors automatically
Are you facing Access Database error code 2950 and are unable to run macro in the Access database? Although Macros help automate tasks that you often perform in a database, they are known to be corrupted easily.
What does error 2950 mean in Access?
Action Failed Error Number 2950, Unable to run macro in Access database
The error 2950 means that the macro is unable to run in Access. This issue occurs when Microsoft Access does not trust the database from which the macro is run. Recent versions of Access open databases that are not trusted in Disabled mode. In Disabled mode, executable content is disabled.
You need to carry out the following two steps to fix Access Error 2950:
- Enable the database for the current session
- Move the database to a trusted location
1] Enable the database for the current session
Depending on the version of Access you have, this method might be different. This solution can work for all Microsoft Access versions.
- On the Message bar, click Options.
- In the Microsoft Office Security Options dialog box, click Enable this content, then click OK.
2] Move the database to a trusted location
Before moving the database, you should determine the trusted location you can move the database.
Click the File tab on the menu bar.
Click Options in the backstage view.
An Access Options dialog box
In the dialog box, click Trust Center on the left pane.
Then click Trust Center Settings on the right.
Click Trusted Location and do any of the following:
- Note the path of the trusted locations listed under ‘User Location.’
- Add a new trusted location; to do this, click Add New Location and then specify the path of the location that you want to add.
Then move the Access database to the trusted location.
We hope this tutorial helps you understand how to fix Access error 2950.
Shantel is a university student studying for Bachelor of Science in Information Technology. Her goal is to become a Database Administrator or a System Administrator. She enjoys reading and watching historical documentaries and dramas.
Download PC Repair Tool to quickly find & fix Windows errors automatically
Are you facing Access Database error code 2950 and are unable to run macro in the Access database? Although Macros help automate tasks that you often perform in a database, they are known to be corrupted easily.
What does error 2950 mean in Access?
Action Failed Error Number 2950, Unable to run macro in Access database
The error 2950 means that the macro is unable to run in Access. This issue occurs when Microsoft Access does not trust the database from which the macro is run. Recent versions of Access open databases that are not trusted in Disabled mode. In Disabled mode, executable content is disabled.
You need to carry out the following two steps to fix Access Error 2950:
- Enable the database for the current session
- Move the database to a trusted location
1] Enable the database for the current session
Depending on the version of Access you have, this method might be different. This solution can work for all Microsoft Access versions.
- On the Message bar, click Options.
- In the Microsoft Office Security Options dialog box, click Enable this content, then click OK.
2] Move the database to a trusted location
Before moving the database, you should determine the trusted location you can move the database.
Click the File tab on the menu bar.
Click Options in the backstage view.
An Access Options dialog box
In the dialog box, click Trust Center on the left pane.
Then click Trust Center Settings on the right.
Click Trusted Location and do any of the following:
- Note the path of the trusted locations listed under ‘User Location.’
- Add a new trusted location; to do this, click Add New Location and then specify the path of the location that you want to add.
Then move the Access database to the trusted location.
We hope this tutorial helps you understand how to fix Access error 2950.
Shantel is a university student studying for Bachelor of Science in Information Technology. Her goal is to become a Database Administrator or a System Administrator. She enjoys reading and watching historical documentaries and dramas.
В последних нескольких ситуациях некоторые из наших читателей сталкивались с серьезным сообщением об ошибке с номером ошибки 2950 этого макроса доступа ms. Есть ряд факторов, которые могут вызвать эту проблему. Давайте обсудим это сейчас.
ПК работает медленно?
Улучшите скорость своего компьютера сегодня, загрузив это программное обеспечение — оно решит проблемы с вашим ПК. г.
Если выражение оценивается так, что вы получаете True (-1), Access останавливает все макросы. В идеале ваша компания могла бы иметь макрос с частым сообщением как одно из многих сложных действий, включая активацию всех других макросов.
Как часто вы получаете сообщение об ошибке “Action Failed Access 2950” в своей базе данных Access? Вы ищете другие мгновенные решения для решения такой актуальной проблемы? Что ж, если так, то этот пост может показаться вам вполне достижимым. Поскольку это сделано из полного решения для MS Answer Access Action Failure Error Number: 2950.
Многие уязвимости в составе MS Access являются источником множества ошибок макросов. Что ж, макросы в основном используются для обучения какой-либо автоматизации доступа, но сценарии, которые позволяют запускать макросы, должны быть легко вредными. Это приводит к неожиданной ошибке макроса: «Action Failed Error Number: 2950».
Давайте перейдем к поиску основных причин следующей ошибки, чтобы исправить ошибку доступа к базе данных MS 2950 для простых решений.
Об ошибке MS Access 2950:
1] Активировать строку для текущего сеанса Это решение может хорошо работать для всех версий Microsoft Access. На панели сообщений щелкните Параметры. По сути, в диалоговом окне «Параметры безопасности Microsoft Office» нажмите «Включить это содержимое», а затем нажмите «ОК».
Наиболее похожие на эти ошибки случаются только с пользователями, которые во многих случаях запускают базу данных, что неэффективно и всегда в основном использовалось в MS Access.
Ошибка MS Access 2950 — это формат статистики с числовым кодом ошибки, разработанный Windows как популярная ошибка стиля, в дополнение к версиям и программам совместимых производителей оборудования для оборудования Microsoft Windows.
Этот тип в компьютерном коде обычно используется в рекламе, чтобы помочь вам обнаружить ошибки. Ошибка Microsoft Access 2950 содержит правильное краткое понятное описание вместе с числовой коллекцией. В некоторых ситуациях большинство из них может управлять дополнительными параметрами в формате ошибки Microsoft Access 2950. Дополнительным числовым кодом для одной конкретной неудачной попытки продажи является адрес обычно загружаемых политиками элементов памяти, а также час сбоя. .
Что вызывает код ошибки базы данных MS Access 2950?
Когда Visual Classic должен использоваться просто с помощью макросов (VBA), возрастает потребность в вызове VBA с помощью определенной команды. Так что в этом случае вся ваша семья получит все ошибки:
<цитата>
Действие не выполнено, процент ошибок 2950
< / р >
Эта конкретная проблема обычно возникает, когда база данных неэффективна, когда Access не работает. Если оплата не производится, MS Access открывает ненадежный каталог в отключенном стиле. Потому что в этом режиме содержимое exe может быть описано как отключенное.
Как исправить ошибку Microsoft Access?
Восстановление из более ранней резервной копии.Используйте базу данных для сжатия и восстановления.Используйте всю утилиту Microsoft Jet Compact.Создайте новую базу данных MS Access и импортируйте поврежденные файлы.Используйте какую-нибудь программу восстановления.
Сообщение об ошибке 2950 Access 2016 появится только из-за стандартного сбоя Microsoft Windows. Обычно отсутствующие системные файлы представляют большую угрозу для жизни вашего компьютера. Может быть так много скриптов, которые могут уменьшить отправку системы, например:
Эти грубые ошибки также возникали при заражении последнего компьютера или блокнота рекламным/шпионским ПО, аппаратным вирусом или в результате некорректного выключения компьютера. Любые действия, связанные с этими действиями, могут повредить или удалить файлы статистики, связанные с системой Windows, и поврежденные сетевые файлы, что приведет к повреждению или потере файлов данных и связанных данных, которые абсолютно необходимы для правильного функционирования домашнего компьютера.
Ручные исправления для исправления ошибки Microsoft Access 2950
Если вы получаете стандартную ошибку быстрого доступа 2950 и хотите ее исправить, вы можете использовать методы, описанные ниже.
Способ 1. Расширенное решение для пользователей компьютеров
<ул>
Способ 2. Активация базы данных
<ул>
<ул>
В дополнение к активации базы данных обычно следует попытаться переместить базу данных в одно более безопасное место. Чтобы таких ситуаций больше не возникало.
Способ 3. Переместите базу данных в другое безопасное место
<ул>
<ул>
<ул>
<ул>
Как включить макросы в access?
Щелкните прикрепленный к вкладке «Файл».В области «Предупреждение системы безопасности» выберите «Включить содержимое».Выберите Дополнительные параметры.В диалоговом окне «Параметры безопасности Microsoft Office» установите флажок «Включить содержимое в этот сеанс» для каждого отдельного макроса.Нажмите «ОК».
Аналогичным образом вы успешно переместите базу данных на доверенный адрес, что может помочь уменьшить количество ошибок базы данных MS Access.
Способ 4. Настройка макроса AutoExec
В таких непредвиденных ситуациях вы, возможно, даже настроите мастер AutoExec, и этот макрос наверняка предупредит вас о ненадежном статусе каждой нашей базы данных каждый раз, когда вы открываете базу данных. Чтобы настроить автоматическое выполнение, выполните следующие действия:
<ол>
7. Перейдите к столбцу «ActionMe», затем щелкните параметр «Открыть форму».
Применяя остальные решения, мы можем выяснить все причины, чтобы избежать ошибки # 2950 в отношении неудавшегося действия. Но поскольку большинство пользователей будут заняты резервным копированием базы данных, ситуация в конечном итоге приведет к повреждению фактов MDB ИЛИ ACCDB, что приведет к фатальной потере данных.
Альтернативный метод: выберите метод, рекомендованный профессионалом
Чтобы восстановить базу данных на несогласованный конвейер, вам может понадобиться помощь соответствующего стороннего инструмента. Вы можете использовать MS Access Repair To Fix Access Tool для ошибки 2013 года 2950. Он может легко восстановить, а затем восстановить поврежденные, поврежденные и недоступные данные. С помощью этого типа инструмента во многих случаях вы можете легко восстановить базу данных из любой поврежденной версии.
ПК работает медленно?
ASR Pro — идеальное решение для ремонта вашего ПК! Он не только быстро и безопасно диагностирует и устраняет различные проблемы с Windows, но также повышает производительность системы, оптимизирует память, повышает безопасность и точно настраивает ваш компьютер для максимальной надежности. Так зачем ждать? Начните сегодня!
* Нажимая любую кнопку загрузки выше и устанавливая Repair Great for Access (14,8 МБ), я подтверждаю, что правильно ознакомился с Лицензионным соглашением с конечным пользователем и Политикой конфиденциальности и что я согласен с их веб-сайтом.
Улучшите скорость своего компьютера сегодня, загрузив это программное обеспечение — оно решит проблемы с вашим ПК. г.
How To Troubleshoot Ms Access Macro Error Number 2950
Ms 액세스 매크로 오류 다양한 2950 문제를 해결하는 방법
Jak Upewnić Się, że Rozwiązujesz Problem Z Błędem Makra Dostępu Ms O Numerze 2950
Comment Dépanner Ms Obtenir Le Numéro D’erreur De Macro 2950
Hur Man Felsöker Ms Få Makrofel Nummer 2950
Como Solucionar Problemas De Ms, Digite O Número De Erro De Macro 2950
Hoe Kan Ik Ms Access Macro Foutnummer 2950 Diagnosticeren
Cómo Solucionar El Error De Macro De MS Access Número 2950
So Beheben Sie Die Fehlernummer 2950 Des Ms-Zugriffsmakros Schließlich
Come Risolvere L’errore Macro Di Accesso Dell’azienda Di Microsoft Numero 2950
г.
139 / 129 / 127 Регистрация: 27.09.2012 Сообщений: 627 |
|
1 |
|
01.06.2013, 17:07. Показов 18314. Ответов 16
Есть форма на ней поля со списком, выбираем поля со списком месяц и год, 0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
01.06.2013, 17:07 |
Ответы с готовыми решениями:
Принтер Samsung ML-2950 Cisco catalyst 2950 при включении коммутатора выводить switch: 802.1x на Catalyst 2950 Пытаюсь настроить 802.1x. Использую коммутатор Catalyst 2950… 16 |
139 / 129 / 127 Регистрация: 27.09.2012 Сообщений: 627 |
|
01.06.2013, 18:06 [ТС] |
2 |
Вопрос решился создали макрос 0 |
7262 / 4465 / 287 Регистрация: 12.08.2011 Сообщений: 13,445 |
|
03.06.2013, 02:01 |
3 |
Вопрос решился создали макрос Молодцы, раз мастер построения кнопки использовать не можете. 1 |
139 / 129 / 127 Регистрация: 27.09.2012 Сообщений: 627 |
|
03.06.2013, 10:04 [ТС] |
4 |
Молодцы, раз мастер построения кнопки использовать не можете. да мастером выдает ошибку 0 |
14 / 2 / 0 Регистрация: 28.08.2011 Сообщений: 80 |
|
20.12.2013, 10:38 |
5 |
А в итоге, какой выход, что сделали? 0 |
139 / 129 / 127 Регистрация: 27.09.2012 Сообщений: 627 |
|
20.12.2013, 19:59 [ТС] |
6 |
делаем кнопки через макрос 0 |
2842 / 774 / 41 Регистрация: 20.05.2012 Сообщений: 2,056 |
|
20.12.2013, 20:07 |
7 |
делаем кнопки через макрос Мастером через макрос, как это? 0 |
14 / 2 / 0 Регистрация: 28.08.2011 Сообщений: 80 |
|
21.12.2013, 08:58 |
8 |
А можно немножко поподробней (нажми ту кнопку или эту). Добавлено через 12 часов 26 минут 0 |
0 / 0 / 0 Регистрация: 25.12.2014 Сообщений: 18 |
|
25.12.2014, 12:15 |
9 |
Здравствуйте 0 |
83 / 60 / 21 Регистрация: 03.12.2014 Сообщений: 232 |
|
25.12.2014, 12:52 |
10 |
DariaSch, Выложите файл пжлст 0 |
0 / 0 / 0 Регистрация: 25.12.2014 Сообщений: 18 |
|
25.12.2014, 13:04 |
11 |
Выкладываю файл 0 |
83 / 60 / 21 Регистрация: 03.12.2014 Сообщений: 232 |
|
25.12.2014, 13:49 |
12 |
DariaSch, у Вас в макросе имя макроса записанный в построителе составил 255 символов, по моему у посторителя ограничение в 255 символов Кликните здесь для просмотра всего текста =ChrW(1063) & ChrW(1090) & ChrW(1086) & ChrW(32) & ChrW(1080) & ChrW(32) & ChrW(1089) & ChrW(1082) & ChrW(1086) & ChrW(1083) & ChrW(1100) & ChrW(1082) & ChrW(1086) & ChrW(32) & ChrW(1074) & ChrW(32) & ChrW(1103) & ChrW(1095) & ChrW(1077) & ChrW(1081) & Ch «Открыть отчет» через VBA Кликните здесь для просмотра всего текста DoCmd.OpenReport «имя отчёта» 1 |
83 / 60 / 21 Регистрация: 03.12.2014 Сообщений: 232 |
|
25.12.2014, 13:58 |
13 |
Почему у них «ОткрытьФорму» — «ИмяФормы» набирается через «построитель»? Я создаю макрос «ОткрытьФорму» — «ИмяФормы» на выбор из списка. Миниатюры
3 |
0 / 0 / 0 Регистрация: 25.12.2014 Сообщений: 18 |
|
25.12.2014, 14:31 |
14 |
Я только начала изучать БД, расскажите, пожалуйста подробнее, куда вписать DoCmd.OpenReport «имя отчёта» Добавлено через 19 минут 0 |
0 / 0 / 0 Регистрация: 25.12.2014 Сообщений: 18 |
|
29.12.2014, 17:07 |
15 |
Сначала, исправляла кнопки на макросы, потом просто попробовала сократить названия форм и отчетов и все сразу пошло)) 0 |
7262 / 4465 / 287 Регистрация: 12.08.2011 Сообщений: 13,445 |
|
30.12.2014, 07:43 |
16 |
Макросы — тупиковая ветвь эволюции (с) 0 |
4037 / 1422 / 394 Регистрация: 07.08.2013 Сообщений: 3,538 |
|
30.12.2014, 07:58 |
17 |
У акса должен быть всего один макрос 0 |
Номер ошибки: | Ошибка 2950 | |
Название ошибки: | Microsoft Access Error 2950 | |
Описание ошибки: | This issue occurs if the database is not trusted by Access 2007. | |
Разработчик: | Microsoft Corporation | |
Программное обеспечение: | Microsoft Access | |
Относится к: | Windows XP, Vista, 7, 8, 10, 11 |
Описание «Microsoft Access Error 2950»
«Microsoft Access Error 2950» часто называется ошибкой во время выполнения (ошибка). Разработчики, такие как Microsoft Corporation, обычно проходят через несколько контрольных точек перед запуском программного обеспечения, такого как Microsoft Access. К сожалению, такие проблемы, как ошибка 2950, могут быть пропущены, и программное обеспечение будет содержать эти проблемы при выпуске.
Ошибка 2950 может столкнуться с пользователями Microsoft Access, если они регулярно используют программу, также рассматривается как «This issue occurs if the database is not trusted by Access 2007.». После того, как об ошибке будет сообщено, Microsoft Corporation отреагирует и быстро исследует ошибки 2950 проблемы. Команда программирования может использовать эту информацию для поиска и устранения проблемы (разработка обновления). Чтобы исправить любые документированные ошибки (например, ошибку 2950) в системе, разработчик может использовать комплект обновления Microsoft Access.
Проблема с исходным кодом Microsoft Access приведет к этому «Microsoft Access Error 2950», чаще всего на этапе запуска. Мы можем определить происхождение ошибок ошибки 2950 во время выполнения следующим образом:
Ошибка 2950 Crash — Ошибка 2950 является хорошо известной, которая происходит, когда неправильная строка кода компилируется в исходный код программы. Это возникает, когда Microsoft Access не работает должным образом или не знает, какой вывод будет подходящим.
Утечка памяти «Microsoft Access Error 2950» — при утечке памяти Microsoft Access это может привести к медленной работе устройства из-за нехватки системных ресурсов. Возможные причины включают сбой Microsoft Corporation для девыделения памяти в программе или когда плохой код выполняет «бесконечный цикл».
Ошибка 2950 Logic Error — Компьютерная система создает неверную информацию или дает другой результат, даже если входные данные являются точными. Обычные причины этой проблемы связаны с ошибками в обработке данных.
Такие проблемы Microsoft Access Error 2950 обычно вызваны повреждением файла, связанного с Microsoft Access, или, в некоторых случаях, его случайным или намеренным удалением. Основной способ решить эти проблемы вручную — заменить файл Microsoft Corporation новой копией. В качестве дополнительного шага по устранению неполадок мы настоятельно рекомендуем очистить все пути к неверным файлам и ссылки на расширения файлов Microsoft Corporation, которые могут способствовать возникновению такого рода ошибок, связанных с Microsoft Access Error 2950.
Типичные ошибки Microsoft Access Error 2950
Общие проблемы Microsoft Access Error 2950, возникающие с Microsoft Access:
- «Ошибка программного обеспечения Microsoft Access Error 2950. «
- «Недопустимый файл Microsoft Access Error 2950. «
- «Извините за неудобства — Microsoft Access Error 2950 имеет проблему. «
- «Файл Microsoft Access Error 2950 не найден.»
- «Microsoft Access Error 2950 не может быть найден. «
- «Ошибка запуска программы: Microsoft Access Error 2950.»
- «Не удается запустить Microsoft Access Error 2950. «
- «Отказ Microsoft Access Error 2950.»
- «Неверный путь к программе: Microsoft Access Error 2950. «
Проблемы Microsoft Access Error 2950 с участием Microsoft Accesss возникают во время установки, при запуске или завершении работы программного обеспечения, связанного с Microsoft Access Error 2950, или во время процесса установки Windows. Выделение при возникновении ошибок Microsoft Access Error 2950 имеет первостепенное значение для поиска причины проблем Microsoft Access и сообщения о них вMicrosoft Corporation за помощью.
Причины проблем Microsoft Access Error 2950
Проблемы Microsoft Access Error 2950 могут быть отнесены к поврежденным или отсутствующим файлам, содержащим ошибки записям реестра, связанным с Microsoft Access Error 2950, или к вирусам / вредоносному ПО.
В основном, осложнения Microsoft Access Error 2950 связаны с:
- Недопустимые разделы реестра Microsoft Access Error 2950/повреждены.
- Зазаражение вредоносными программами повредил файл Microsoft Access Error 2950.
- Другая программа (не связанная с Microsoft Access) удалила Microsoft Access Error 2950 злонамеренно или по ошибке.
- Microsoft Access Error 2950 конфликтует с другой программой (общим файлом).
- Microsoft Access (Microsoft Access Error 2950) поврежден во время загрузки или установки.
Продукт Solvusoft
Загрузка
WinThruster 2022 — Проверьте свой компьютер на наличие ошибок.
Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11
Установить необязательные продукты — WinThruster (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление
На чтение 25 мин. Просмотров 16.3k.
Эта статья содержит полное руководство по обработке ошибок VBA. Если вы ищете краткое резюме, посмотрите таблицу быстрого руководства в первом разделе.
Если вы ищете конкретную тему по обработке ошибок VBA, ознакомьтесь с приведенным ниже содержанием.
Если вы новичок в VBA, то вы можете прочитать пост от начала до конца, так как он выложен в логическом порядке.
Содержание
- Краткое руководство по обработке ошибок
- Введение
- Ошибки VBA
- Заявление об ошибке
- Err объект
- Логирование
- Другие элементы, связанные с ошибками
- Простая стратегия обработки ошибок
- Полная стратегия обработки ошибок
- Обработка ошибок в двух словах
Краткое руководство по обработке ошибок
Пункт | Описание |
On Error Goto 0 | При возникновении ошибки код останавливается и отображает ошибку. |
On Error Resume Next | Игнорирует ошибку и продолжает. |
On Error Goto [Label] | Переход к определенной метке при возникновении ошибки. Это позволяет нам справиться с ошибкой. |
Err Object | При возникновении ошибки информация об ошибке сохраняется здесь. |
Err.Number | Номер ошибки. (Полезно, только если вам нужно проверить, произошла ли конкретная ошибка.) |
Err.Description | Содержит текст ошибки. |
Err.Source | Вы можете заполнить это, когда используете Err.Raise. |
Err.Raise | Функция, которая позволяет генерировать вашу собственную ошибку. |
Error Function | Возвращает текст ошибки из номера ошибки. Вышло из употребления. |
Error Statement | Имитирует ошибку. Вместо этого используйте Err.Raise. |
Введение
Обработка ошибок относится к коду, который написан для обработки ошибок, возникающих во время работы вашего приложения. Эти ошибки обычно вызваны чем-то вне вашего контроля, например отсутствующим файлом, недоступностью базы данных, недействительными данными и т.д.
Если мы считаем, что ошибка может произойти в какой-то
момент, рекомендуется написать специальный код для обработки ошибки, если она
возникнет, и устранить ее.
Для всех остальных ошибок мы используем общий код для их
устранения. Это где оператор обработки ошибок VBA вступает в игру. Они
позволяют нашему приложению корректно обрабатывать любые ошибки, которые мы не
ожидали.
Чтобы понять обработку ошибок, мы должны сначала понять
различные типы ошибок в VBA.
Ошибки VBA
В VBA есть три типа ошибок
- Синтаксис
- Компиляция
- Время выполнения
Мы используем обработку ошибок для устранения ошибок во
время выполнения. Давайте посмотрим на каждый из этих типов ошибок, чтобы было
ясно, что такое ошибка во время выполнения.
Синтаксические ошибки
Если вы использовали VBA в течение какого-то времени, вы
увидите синтаксическую ошибку. Когда вы набираете строку и нажимаете return,
VBA оценивает синтаксис и, если он неверен, выдает сообщение об ошибке.
Например, если вы введете If и забудете ключевое слово Then,
VBA отобразит следующее сообщение об ошибке.
Некоторые примеры синтаксических ошибок
' then отсутствует If a > b ' не хватает = после i For i 2 To 7 ' отсутствует правая скобка b = left("АБВГ",1
Синтаксические ошибки относятся только к одной строке. Они
возникают, когда синтаксис одной строки неверен.
Примечание. Диалоговое окно «Ошибка синтаксиса» можно отключить, выбрав «Сервис» -> «Параметры» и отметив «Автосинтаксическая проверка». Строка по-прежнему будет отображаться красным цветом в случае ошибки, но диалоговое окно не появится.
Ошибки компиляции
Ошибки компиляции происходят более чем в одной строке.
Синтаксис в одной строке правильный, но неверный, если учесть весь код проекта.
Примеры ошибок компиляции:
- Оператор If без соответствующего оператора End If
- For без Next
- Select без End Select
- Вызов Sub или Function, которые не существуют
- Вызов Sub или Function с неверными параметрами
- Присвоение Sub или Function того же имени, что и для модуля
- Переменные не объявлены (Option Explicit должен присутствовать в верхней части модуля)
На следующем снимке экрана показана ошибка компиляции,
которая возникает, когда цикл For не имеет соответствующего оператора Next.
Использование Debug-> Compile
Чтобы найти ошибки компиляции, мы используем Debug->
Compile VBA Project из меню Visual Basic.
Когда вы выбираете Debug-> Compile, VBA отображает первую
обнаруженную ошибку.
Когда эта ошибка исправлена, вы можете снова запустить
Compile, и VBA найдет следующую ошибку.
Debug-> Compile также будет включать синтаксические
ошибки в поиск, что очень полезно.
Если ошибок не осталось и вы запускаете Debug-> Compile,
может показаться, что ничего не произошло. Однако «Компиляция» будет недоступна
в меню «Отладка». Это означает, что ваше приложение не имеет ошибок компиляции
в текущий момент.
Debug->Compile Error Summary
Debug-> Compile находит ошибки компиляции (проекта).
Он также найдет синтаксические ошибки.
Он находит одну ошибку каждый раз, когда вы ее используете.
Если нет ошибок компиляции, оставленная опция Компиляция
будет отображаться серым цветом в меню.
Debug-> Compile Usage
Вы должны всегда использовать Debug-> Compile, прежде чем
запускать свой код. Это гарантирует, что ваш код не будет иметь ошибок
компиляции при запуске.
Если вы не запускаете Debug-> Compile, то VBA может
обнаружить ошибки компиляции при запуске. Их не следует путать с ошибками
времени выполнения.
Ошибки во время выполнения
Ошибки во время выполнения возникают, когда ваше приложение
работает. Обычно они находятся вне вашего контроля, но могут быть вызваны
ошибками в вашем коде.
Например, представьте, что ваше приложение читает из внешней
рабочей книги. Если этот файл будет удален, то VBA отобразит ошибку, когда ваш
код попытается открыть его.
Другие примеры ошибок времени выполнения
- база данных недоступна
- пользователь вводит неверные данные
- ячейка, содержащая текст вместо числа
Как мы уже видели, целью обработки ошибок является обработка
ошибок времени выполнения, когда они возникают.
Ожидаемые и неожиданные ошибки
Когда мы думаем, что может произойти ошибка во время
выполнения, мы помещаем код на место для ее обработки. Например, мы обычно
помещаем код на место, чтобы иметь дело с файлом, который не найден.
Следующий код проверяет, существует ли файл, прежде чем он
пытается его открыть. Если файл не существует, отображается сообщение, удобное
для пользователя, и код выходит из подпрограммы.
Sub OtkritFail() Dim sFile As String sFile = "C:ДокументыОтчет.xlsx" ' Используйте Dir, чтобы проверить, существует ли файл If Dir(sFile) = "" Then ' если файл не существует, отобразить сообщение MsgBox "Файл не найден" & sFile Exit Sub End If ' Код достигнет только если файл существует Workbooks.Open sFile End Sub
Когда мы думаем, что в какой-то момент может произойти
ошибка, рекомендуется добавить код для обработки ситуации. Мы обычно называем
эти ошибки ожидаемыми.
Если у нас нет специального кода для обработки ошибки, это
считается неожиданной ошибкой. Мы используем операторы обработки ошибок VBA для
обработки непредвиденных ошибок.
Ошибки времени выполнения, которые не являются ошибками VBA
Прежде чем мы рассмотрим VBA Handling, мы должны упомянуть
один тип ошибок. Некоторые ошибки во время выполнения не рассматриваются как
ошибки VBA, а только пользователем.
Позвольте мне объяснить это на примере. Представьте, что у
вас есть приложение, которое требует, чтобы вы добавили значения в переменные a
и b
Допустим, вы по ошибке используете звездочку вместо знака
плюс
Это не ошибка VBA. Ваш синтаксис кода является совершенно
законным. Однако, с вашей точки зрения, это ошибка.
Эти ошибки не могут быть обработаны с помощью обработки ошибок, поскольку они, очевидно, не будут генерировать никаких ошибок. Вы можете справиться с этими ошибками, используя Unit Testing and Assertions.
Заявление об ошибке
Как мы видели, есть два способа обработки ошибок во время
выполнения
- Ожидаемые ошибки — напишите конкретный код для
их обработки. - Неожиданные ошибки — используйте операторы
обработки ошибок VBA для их обработки.
Оператор VBA On Error используется для обработки ошибок.
Этот оператор выполняет некоторые действия при возникновении ошибки во время
выполнения.
Есть четыре различных способа использовать это утверждение
- On Error Goto 0 — код останавливается на строке с ошибкой и отображает сообщение.
- On Error Resume Next — код перемещается на следующую строку. Сообщение об ошибке не отображается.
- On Error Goto [label] — код перемещается на определенную строку или метку. Сообщение об ошибке не отображается. Это тот, который мы используем для обработки ошибок.
- On Error Goto -1 — очищает текущую ошибку.
Давайте посмотрим на каждое из этих утверждений по очереди.
On Error Goto 0
Это поведение по умолчанию VBA. Другими словами, если вы не
используете On Error, это поведение вы увидите.
При возникновении ошибки VBA останавливается на строке с
ошибкой и отображает сообщение об ошибке. Приложение требует вмешательства
пользователя с кодом, прежде чем оно сможет продолжить. Это может быть
исправление ошибки или перезапуск приложения. В этом случае обработка ошибок не
происходит.
Давайте посмотрим на пример. В следующем коде мы не
использовали строку On Error, поэтому VBA будет использовать поведение On Error
Goto 0 по умолчанию.
Sub IspDefault() Dim x As Long, y As Long x = 6 y = 6 / 0 x = 7 End Sub
Вторая строка присваивания приводит к ошибке деления на ноль. Когда мы запустим этот код, мы получим сообщение об ошибке, показанное на скриншоте ниже.
Когда появляется ошибка, вы можете выбрать End или Debug
Если вы выберете Конец, то приложение просто остановится.
Если вы выберете Отладить, приложение остановится на строке
ошибки, как показано на скриншоте ниже.
Это нормально, когда вы пишете код VBA, поскольку он
показывает вам точную строку с ошибкой.
Это поведение не подходит для приложения, которое вы
передаете пользователю. Эти ошибки выглядят непрофессионально и делают
приложение нестабильным.
Подобная ошибка, по сути, приводит к сбою приложения.
Пользователь не может продолжить работу без перезапуска приложения. Они могут
вообще не использовать его, пока вы не исправите для них ошибку.
Используя On Error Goto [label], мы можем дать пользователю
более контролируемое сообщение об ошибке. Это также предотвращает остановку
приложения. Мы можем заставить приложение работать предопределенным образом.
On Error Resume Next
Использование On Error Resume Next указывает VBA
игнорировать ошибку и продолжать работу.
Есть конкретные случаи, когда это полезно. Большую часть
времени вы должны избегать его использования.
Если мы добавим Resume Next к нашему примеру Sub, то VBA
проигнорирует ошибку деления на ноль
Sub UsingResumeNext() On Error Resume Next Dim x As Long, y As Long x = 6 y = 6 / 0 x = 7 End Sub
Это не очень хорошая идея, чтобы сделать это. Если вы
игнорируете ошибку, то поведение может быть непредсказуемым. Ошибка может
повлиять на приложение несколькими способами. Вы можете получить неверные
данные. Проблема в том, что вы не знаете, что что-то пошло не так, потому что
вы подавили ошибку.
Приведенный ниже код является примером использования Resume
Next.
Sub OtprSoobsch() On Error Resume Next ' Требуется ссылка: ' Библиотека объектов Microsoft Outlook 15.0 Dim Outlook As Outlook.Application Set Outlook = New Outlook.Application If Outlook Is Nothing Then MsgBox " Не удается создать сеанс Microsoft Outlook." _ & " Письмо не будет отправлено." Exit Sub End If End Sub
В этом коде мы проверяем, доступен ли Microsoft Outlook на компьютере. Все,
что мы хотим знать — это доступно или нет. Нас не интересует конкретная ошибка.
В приведенном выше коде мы продолжаем, если есть ошибка.
Затем в следующей строке мы проверяем значение переменной Outlook. Если произошла ошибка, тогда
значение этой переменной будет установлено равным Nothing.
Это пример того, когда Резюме может быть полезным. Дело в
том, что, хотя мы используем Resume,
мы все равно проверяем наличие ошибки. Подавляющее большинство времени вам не
нужно будет использовать Resume.
On Error Goto [label]
Вот как мы используем обработку ошибок в VBA. Это эквивалент функциональности Try and Catch, которую вы видите на
таких языках, как C # и
Java.
При возникновении ошибки вы отправляете ошибку на
определенный ярлык. Обычно это внизу саба.
Давайте применим это к подводной лодке, которую мы
использовали
Sub IspGotoLine() On Error Goto eh Dim x As Long, y As Long x = 6 y = 6 / 0 x = 7 Done: Exit Sub eh: MsgBox "Произошла следующая ошибка: " & Err.Description End Sub
Снимок экрана ниже показывает, что происходит при возникновении ошибки.
VBA переходит на метку eh, потому что мы указали это в
строке «Перейти к ошибке».
Примечание 1: Метка, которую мы используем в операторе On… Goto, должна быть в текущей Sub / Function. Если нет, вы получите ошибку компиляции.
Примечание 2: Когда возникает ошибка при использовании On Error Goto [label], обработка ошибок возвращается к поведению по умолчанию, т.е. код остановится на строке с ошибкой и отобразит сообщение об ошибке. См. Следующий раздел для получения дополнительной информации об этом.
On Error Goto -1
Это утверждение отличается от других трех. Он используется
для очистки текущей ошибки, а не для настройки конкретного поведения.
При возникновении ошибки с помощью функции On Error Goto [label] поведение обработки ошибки возвращается к поведению по умолчанию, т.е. On Error Goto 0 . Это означает, что если произойдет другая ошибка, код остановится на текущей строке.
Это поведение относится только к текущей подпрограмме. Как
только мы выйдем из саба, ошибка будет очищена автоматически.
Посмотрите на код ниже. Первая ошибка приведет к переходу
кода на метку eh. Вторая ошибка остановится на строке с ошибкой 1034.
Sub DveOshibki() On Error Goto eh ' генерировать ошибку «Несоответствие типов» Error (13) Done: Exit Sub eh: ' генерировать «определенную приложением» ошибку Error (1034) End Sub
Если мы добавим дальнейшую обработку ошибок, она не будет
работать, поскольку ловушка ошибок не была очищена.
В коде ниже мы добавили строку
после того как мы поймаем первую ошибку.
Это не имеет никакого эффекта, так как ошибка не была
очищена. Другими словами, код остановится на строке с ошибкой и отобразит
сообщение.
Sub DveOshibki() On Error Goto eh ' генерировать ошибку «Несоответствие типов» Error (13) Done: Exit Sub eh: On Error Goto eh_other ' генерировать «определенную приложением» ошибку Error (1034) Exit Sub eh_other: Debug.Print "ehother " & Err.Description End Sub
Для устранения ошибки мы используем On Error Goto -1.
Думайте об этом как об установке ловушки для мыши. Когда ловушка сработает, вам
нужно установить ее снова.
В приведенном ниже коде мы добавляем эту строку, и вторая
ошибка теперь приведет к переходу кода на метку eh_other.
Sub DveOshibki() On Error Goto eh ' генерировать ошибку «Несоответствие типов» Error (13) Done: Exit Sub eh: ' явная ошибка On Error Goto -1 On Error Goto eh_other ' генерировать «определенную приложением» ошибку Error (1034) Exit Sub eh_other: Debug.Print "ehother " & Err.Description End Sub
Примечание 1. Вероятно, в редких случаях полезно использовать On Error Goto -1. Мне лично никогда не приходилось пользоваться этой линией. Помните, что как только вы выйдете из Sub, ошибка все равно будет очищена.
Примечание 2. у объекта Err есть член Clear. Использование Clear очищает текст и цифры в объекте Err, но НЕ сбрасывает ошибку.
Использование On Error
Как мы уже видели, VBA будет делать одну из трех вещей при возникновении ошибки:
- Остановитесь и отобразите ошибку.
- Игнорируйте ошибку и продолжайте.
- Перейти к определенной строке.
VBA всегда будет настроен на одно из этих действий. Когда вы
используете On Error, VBA изменит ваше поведение и забудет о любом предыдущем.
В следующем подпункте VBA изменяет поведение ошибки каждый
раз, когда мы используем оператор On Error
Sub ErrorSostoyaniya() Dim x As Long ' Перейти на этикетке, если ошибка On Error Goto eh ' это проигнорирует ошибку в следующей строке On Error Resume Next x = 1 / 0 ' это отобразит сообщение об ошибке в следующей строке On Error Goto 0 x = 1 / 0 Done: Exit Sub eh: Debug.Print Err.Description End Sub
Err объект
При возникновении ошибки вы можете просмотреть детали
ошибки, используя объект Err.
При возникновении ошибки времени выполнения VBA
автоматически заполняет объект Err деталями.
Приведенный ниже код выведет «Error Number: 13 Type
Mismatch», которое возникает, когда мы пытаемся поместить строковое значение в
длинное целое число.
Sub IspErr() On Error Goto eh Dim total As Long total = "aa" Done: Exit Sub eh: Debug.Print "Номер ошибки: " & Err.Number _ & " " & Err.Description End Sub
Err.Description предоставляет подробную информацию об ошибке, которая происходит. Это текст, который вы обычно видите, когда возникает ошибка, например, «Несоответствие типов»
Err.Number — это идентификационный номер ошибки, например, номер ошибки для «Несоответствие типов» — 13. Единственное время, когда вам действительно нужно это, если вы проверяете, что произошла конкретная ошибка, и это необходимо только в редких случаях.
Свойство Err.Source кажется отличной идеей, но оно не работает при ошибке VBA. Источник вернет имя проекта, которое вряд ли сузит место возникновения ошибки. Однако, если вы создаете ошибку с помощью Err.Raise, вы можете установить источник самостоятельно, и это может быть очень полезно.
Получение номера строки
Функция Erl используется для возврата номера строки, где
произошла ошибка.
Это часто вызывает путаницу. В следующем коде Erl вернет ноль.
Sub IspErr() On Error Goto eh Dim val As Long val = "aa" Done: Exit Sub eh: Debug.Print Erl End Sub
Это потому, что нет номеров строк. Большинство людей не
понимают этого, но VBA позволяет вам иметь номера строк.
Если мы изменим подпрограмму, указав номер строки, она теперь выведет 20.
Sub IspErr() 10 On Error Goto eh Dim val As Long 20 val = "aa" Done: 30 Exit Sub eh: 40 Debug.Print Erl End Sub
Добавление номеров строк в код вручную затруднительно.
Однако есть инструменты, которые позволят вам легко добавлять и удалять номера
строк в подпрограмме.
Когда вы закончите работу над проектом и передадите его
пользователю, в этот момент может быть полезно добавить номера строк. Если вы
используете стратегию обработки ошибок в последнем разделе этого поста, то VBA
сообщит строку, где произошла ошибка.
Использование Err.Raise
Err.Raise позволяет нам создавать ошибки. Мы можем
использовать его для создания пользовательских ошибок для нашего приложения,
что очень полезно. Это эквивалент оператора Throw в Java C #.
Формат следующий
Err.Raise [error number], [error source], [error description]
Давайте посмотрим на простой пример. Представьте, что мы
хотим убедиться, что в ячейке есть запись длиной 5 символов. Мы могли бы иметь конкретное сообщение для
этого
Public Const ERROR_INVALID_DATA As Long = vbObjectError + 513 Sub ReadWorksheet() On Error Goto eh If Len(Sheet1.Range("A1")) <> 5 Then Err.Raise ERROR_INVALID_DATA, "ReadWorksheet" _ , "Значение в ячейке A1 должно иметь ровно 5 символов." End If ' продолжить, если ячейка имеет действительные данные Dim id As String id = Sheet1.Range("A1") Done: Exit Sub eh: ' Err.Raise отправит код сюда MsgBox " Обнаружена ошибка: " & Err.Description End Sub
Когда мы создаем ошибку, используя Err.Raise, нам нужно присвоить ей номер. Мы можем использовать любое
число от 513 до 65535 для нашей ошибки. Мы должны использовать vbObjectError с номером,
например
Err.Raise vbObjectError + 513
Использование Err.Clear
Err.Clear используется для очистки текста и чисел из объекта
Err.Object. Другими словами, он очищает описание и номер.
Редко вам понадобится его использовать, но давайте
рассмотрим пример, где вы могли бы.
В приведенном ниже коде мы подсчитываем количество ошибок,
которые могут возникнуть. Для простоты мы генерируем ошибку для каждого
нечетного числа.
Мы проверяем номер ошибки каждый раз, когда проходим цикл.
Если число не равно нулю, то произошла ошибка. Как только мы посчитаем ошибку,
нам нужно установить номер ошибки на ноль, чтобы он был готов проверить
следующую ошибку.
Sub IspErrClear() Dim count As Long, i As Long ' Продолжите, если ошибка, так как мы проверим номер ошибки On Error Resume Next For i = 0 To 9 ' генерировать ошибку для каждого второго If i Mod 2 = 0 Then Error (13) ' Проверьте на ошибку If Err.Number <> 0 Then count = count + 1 Err.Clear ' Очистить Err, как только он считается End If Next Debug.Print " Количество ошибок было: " & count End Sub
Примечание: Err.Clear сбрасывает текст и цифры в объекте ошибки, но не очищает ошибку — см. On Error Goto -1 для получения дополнительной информации об очистке фактической ошибки.
Логирование
Ведение журнала означает запись информации из вашего
приложения, когда оно запущено. При возникновении ошибки вы можете записать
детали в текстовый файл, чтобы у вас была запись об ошибке.
Код ниже показывает очень простую процедуру регистрации
Sub Logger(sType As String, sSource As String, sDetails As String) Dim sFilename As String sFilename = "C:templogging.txt" ' Архивный файл определенного размера If FileLen(sFilename) > 20000 Then FileCopy sFilename _ , Replace(sFilename, ".txt", Format(Now, "ddmmyyyy hhmmss.txt")) Kill sFilename End If ' Откройте файл для записи Dim filenumber As Variant filenumber = FreeFile Open sFilename For Append As #filenumber Print #filenumber, CStr(Now) & "," & sType & "," & sSource _ & "," & sDetails & "," & Application.UserName Close #filenumber End Sub
Вы можете использовать это так:
' Создать уникальный номер ошибки Public Const ERROR_DATA_MISSING As Long = vbObjectError + 514 Sub CreateReport() On Error Goto eh If Sheet1.Range("A1") = "" Then Err.Raise ERROR_DATA_MISSING, "CreateReport", "Данные отсутствуют в ячейке A1" End If ' другой код здесь Done: Exit Sub eh: Logger "Error", Err.Source, Err.Description End Sub
Журнал не только для записи ошибок. Вы можете записывать
другую информацию во время работы приложения. При возникновении ошибки вы
можете проверить последовательность событий до того, как произошла ошибка.
Ниже приведен пример регистрации. То, как вы реализуете
журналирование, зависит от характера приложения и его полезности.
Sub ReadingData() Logger "Information", "ReadingData()", "Starting to read data." Dim coll As New Collection ' Read data Set coll = ReadData If coll.Count < 10 Then Logger "Warning", "ReadingData()", "Number of data items is low." End If Logger "Information", "ReadingData()", "Number of data items is " & coll.Count Logger "Information", "ReadingData()", "Finished reading data." End Sub
Наличие большого количества информации при работе с ошибкой
может быть очень полезным. Часто пользователь может не дать вам точную информацию
об ошибке, которая произошла. Глядя на журнал, вы можете получить более точную
информацию об информации.
Другие элементы, связанные с ошибками
В этом разделе рассматриваются некоторые другие инструменты
обработки ошибок, которые есть в VBA. Эти элементы считаются устаревшими, но я
включил их, поскольку они могут существовать в устаревшем коде.
Функция ошибки
Функция Error используется для печати описания ошибки с
заданным номером ошибки. Он включен в VBA для обеспечения обратной
совместимости и не нужен, поскольку вместо него можно использовать описание
Err.Description.
Ниже приведены некоторые примеры
' Распечатать текст «Деление на ноль» Debug.Print Error(11) ' Распечатать текст "Несоответствие типов" Debug.Print Error(13) ' Распечатать текст "Файл не найден" Debug.Print Error(53)
Заявление об ошибке
Заявление об ошибке позволяет имитировать ошибку. Он включен
в VBA для обратной совместимости. Вместо этого вы должны использовать
Err.Raise.
В следующем коде мы моделируем ошибку «Разделить на ноль».
Sub ZayavlObOshibke() On Error Goto eh ' Это создаст деление на ноль ошибок Error 11 Exit Sub eh: Debug.Print Err.Number, Err.Description End Sub
Это утверждение включено в VBA для обратной совместимости.
Вместо этого вы должны использовать Err.Raise.
Простая стратегия обработки ошибок
Со всеми различными опциями вы можете быть озадачены тем,
как использовать обработку ошибок в VBA. В этом разделе я покажу вам, как
реализовать простую стратегию обработки ошибок, которую вы можете использовать
во всех своих приложениях.
Основная реализация
Это простой обзор нашей стратегии
- Поместите строку On Error Goto Label в начале нашего верхнего Sub.
- Поместите Label у обработки ошибок в конце нашего верхнего
Sub. - Если происходит ожидаемая ошибка, обработайте ее и продолжайте.
- Если приложение не может продолжить работу, используйте Err.Raise для перехода к метке обработки ошибок.
- В случае непредвиденной ошибки код автоматически перейдет к метке обработки ошибок.
На следующем рисунке показан обзор того, как это выглядит
Следующий код показывает простую реализацию этой стратегии
Public Const ERROR_NO_ACCOUNTS As Long = vbObjectError + 514 Sub BuildReport() On Error Goto eh ' Если ошибка в ReadAccounts, то перейти к ошибке ReadAccounts ' Сделай что-нибудь с кодом Done: Exit Sub eh: ' Все ошибки будут прыгать сюда MsgBox Err.Source & ": Произошла следующая ошибка " & Err.Description End Sub Sub ReadAccounts() ' ОЖИДАЕМАЯ ОШИБКА - Может обрабатываться кодом ' Приложение может обрабатывать A1 равным нулю If Sheet1.Range("A1") = 0 Then Sheet1.Range("A1") = 1 End If ' ОЖИДАЕМАЯ ОШИБКА - не может быть обработана кодом ' Приложение не может быть продолжено, если нет учетной записи If Dir("C:ДокументыОтчет.xlsx") = "" Then Err.Raise ERROR_NO_ACCOUNTS, "UsingErr" _ , "There are no accounts present for this month." End If ' НЕОЖИДАННАЯ ОШИБКА - не может быть обработана кодом ' Если ячейка B3 содержит текст, мы получим ошибку несоответствия типов Dim total As Long total = Sheet1.Range("B3") ' продолжить и читать счета End Sub
Это хороший способ реализации обработки ошибок, потому что
- Нам не нужно добавлять код обработки ошибок в
каждую подпрограмму. - Если возникает ошибка, то VBA корректно
завершает работу приложения.
Полная стратегия обработки ошибок
Стратегия выше имеет один недостаток. Он не сообщает вам,
где произошла ошибка. VBA не наполняет Err.Source чем-либо полезным, поэтому мы
должны сделать это сами.
В этом разделе я собираюсь представить более полную
стратегию ошибок. Я написал два сабвуфера, которые выполняют всю тяжелую
работу, поэтому все, что вам нужно сделать, это добавить их в свой проект.
Целью этой стратегии является предоставление вам стека * и
номера строки в случае возникновения ошибки.
* Стек — это список вспомогательных функций, которые
использовались в данный момент при возникновении ошибки.
Это наша стратегия
- Разместите обработку ошибок во всех
подпрограммах. - Когда происходит ошибка, обработчик ошибок
добавляет подробности к ошибке и вызывает ее снова. - Когда ошибка достигает самой верхней
подпрограммы, она отображается.
Мы просто «всплываем» из-за ошибки. Следующая диаграмма
показывает простое визуальное представление о том, что происходит, когда в Sub3
возникает ошибка
Единственная грязная часть этого — правильное форматирование
строк. Я написал две подводные лодки, которые справляются с этим, поэтому он
позаботится о вас.
Это две вспомогательные подводные лодки
Option Explicit Public Const MARKER As String = "NOT_TOPMOST" ' Вызывает ошибку и добавляет номер строки и имя текущей процедуры Sub RaiseError(ByVal errorno As Long, ByVal src As String _ , ByVal proc As String, ByVal desc As String, ByVal lineno As Long) Dim sLineNo As Long, sSource As String ' Если маркера нет, тогда RaiseError вызывается впервые. If Left(src, Len(MARKER)) <> MARKER Then ' Добавить номер строки ошибки, если она есть If lineno <> 0 Then sSource = vbCrLf & "Line no: " & lineno & " " End If ' Добавить маркер и процедуру к источнику sSource = MARKER & sSource & vbCrLf & proc Else ' Если ошибка уже возникла, просто добавьте имя процедуры sSource = src & vbCrLf & proc End If ' Если код останавливается здесь, убедитесь, что DisplayError находится в верхней части Sub Err.Raise errorno, sSource, desc End Sub ' Отображает ошибку, когда она достигает самого верхнего sub ' Примечание: вы можете добавить вызов для входа из этого подпункта Sub DisplayError(ByVal src As String, ByVal desc As String _ , ByVal sProcname As String) ' Удалить маркер src = Replace(src, MARKER, "") Dim sMsg As String sMsg = " Произошла следующая ошибка: " & vbCrLf & Err.Description _ & vbCrLf & vbCrLf & " Расположение ошибки: " sMsg = sMsg + src & vbCrLf & sProcname ' Показать сообщение MsgBox sMsg, Title:="Ошибка " End Sub
Пример использования этой стратегии
Вот простое кодирование, которое использует эти Sub. В этой стратегии мы не размещаем какой-либо код в верхнем подпрограмме. Мы только вызываем подводные лодки.
Sub Topmost() On Error Goto EH Level1 Done: Exit Sub EH: DisplayError Err.source, Err.Description, "Module1.Topmost" End Sub Sub Level1() On Error Goto EH Level2 Done: Exit Sub EH: RaiseError Err.Number, Err.source, "Module1.Level1", Err.Description, Erl End Sub Sub Level2() On Error Goto EH ' Ошибка здесь Dim a As Long a = "7 / 0" Done: Exit Sub EH: RaiseError Err.Number, Err.source, "Module1.Level2", Err.Description, Erl End Sub
Результат выглядит так
Если в вашем проекте есть номера строк, результат будет содержать номер строки ошибки.
Примечание: вы можете получить следующую ошибку при использовании этого кода:
“Programmatic Access to Visual Basic Project is not trusted”
Чтобы решить эту проблему, выполните следующие действия.
- Перейдите в раздел «Разработчик» на ленте и
нажмите «Macro Security», которая находится под кодом. - Нажмите «Настройка макроса» в левом списке.
- Поставьте флажок в поле «Доверительный доступ к
объектной модели проекта VBA». - Нажмите Ok.
Обработка ошибок в двух словах
- Обработка ошибок используется для обработки ошибок, возникающих во время работы приложения.
- Вы пишете определенный код для обработки ожидаемых ошибок. Вы используете оператор обработки ошибок VBA
On Error Goto [label] для отправки VBA на метку при возникновении непредвиденной ошибки. - Вы можете получить подробную информацию об ошибке из Err.Description.
- Вы можете создать свою собственную ошибку, используя Err.Raise.
- Использование одного оператора On Error в самой верхней подпрограмме перехватит все ошибки в подпрограммах, которые вызываются отсюда.
- Если вы хотите записать имя Sub с ошибкой, вы можете обновить ошибку и сбросить ее.
- Вы можете использовать журнал для записи информации о приложении, когда оно запущено.
Не работают макросы в Excel? Включите их выполнение, добавьте специальный модель с кодом, проверьте версию ОС и Эксель, убедитесь в соответствии пакета приложений, активируйте Майкрософт Офис, снимите блокировку файла, проверьте систему безопасности и применяемые библиотеки. Ниже подробно рассмотрим, в чем могут быть причины подобной неисправности, и какие шаги предпринимать для ее устранения.
Причины
Для начала стоит разобраться, почему не работает макрос в Excel, ведь от этого зависят дальнейшие шаги. К основным причинам стоит отнести:
- Функция отключена.
- Отключение отслеживания событий.
- Устаревшая операционная система.
- Несоответствие разработчика пакета офисных приложений.
- Устаревшая версия Майкрософт Офис.
- Неактивированная версия Excel.
- Заблокированный файл.
- Неправильные настройки безопасности.
- Отсутствие необходимой библиотеки и т. д.
Выше рассмотрены основные причины, почему не удается выполнить макрос в Excel. Все они могут быть решены самостоятельно с помощью приведенных ниже рекомендации. Подробнее на решении вопроса остановимся ниже.
Что делать
Многие пользователи теряются в ситуации, когда не включаются или вообще не работают макросы в Excel. Такая проблема не дает нормально пользоваться приложением и заставляет искать альтернативные варианты.
Включите опцию
Первое, что необходимо сделать — включить функцию для обеспечения ее работоспособности. Здесь многое зависит от версии Эксель.
Если не работают макросы в Excel 2003, сделайте следующие шаги:
- Войдите в «Сервис».
- Перейдите в раздел «Безопасность».
- Кликните «Уровень макросов «Низкий».
В случае, когда не работают макросы в Excel 2007, включите их следующим образом:
- Жмите на кнопку «Офис».
- Войдите в параметры Excel.
- Кликните на «Центр управления безопасности».
- Войдите в «Параметры центра управления безопасностью».
- Жмите на «Параметры макросов».
- Кликните на «Разрешить все …».
В ситуации, когда не работают макросы в Excel 2016, сделайте следующие шаги:
- Войдите в раздел «Файл».
- Кликните на кнопку «Параметры».
- Зайдите в «Центр управления безопасностью».
- Войдите в «Параметры центра управления безопасностью».
- Кликните на «Параметры …».
- Жмите на «Разрешить все …».
После внесения изменений параметра безопасности перезапустите приложение Excel, а именно закройте его полностью и откройте снова. Лишь после этого изменения вступают в силу.
Добавьте нужный модуль в книгу
Бывают ситуации, когда макросы включены, но не работают в Excel из-за отключения каким-либо элементом отслеживания событий. В таком случае сделайте следующее:
- Перейдите в редактор VBA с помощью клавиш Alt+F11.
- Вставьте указанный ниже код.
Sub Reset_Events()
Application.EnableEvents = True
End Sub
- Для выполнения кода поставьте курсор в любой точке между началом и концом.
- Кликните F5.
Проверьте операционную систему
В ситуации, когда не отображаются макросы в Excel, обратите внимание на тип операционной системы. К примеру, Майкрософт Офис, который подходит для Виндовс, на Мак ОС уже работать не будет. Причина в том, что в приложении используются разные библиотеки. Даже если надстройки и функционируют, могут быть сбои в работе. Вот почему при появлении проблем нужно проверить ОС на соответствие.
Обратите внимание на разработчика
Если в Экселе не работают макросы, причиной может быть другой разработчик. Так, пользователи Excel часто применяют OpenOffice или LibreOffice. Эти пакеты созданы на разных языках программирования, которые имеют индивидуальные особенности. Так, если надстройки написаны на Visual Basic for Application, он может не работать в указанных выше офисных приложениях. Вот почему необходимо уточнять, для какого пакета создан макрос / надстройка.
Проверьте версию Майкрософт Офис
В Макрософт Офис 2003 применяются надстройки xla для Excel. В современных версиях расширение поменялось на xlam. Если ставить макросы старого типа в приложения Офис 2007 и больше, никаких трудностей не происходит. Если же вы попытаетесь поставить новую надстройку на старую версию Excel, она зачастую не работает. Вот почему важно обратить внимание на этот параметр при выборе.
Убедитесь в наличии пакета VBA
Одной из причин, почему не запускается макрос в Excel, может быть отсутствие пакета VBA. Для успешного запуска надстройки необходимо, чтобы этот пакет был установлен. Иногда он уже установлен в Офис, но так происходит не всегда. Для проверки жмите комбинацию на Alt+F11. Если после этого появляется Visual Basic, компонент можно считать установленным. В ином случае его нужно поставить. Для этого:
- Зайдите в «Пуск», а далее «Панель управления / Программы и компоненты».
- Выберите программу Майкрософт Офис.
- Жмите на кнопку «Изменить».
- Запустить файл установки Setup.exe.
- Кликните на «Добавить или удалить компоненты».
- Выберите в списке Visual Basic и установите его.
Активируйте Офис
Если в Excel 2007 не работает кнопка «макросы», причиной может быть отсутствие активации приложения. Для этого жмите на кнопку «Активировать» и следуйте инструкции. В большинстве случаев такая опция является платной.
Снимите блокировку файла
Учтите, что документ, полученный с другого ПК / ноутбука, может заблокироваться. Для разблокировки файла нужно нажать ПКМ и в разделе «Общие» кликнуть на «Разблокировать».
Проверьте библиотеки
В случае, когда параметры макросов не активны в Excel, причиной может быть появление ошибки «Can’t find project or library». При этом, надстройка работает на другом ПК / ноутбуке, а здесь возникают проблемы. Ошибку легко устранить, если в окне, которое идет за сообщением об ошибке, снять отметки в полях Missing. Для вызова окна можно выбрать пункт меню Tools / References.
Проверьте настройки безопасности
В ситуации, когда не работают макросы в Excel, можно добавить надежные расположения или настроить доступ к объектной модели VBA. Для этого в Офис 2007 необходимо сделать следующее:
- Войдите в Меню
- Кликните на пункт «Параметры».
- Жмите на «Центр управления безопасностью».
- Войдите в «Параметры центра управления безопасностью».
- Кликните на «Параметры макросов» и «Доверять доступ к объектной модели проектов».
Зная, почему не работают макросы в Excel, вы можете с легкостью исправить проблему и восстановить работоспособность. Если же сложности в работе возникают, вы всегда можете воспользоваться инструкцией в статье.
В комментариях расскажите, какой из приведенных выше вариантов вам помог, и что еще можно сделать.
Отличного Вам дня!
В последних нескольких ситуациях некоторые из наших читателей сталкивались с серьезным сообщением об ошибке с номером ошибки 2950 этого макроса доступа ms. Есть ряд факторов, которые могут вызвать эту проблему. Давайте обсудим это сейчас.
ПК работает медленно?
Улучшите скорость своего компьютера сегодня, загрузив это программное обеспечение — оно решит проблемы с вашим ПК. г.
Если выражение оценивается так, что вы получаете True (-1), Access останавливает все макросы. В идеале ваша компания могла бы иметь макрос с частым сообщением как одно из многих сложных действий, включая активацию всех других макросов.
Как часто вы получаете сообщение об ошибке “Action Failed Access 2950” в своей базе данных Access? Вы ищете другие мгновенные решения для решения такой актуальной проблемы? Что ж, если так, то этот пост может показаться вам вполне достижимым. Поскольку это сделано из полного решения для MS Answer Access Action Failure Error Number: 2950.
Многие уязвимости в составе MS Access являются источником множества ошибок макросов. Что ж, макросы в основном используются для обучения какой-либо автоматизации доступа, но сценарии, которые позволяют запускать макросы, должны быть легко вредными. Это приводит к неожиданной ошибке макроса: «Action Failed Error Number: 2950».
Давайте перейдем к поиску основных причин следующей ошибки, чтобы исправить ошибку доступа к базе данных MS 2950 для простых решений.
Об ошибке MS Access 2950:
1] Активировать строку для текущего сеанса Это решение может хорошо работать для всех версий Microsoft Access. На панели сообщений щелкните Параметры. По сути, в диалоговом окне «Параметры безопасности Microsoft Office» нажмите «Включить это содержимое», а затем нажмите «ОК».
Наиболее похожие на эти ошибки случаются только с пользователями, которые во многих случаях запускают базу данных, что неэффективно и всегда в основном использовалось в MS Access.
Ошибка MS Access 2950 — это формат статистики с числовым кодом ошибки, разработанный Windows как популярная ошибка стиля, в дополнение к версиям и программам совместимых производителей оборудования для оборудования Microsoft Windows.
Этот тип в компьютерном коде обычно используется в рекламе, чтобы помочь вам обнаружить ошибки. Ошибка Microsoft Access 2950 содержит правильное краткое понятное описание вместе с числовой коллекцией. В некоторых ситуациях большинство из них может управлять дополнительными параметрами в формате ошибки Microsoft Access 2950. Дополнительным числовым кодом для одной конкретной неудачной попытки продажи является адрес обычно загружаемых политиками элементов памяти, а также час сбоя. .
Что вызывает код ошибки базы данных MS Access 2950?
Когда Visual Classic должен использоваться просто с помощью макросов (VBA), возрастает потребность в вызове VBA с помощью определенной команды. Так что в этом случае вся ваша семья получит все ошибки:
<цитата>
Действие не выполнено, процент ошибок 2950
< / р >
Эта конкретная проблема обычно возникает, когда база данных неэффективна, когда Access не работает. Если оплата не производится, MS Access открывает ненадежный каталог в отключенном стиле. Потому что в этом режиме содержимое exe может быть описано как отключенное.
Как исправить ошибку Microsoft Access?
Восстановление из более ранней резервной копии.Используйте базу данных для сжатия и восстановления.Используйте всю утилиту Microsoft Jet Compact.Создайте новую базу данных MS Access и импортируйте поврежденные файлы.Используйте какую-нибудь программу восстановления.
Сообщение об ошибке 2950 Access 2016 появится только из-за стандартного сбоя Microsoft Windows. Обычно отсутствующие системные файлы представляют большую угрозу для жизни вашего компьютера. Может быть так много скриптов, которые могут уменьшить отправку системы, например:
Эти грубые ошибки также возникали при заражении последнего компьютера или блокнота рекламным/шпионским ПО, аппаратным вирусом или в результате некорректного выключения компьютера. Любые действия, связанные с этими действиями, могут повредить или удалить файлы статистики, связанные с системой Windows, и поврежденные сетевые файлы, что приведет к повреждению или потере файлов данных и связанных данных, которые абсолютно необходимы для правильного функционирования домашнего компьютера.
Ручные исправления для исправления ошибки Microsoft Access 2950
Если вы получаете стандартную ошибку быстрого доступа 2950 и хотите ее исправить, вы можете использовать методы, описанные ниже.
Способ 1. Расширенное решение для пользователей компьютеров
<ул>
Способ 2. Активация базы данных
<ул>
<ул>
В дополнение к активации базы данных обычно следует попытаться переместить базу данных в одно более безопасное место. Чтобы таких ситуаций больше не возникало.
Способ 3. Переместите базу данных в другое безопасное место
<ул>
<ул>
<ул>
<ул>
Как включить макросы в access?
Щелкните прикрепленный к вкладке «Файл».В области «Предупреждение системы безопасности» выберите «Включить содержимое».Выберите Дополнительные параметры.В диалоговом окне «Параметры безопасности Microsoft Office» установите флажок «Включить содержимое в этот сеанс» для каждого отдельного макроса.Нажмите «ОК».
Аналогичным образом вы успешно переместите базу данных на доверенный адрес, что может помочь уменьшить количество ошибок базы данных MS Access.
Способ 4. Настройка макроса AutoExec
В таких непредвиденных ситуациях вы, возможно, даже настроите мастер AutoExec, и этот макрос наверняка предупредит вас о ненадежном статусе каждой нашей базы данных каждый раз, когда вы открываете базу данных. Чтобы настроить автоматическое выполнение, выполните следующие действия:
<ол>
7. Перейдите к столбцу «ActionMe», затем щелкните параметр «Открыть форму».
Применяя остальные решения, мы можем выяснить все причины, чтобы избежать ошибки # 2950 в отношении неудавшегося действия. Но поскольку большинство пользователей будут заняты резервным копированием базы данных, ситуация в конечном итоге приведет к повреждению фактов MDB ИЛИ ACCDB, что приведет к фатальной потере данных.
Альтернативный метод: выберите метод, рекомендованный профессионалом
Чтобы восстановить базу данных на несогласованный конвейер, вам может понадобиться помощь соответствующего стороннего инструмента. Вы можете использовать MS Access Repair To Fix Access Tool для ошибки 2013 года 2950. Он может легко восстановить, а затем восстановить поврежденные, поврежденные и недоступные данные. С помощью этого типа инструмента во многих случаях вы можете легко восстановить базу данных из любой поврежденной версии.
ПК работает медленно?
ASR Pro — идеальное решение для ремонта вашего ПК! Он не только быстро и безопасно диагностирует и устраняет различные проблемы с Windows, но также повышает производительность системы, оптимизирует память, повышает безопасность и точно настраивает ваш компьютер для максимальной надежности. Так зачем ждать? Начните сегодня!
* Нажимая любую кнопку загрузки выше и устанавливая Repair Great for Access (14,8 МБ), я подтверждаю, что правильно ознакомился с Лицензионным соглашением с конечным пользователем и Политикой конфиденциальности и что я согласен с их веб-сайтом.
Улучшите скорость своего компьютера сегодня, загрузив это программное обеспечение — оно решит проблемы с вашим ПК. г.
How To Troubleshoot Ms Access Macro Error Number 2950
Ms 액세스 매크로 오류 다양한 2950 문제를 해결하는 방법
Jak Upewnić Się, że Rozwiązujesz Problem Z Błędem Makra Dostępu Ms O Numerze 2950
Comment Dépanner Ms Obtenir Le Numéro D’erreur De Macro 2950
Hur Man Felsöker Ms Få Makrofel Nummer 2950
Como Solucionar Problemas De Ms, Digite O Número De Erro De Macro 2950
Hoe Kan Ik Ms Access Macro Foutnummer 2950 Diagnosticeren
Cómo Solucionar El Error De Macro De MS Access Número 2950
So Beheben Sie Die Fehlernummer 2950 Des Ms-Zugriffsmakros Schließlich
Come Risolvere L’errore Macro Di Accesso Dell’azienda Di Microsoft Numero 2950
г.
0 / 0 / 0 Регистрация: 01.04.2011 Сообщений: 43 |
|
1 |
|
Вылетает ошибка «Ошибка выполнения макрокоманды»11.04.2011, 14:21. Показов 10887. Ответов 9
При загрузке вылетает ошибка «Ошибка выполнения макрокоманды» имя макроса: Autoexec; условие: истина; макрокоманда:ЗапускПрограммы; аргументы: funStartLink. Что не так???
0 |
3353 / 1772 / 83 Регистрация: 05.08.2010 Сообщений: 4,471 |
|
11.04.2011, 14:31 |
2 |
funStartLink()
0 |
0 / 0 / 0 Регистрация: 01.04.2011 Сообщений: 43 |
|
11.04.2011, 16:58 [ТС] |
3 |
Не понял она и должна вызываться…
0 |
3353 / 1772 / 83 Регистрация: 05.08.2010 Сообщений: 4,471 |
|
11.04.2011, 17:05 |
4 |
Не понял она и должна вызываться… Да,только надо прописать в макросе имя функции с кавычками () я отсюда не вижу…
0 |
0 / 0 / 0 Регистрация: 01.04.2011 Сообщений: 43 |
|
11.04.2011, 19:59 [ТС] |
5 |
Можете пример: «функция()» И еще Номер ошибки: 2950 Добавлено через 6 минут
0 |
1904 / 781 / 31 Регистрация: 11.02.2010 Сообщений: 1,567 |
|
11.04.2011, 22:15 |
6 |
имя функции с кавычками () имелось в виду со скобками
0 |
3353 / 1772 / 83 Регистрация: 05.08.2010 Сообщений: 4,471 |
|
12.04.2011, 09:28 |
7 |
имелось в виду со скобками А я написал с «кавычками»?…совсем уже потерялся я… Сделал так ‘funStartLink()’ вроде перестала. Но правильно ли это??? Да правильно.
0 |
0 / 0 / 0 Регистрация: 25.12.2014 Сообщений: 18 |
|
25.12.2014, 12:17 |
8 |
Здравствуйте
0 |
8760 / 5609 / 576 Регистрация: 27.03.2013 Сообщений: 19,045 |
|
25.12.2014, 19:34 |
9 |
А мастером создания кнопок пробовали?
0 |
0 / 0 / 0 Регистрация: 25.12.2014 Сообщений: 18 |
|
29.12.2014, 14:15 |
10 |
Пробовала, именно тогда и выдавал ошибку, решила эту проблему вот так:Номер ошибки 2950
0 |