Форма MS Access не работает после включения небезопасного контента

У меня есть проект MS Access, который был разработан в MS Access 97. Я успешно преобразовал его в MS Access 2016 (хотя это была длинная история). Все выглядит нормально, но я заметил очень странное поведение.

Когда пользователь впервые открывает файл проекта в клиентском режиме, появляется множество ошибок макросов. Это нормально, потому что пользователь еще не разрешил небезопасное содержимое в этом файле. Итак, после того, как пользователь закрыл все ошибки, он нажимает кнопку «Разрешить небезопасное содержимое» и закрывает файл. Теперь пользователь снова открывает проект, и он не работает должным образом. Вызываются некоторые формы, которые не должны вызываться, и появляется ошибка «Модуль не найден». Никаких модулей для этой программы я не разрабатывал. Таким образом, это означает, что если пользователь открывает файл, не допустив сначала небезопасный контент, проект полностью испортится, и его невозможно будет восстановить, если вы не замените файл новой копией.

Однако, если у пользователя есть свежая копия файла проекта .accdb, и файл находится в надежном месте, все работает нормально. Еще один способ заставить проект работать правильно, не помещая его в надежное место, — открыть его, удерживая клавишу Shift и нажав кнопку «Разрешить небезопасный контент». Затем пользователь может нормально запустить файл двойным щелчком, и он работает так, как должен.

Таким образом, открытие этого файла без доступа к небезопасному содержимому сначала нарушит работу проекта. Я также пытался открыть код VBA формы, которая вызывается по умолчанию, и окна кода VBA выглядят замороженными. Другие формы работают нормально. введите здесь описание изображения

Как я могу отладить эту проблему?

UPD: действительно похоже, что проблема вызвана попыткой запуска макросов, когда небезопасное содержимое не включено.

UPD: Я заметил еще одну вещь - если я запускаю проект, не разрешая сначала небезопасный контент, но не нажимаю "разрешить контент", а просто закрываю программу - я все еще могу запустить это из надежного места. Таким образом, повреждение происходит только после того, как я нажму кнопку «включить контент». В моей форме есть макрос с прикрепленным действием OnClose. Но пробовал удалять все макросы из этой формы и не помогло.


person fakemeta    schedule 11.01.2017    source источник
comment
Вы делаете несколько ложных предположений. Прежде всего, в вашей базе данных есть модули. В тот момент, когда записывается одно событие в одной форме, генерируется модуль для этой формы. Во-вторых, и это самое главное, вы серьезно относитесь к словам «небезопасный контент». Для MS Access каждый бит кода VBA небезопасен. Это предназначено для защиты от открытия случайного файла, который вы скачали из Интернета или получили по электронной почте. Для файла, разработанного собственными силами, это не только безопасно, но и важно, чтобы VBA работал беспрепятственно.   -  person SunKnight0    schedule 11.01.2017
comment
@ SunKnight0 Я не имел в виду, что в моей базе данных нет модулей. Я имел в виду, что не разрабатывал ничего из этого. И вы правы, нет ничего плохого в том, чтобы позволить Access запускать небезопасный код в этом файле, и я понимаю, что означает небезопасность. Могут быть случаи, когда новые пользователи в свежеустановленной Windows случайно дважды щелкают файл .accdb, не разрешив сначала небезопасное содержимое, и это ломает мою программу. В этом случае мне придется дать им свежую копию проекта. Это проблема для меня.   -  person fakemeta    schedule 11.01.2017
comment
@SunKnight0 Чтобы быть более ясным - обычно, когда пользователь запускает новый файл .accdb с макросами, во время запуска возникают ошибки (вещи о небезопасных действиях в макросах и т. Д.), И появляется кнопка «Включить содержимое». Когда пользователь нажимает кнопку, программа перезапускается без ошибок макросов и работает нормально. Но в моем случае программа перезапускается с повреждениями, и я не могу восстановить эти повреждения.   -  person fakemeta    schedule 11.01.2017
comment
Это довольно странно. Это один файл или он ссылается на внешние данные? Если это так, и в зависимости от того, как связаны внешние данные, это может объяснить, почему они ломаются. Если вы находитесь в среде домена Windows, вы можете настроить доступ для постоянного запуска небезопасного контента с помощью групповой политики. Не объясняет, почему это происходит, но обходит проблему.   -  person SunKnight0    schedule 11.01.2017
comment
@ SunKnight0 Да, это один файл.   -  person fakemeta    schedule 11.01.2017
comment
@ SunKnight0 Может быть, MS Access автоматически удаляет некоторые части кода, которые он считает небезопасными, во время запуска без включения небезопасного содержимого?   -  person fakemeta    schedule 11.01.2017
comment
Извините редактировал. См. мое предложение групповой политики. Что касается причины сбоя, найдите любой макрос или код запуска или код OnOpen/OnLoad в форме запуска.   -  person SunKnight0    schedule 11.01.2017
comment
Я никогда не видел, чтобы MS Access навсегда удалял код.   -  person SunKnight0    schedule 11.01.2017
comment
@ SunKnight0 Ну, изменение групповых политик - это еще один способ обойти эту ошибку. Но в моем случае мне действительно нужно исправить это, чтобы предотвратить глупые ситуации. 20 минут назад пользователь пришел и попросил еще одну копию этой программы, потому что он переместил .accdb в другую папку и забыл добавить его в надежное место перед запуском.   -  person fakemeta    schedule 11.01.2017
comment
Конечно, но он обходит его постоянно. В любом случае, не глядя на файл, я даже не могу догадаться, почему он на самом деле ломается. Попробуйте отключить стартовую форму/макрос и открыть его и посмотреть, не сломает ли это его.   -  person SunKnight0    schedule 12.01.2017
comment
@ SunKnight0 Я обновил свой вопрос.   -  person fakemeta    schedule 12.01.2017
comment
На основании обновления кажется, что ваша проблема определенно связана с кодом, который работает, но не полностью (например, ваш конечный код работает, а ваш код запуска - нет). В дополнение к отключению любых макросов вам также придется отключить любой код VBA OnOpen, OnCurrent, OnLoad и OnClose (и, возможно, больше, что я упустил) для любой формы/подформы, которая может быть активирована, для устранения неполадок.   -  person SunKnight0    schedule 12.01.2017
comment
@SunKnight0 Да, я думаю, это хорошая идея. Завтра проверю и скажу о результатах.   -  person fakemeta    schedule 12.01.2017
comment
@ SunKnight0 Я удалил ВЕСЬ код VBA из формы запуска, и это не помогло. Но я нашел решение и опубликовал его как ответ.   -  person fakemeta    schedule 13.01.2017


Ответы (1)


Я столкнулся с некоторыми более странными проблемами, и при их отладке обнаружил, что в системе есть следы MS Office 2000. Я решил удалить MS Office, почистить реестр Windows и снова установить MS Office. Это решило все мои проблемы.

person fakemeta    schedule 13.01.2017