2012-09-17 315 views
8

Actualmente estoy usando Application.Quit, lo que deja un shell de la aplicación MS Access abierto.Código VBA para cerrar una base de datos de acceso sin dejar un shell de la aplicación abierta

Después de procesar la función de llamada contra la aplicación de destino, me queda con cada instancia de la aplicación que aún permanece abierta; aunque la instancia específica de la base de datos esté cerrada.

¿Cómo hago para que la ventana de la aplicación 'shell' de la base de datos se cierre programáticamente usando VBA?

Aquí es un ejemplo de cómo se crea la variable y la forma en que estoy cerrando:

Dim appAccess As New Access.Application 

' Do stuff here... 

appAccess.CloseCurrentDatabase 
+0

¿Cómo invoca estas 50 conchas? ¿Abrió cada uno de estos manualmente, o fueron abiertos por código? – dmarra

+0

Abierto por código. –

Respuesta

4

Necesita ejecutar Application.Quit contra la variable de instancia.

Por ejemplo,

Dim appAccess As New Access.Application 

' Do stuff here... 

appAccess.Application.Quit 
3

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.

5

Siempre uso DoCmd.Quit acQuitSaveAll.
Esto funciona al menos en Access 2000, 2003 y 2010 (es donde he visto visto funciona).

8

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 como added for backward compatibility for Access 95 (consulte las observaciones sobre el Método de abandono, tal como se aplica al objeto DoCmd). Hacer cualquiera de estos dos debe hacer un compacto automático al cerrar si tiene los permisos, que pueden ser la causa de usted conchas

Si eso no funciona para usted, aquí hay una sugerencia un tanto 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]" 
0

¿Quiere decir que deja una ventana de shell cmd.exe abierta al parecer después de acabado y un proceso MSACCESS.EXE ejecuta en segundo plano en la lista de tareas? Y el shell se llama en el fondo?

1

DoCmd.Quit acQuitSaveAll, trabajada por fin. Probé todas las otras opciones antes y un caparazón todavía estaba colgando.

1

Cambia el formulario a la vista Diseño. Establezca la propiedad BorderStyle del formulario al 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.

Cuestiones relacionadas