database - Código VBA para cerrar una base de datos de acceso sin dejar un shell de la aplicación abierta
ms-access access-vba (7)
De acuerdo con la documentación: Application.Quit hace lo mismo que DoCmd.Quit . A saber
El método Quit sale de Microsoft Access. Puede seleccionar una de varias opciones para guardar un objeto de base de datos antes de salir.
Puede intentar llamar a cualquiera de ellos con el parámetro acQuitSaveNone
o 2 que "cierra Microsoft Access sin guardar ningún objeto". Tras una revisión posterior, use Application.Quit
como DoCmd.Quit
se agregó para compatibilidad con versiones anteriores para Access 95 (consulte los comentarios para el método de abandono, ya que se aplica al objeto DoCmd). Hacer cualquiera de estos debe hacer un compacto automático al cerrar si tiene los permisos, que pueden ser la causa de tus proyectiles.
Si eso no funciona para usted, aquí hay una sugerencia algo extrema. Guárdelo como un archivo vbscript y llámelo una vez que haya terminado con Access. Esto terminará todos los procesos de MSAccess en su PC con Windows, sin compactar ni reparar.
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
Llamar a la secuencia de comandos reemplazando [vbspath] con la ruta real. Si la ruta tiene espacios, asegúrese de usar comillas dobles y ponerlo entre comillas:
shell "cscript [vbspath]"
Actualmente estoy usando Application.Quit
que deja abierto un shell de la aplicación MS Access.
Después de procesar la función de llamada en contra de la aplicación de destino, me quedan todas las instancias de la aplicación que aún permanecen abiertas; aunque la instancia específica de la base de datos esté cerrada.
¿Cómo cierro programáticamente la ventana de la aplicación ''shell'' de la base de datos usando VBA?
Aquí hay un ejemplo de cómo se crea la variable y cómo la estoy cerrando:
Dim appAccess As New Access.Application
'' Do stuff here...
appAccess.CloseCurrentDatabase
Siempre uso DoCmd.Quit acQuitSaveAll
.
Esto funciona al menos en Access 2000, 2003 y 2010 (ahí es donde lo he visto funcionar).
Access.Quit
funciona para mí. Tal vez intente eso en lugar de Application.Quit
?
Si eso no lo resuelve, su problema puede estar en otra parte, en cuyo caso cuéntenos más sobre este proyecto.
¿Quiere decir que deja una ventana de shell cmd.exe abierta después de aparentemente finalizar y un proceso MSACCESS.EXE ejecutándose en segundo plano en TaskList? Y el shell se llama en el fondo?
Necesita ejecutar Application.Quit contra la variable de instancia.
Por ejemplo,
Dim appAccess As New Access.Application
'' Do stuff here...
appAccess.Application.Quit
DoCmd.Quit acQuitSaveAll, trabajado por fin. Probé todas las otras opciones antes y un caparazón todavía estaba colgando.
Cambia el formulario a la vista Diseño. Establezca la propiedad BorderStyle
del formulario en None
. En el menú Ver , haga clic en Vista de formulario . Tenga en cuenta que la barra de título del formulario se elimina por completo.