11

我目前正在使用Application.Quit它打开 MS Access 应用程序的外壳。

在针对目标应用程序处理调用函数之后,我的应用程序的每个实例都保持打开状态;即使特定的数据库实例已关闭。

如何使用 VBA 以编程方式关闭数据库“shell”应用程序窗口?

这是如何创建变量以及如何关闭它的示例:

Dim appAccess As New Access.Application

' Do stuff here...

appAccess.CloseCurrentDatabase
4

6 回答 6

9

根据文档:Application.Quit与DoCmd.Quit做同样的事情。即

Quit 方法退出 Microsoft Access。在退出之前,您可以选择多个选项之一来保存数据库对象。

您可以尝试使用acQuitSaveNone“退出 Microsoft Access 而不保存任何对象”的参数或 2 调用它们中的任何一个。经过进一步审查,添加了Application.QuitasDoCmd.Quit实现 Access 95 的向后兼容性(请参阅退出方法的备注,因为它适用于 DoCmd 对象。)如果您有权限,执行其中任何一个操作仍应在关闭时自动压缩,这可能是你炮弹的原因。

如果这对你不起作用,这里有一个有点极端的建议。将其保存为 vbscript 文件,并在真正完成 Access 后调用它。这将终止 Windows pc 上的所有 MSAccess 进程,无需压缩和修复。

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

调用用实际路径替换 [vbspath] 的脚本。如果路径有空格,请确保使用双引号并将其放在引号中:

shell "cscript [vbspath]"
于 2012-09-17T22:22:36.157 回答
6

我总是用DoCmd.Quit acQuitSaveAll.
这至少在 Access 2000、2003 和 2010 中有效(这就是我看到它有效的地方)。

于 2012-09-17T21:51:35.970 回答
6

您需要针对实例变量执行 Application.Quit。

例如,

Dim appAccess As New Access.Application

' Do stuff here...

appAccess.Application.Quit
于 2014-01-10T16:53:32.923 回答
5

Access.Quit为我工作。也许试试那个而不是Application.Quit

如果这不能解决问题,您的问题可能在其他地方,在这种情况下,请告诉我们更多关于这个项目的信息。

于 2012-09-17T21:07:18.487 回答
3

DoCmd.Quit acQuitSaveAll,终于工作了。我之前尝试了所有其他选项,但外壳仍然挂起。

于 2014-09-25T21:23:59.920 回答
0

将窗体切换到设计视图。将表单的BorderStyle属性设置为None。在视图菜单上,单击表单视图。请注意,表单的标题栏已完全删除。

于 2015-06-03T11:55:31.960 回答