Код VBA для закрытия базы данных Access, не оставляя оболочку приложения открытой

в настоящее время я использую Application.Quit который оставляет оболочку приложения MS Access открытой.

после обработки вызывающей функции против целевого приложения я остаюсь с каждым экземпляром приложения, остающимся открытым; даже если конкретный экземпляр базы данных закрыт.

как сделать окно приложения "оболочка" базы данных закрытым программно с помощью VBA?

вот пример того, как создается переменная и как я его закрываю:--3-->

Dim appAccess As New Access.Application

' Do stuff here...

appAccess.CloseCurrentDatabase

7 ответов


вам нужно выполнить приложение.Завершите работу с переменной экземпляра.

например,

Dim appAccess As New Access.Application

' Do stuff here...

appAccess.Application.Quit

согласно документации:приложение.Quit делает то же самое как метод docmd.Quit. А именно

метод Quit завершает работу Microsoft Access. Вы можете выбрать один из нескольких параметры сохранения объекта базы данных перед завершением работы.

вы можете попробовать вызвать любой из них с параметром acQuitSaveNone или 2, который "выходит из Microsoft Access без сохранения каких-либо объектов". При дальнейшем рассмотрении используйте Application.Quit as DoCmd.Quit был добавлено для обратной совместимости для Access 95 (см. примечания для метода Quit, применяемого к объекту DoCmd.) Выполнение любого из них должно по-прежнему выполнять автоматический компакт на close, если у вас есть разрешения, которые могут быть причиной ваших оболочек.

если это не сработает для вас, вот несколько крайнее предложение. Сохраните это как файл vbscript и вызовите его, как только вы действительно закончите с доступом. Это завершит все процессы MSAccess на вашем ПК с windows, без уплотнение и ремонт.

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_Process WHERE Name = 'msaccess.exe'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next

для вызова скрипта, заменяющего [vbspath]фактическим путем. Если путь имеет пробелы, обязательно используйте двойные кавычки и поместите его в кавычки:

shell "cscript [vbspath]"

Я всегда использую DoCmd.Quit acQuitSaveAll.
Это работает по крайней мере в Access 2000, 2003 и 2010 (вот где я видел его работы).


Access.Quit работает для меня. Может быть, попробуйте это вместо Application.Quit?

Если это не решит его, ваша проблема может быть в другом месте, и в этом случае, пожалуйста, расскажите нам больше об этом проекте.


метод docmd.Бросить acQuitSaveAll, работал в конце концов. Я пробовал все другие варианты раньше, и оболочка все еще висела сзади.


переключить форму в режим конструктора. Набор формы BorderStyle свойство None. На посмотреть, нажмите кнопку Формы. Обратите внимание, что строка заголовка формы полностью удалена.


значит он оставляет УМК.окно оболочки exe открыто после, по-видимому, завершения и MSACCESS.EXE процесс работает в фоновом режиме в TaskList? И оболочка вызывается в фоновом режиме?