Код 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? И оболочка вызывается в фоновом режиме?