wake-up-neo.com

VBA-Code zum Schließen einer Access-Datenbank, ohne eine Shell der Anwendung geöffnet zu lassen

Ich verwende derzeit Application.Quit, wodurch eine Shell der MS Access-Anwendung geöffnet bleibt. 

Nach der Verarbeitung der aufrufenden Funktion für die Zielanwendung bleibt jede Instanz der Anwendung noch geöffnet. Auch wenn die bestimmte Datenbankinstanz geschlossen ist. 

Wie lasse ich das Datenbankfenster 'Shell' mit VBA programmatisch schließen?

Hier ein Beispiel, wie die Variable erstellt wird und wie ich sie schließe:

Dim appAccess As New Access.Application

' Do stuff here...

appAccess.CloseCurrentDatabase
10
user110236

Sie müssen Application.Quit für die Instanzvariable ausführen.

Zum Beispiel,

Dim appAccess As New Access.Application

' Do stuff here...

appAccess.Application.Quit
4

Laut Dokumentation: Application.Quit macht dasselbe wie DoCmd.Quit . Nämlich 

Die Quit-Methode beendet Microsoft Access. Sie können eine von mehreren Optionen Auswählen, um ein Datenbankobjekt vor dem Beenden zu speichern.

Sie können versuchen, eine davon mit dem Parameter acQuitSaveNone oder 2 aufzurufen, der "Microsoft Access beendet, ohne Objekte zu speichern". Verwenden Sie nach weiterer Überprüfung Application.Quit als DoCmd.Quit wurde zur Abwärtskompatibilität für Access 95 hinzugefügt (Siehe die Hinweise zu Quit Method, da sie für das DoCmd-Objekt gelten.) Wenn Sie eine der beiden Methoden ausführen, wird beim Schließen trotzdem eine automatische Komprimierung durchgeführt Sie haben die Berechtigungen, die die Ursache Ihrer Muscheln sein können.

Wenn das bei Ihnen nicht funktioniert, ist hier ein etwas extremer Vorschlag. Speichern Sie diese als vbscript-Datei und rufen Sie sie auf, sobald Sie mit Access wirklich fertig sind. Dadurch werden alle MSAccess-Prozesse auf Ihrem Windows-PC beendet, ohne dass Komprimierung und Reparatur erforderlich sind.

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

Aufruf des Skripts durch Ersetzen von [vbspath] durch den tatsächlichen Pfad. Wenn der Pfad Leerzeichen enthält, müssen Sie doppelte Anführungszeichen verwenden und in Anführungszeichen setzen:

Shell "cscript [vbspath]"
8
Daniel

Ich benutze immer DoCmd.Quit acQuitSaveAll.
Das funktioniert zumindest in Access 2000, 2003 und 2010 (dort habe ich gesehen es funktioniert).

5

Access.Quit arbeitet für mich. Vielleicht versuchen Sie das anstelle von Application.Quit?

Wenn sich das nicht lösen lässt, liegt Ihr Problem möglicherweise an einem anderen Ort. In diesem Fall erzählen Sie uns bitte mehr über dieses Projekt.

3
PowerUser

DoCmd.Quit acQuitSaveAll, zuletzt gearbeitet. Ich habe schon alle anderen Optionen ausprobiert und eine Shell hing noch zurück.

2
JAcob

Wechseln Sie das Formular in die Entwurfsansicht. Setzen Sie die BorderStyle-Eigenschaft des Formulars auf None. Klicken Sie im Menü Ansicht auf Formularansicht . Beachten Sie, dass die Titelleiste des Formulars vollständig entfernt wird.

1
Adam Arian

Meinen Sie damit, dass ein cmd.exe-Shell-Fenster offen gelassen wird, nachdem es scheinbar beendet wurde und ein MSACCESS.EXE-Prozess im Hintergrund in der Taskliste ausgeführt wird? Und die Shell wird im Hintergrund gerufen?

0
dmc2005