J'utilise actuellement Application.Quit
qui laisse un shell de l'application MS Access ouvert.
Après traitement de la fonction appelante par rapport à l’application cible, il ne me reste plus que toutes les instances de l’application ouvertes; même si l'instance de base de données spécifique est fermée.
Comment faire en sorte que la fenêtre de l'application de la base de données 'Shell' se ferme par programmation à l'aide de VBA?
Voici un exemple de la façon dont la variable est créée et comment je la ferme:
Dim appAccess As New Access.Application
' Do stuff here...
appAccess.CloseCurrentDatabase
Vous devez exécuter Application.Quit par rapport à la variable d'instance.
Par exemple,
Dim appAccess As New Access.Application
' Do stuff here...
appAccess.Application.Quit
Selon la documentation: Application.Quit fait la même chose que DoCmd.Quit . À savoir
La méthode Quit quitte Microsoft Access. Vous pouvez sélectionner l’un des plusieurs options pour enregistrer un objet de base de données avant de quitter.
Vous pouvez essayer d'appeler l'un d'eux avec le paramètre acQuitSaveNone
ou 2 qui "Quitte Microsoft Access sans enregistrer d'objet". Après un examen plus approfondi, utilisez Application.Quit
car DoCmd.Quit
était ajouté pour la compatibilité en amont pour Access 95 (voir les remarques concernant la méthode Quit en tant qu’application à l’objet DoCmd). les autorisations, qui peuvent être la cause de vos coquillages.
Si cela ne fonctionne pas pour vous, voici une suggestion un peu extrême. Enregistrez-le en tant que fichier vbscript et appelez-le une fois que vous avez vraiment terminé avec Access. Cela mettra fin à tous les processus MSAccess sur votre ordinateur Windows, sans compactage ni réparation.
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
Appeler le script en remplaçant [vbspath] par le chemin réel. Si le chemin contient des espaces, veillez à utiliser des guillemets doubles et à les mettre entre guillemets:
Shell "cscript [vbspath]"
J'utilise toujours DoCmd.Quit acQuitSaveAll
.
Cela fonctionne au moins dans Access 2000, 2003 et 2010 (c’est là que j’ai vu ça marche).
Access.Quit
fonctionne pour moi. Peut-être essayer cela au lieu de Application.Quit
?
Si cela ne le résout pas, votre problème peut être ailleurs, auquel cas veuillez nous en dire plus sur ce projet.
DoCmd.Quit acQuitSaveAll, a enfin travaillé. J'avais déjà essayé toutes les autres options et un Shell était toujours en retrait.
Basculez le formulaire en mode Création . Définissez la propriété BorderStyle
du formulaire sur None
. Dans le menu Affichage , cliquez sur Mode formulaire . Notez que la barre de titre du formulaire est complètement supprimée.
Voulez-vous dire qu'il laisse une fenêtre shell cmd.exe ouverte après avoir apparemment terminé et qu'un processus MSACCESS.EXE s'exécute en arrière-plan dans la liste des tâches? Et le Shell est appelé en arrière-plan?