2012-09-17 10 views
8

Attualmente sto utilizzando Application.Quit che lascia aperta una shell dell'applicazione MS Access.Codice VBA per chiudere un database di accesso senza lasciare aperta una shell dell'applicazione

Dopo aver elaborato la funzione di chiamata contro l'applicazione di destinazione, mi rimane ogni istanza dell'applicazione ancora aperta; anche se l'istanza specifica del database è chiusa.

Come faccio a chiudere la finestra dell'applicazione 'shell' del database utilizzando VBA?

Ecco un esempio di come viene creata la variabile e come sto chiusura:

Dim appAccess As New Access.Application 

' Do stuff here... 

appAccess.CloseCurrentDatabase 
+0

Come stai invocando queste 50 conchiglie? Hai aperto ognuno di questi manualmente o sono stati aperti dal codice? – dmarra

+0

Aperto dal codice. –

risposta

4

È necessario eseguire Application.Quit rispetto alla variabile di istanza.

Per esempio,

Dim appAccess As New Access.Application 

' Do stuff here... 

appAccess.Application.Quit 
3

Access.Quit funziona per me. Forse provarlo invece di Application.Quit?

Se questo non lo risolve, il problema potrebbe essere altrove, nel qual caso per favore dicci di più su questo progetto.

5

Io uso sempre DoCmd.Quit acQuitSaveAll.
Questo funziona almeno in Access 2000, 2003 e 2010 (che è dove ho visto funziona).

8

Secondo la documentazione: Application.Quit fa la stessa cosa di DoCmd.Quit. Vale a dire

Il metodo Quit si chiude Microsoft Access. È possibile selezionare una delle diverse opzioni per salvare un oggetto di database prima di uscire.

Si può provare a chiamare una di esse con il parametro acQuitSaveNone o 2, che "si chiude Microsoft Access senza salvare alcun oggetto". Dopo un'ulteriore revisione, utilizzare Application.Quit come DoCmd.Quit come added for backward compatibility for Access 95 (vedere le osservazioni per il metodo Quit come si applica all'oggetto DoCmd.) Se si dispone di una di queste deve comunque eseguire una chiusura automatica alla chiusura se si dispone delle autorizzazioni, che potrebbero essere la causa di conchiglie.

Se ciò non funziona per voi, ecco un suggerimento un po 'estremo. Salvalo come un file vbscript e chiamalo quando hai veramente finito con Access. Questo interromperà tutti i processi di MSAccess sul tuo pc Windows, senza compattare e riparare.

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 

Per chiamare lo script che sostituisce [vbspath] con il percorso corrente. Se il percorso contiene spazi assicurarsi di usare le virgolette e metterlo tra virgolette:

shell "cscript [vbspath]" 
0

Vuoi dire lascia una finestra di shell cmd.exe aperta dopo apparentemente finitura e un processo MSACCESS.EXE in esecuzione in background in la TaskList? E la shell viene chiamata in background?

1

DoCmd.Quit acQuitSaveAll, lavorato finalmente. Ho provato tutte le altre opzioni prima e una shell era ancora in sospeso.

1

Passare al modulo in visualizzazione Struttura. Imposta la proprietà BorderStyle del modulo su None. Nel menu Visualizza, fare clic su Modulo Visualizza. Si noti che la barra del titolo del modulo è stata completamente rimossa.

Problemi correlati