VBA Application.Quit命令不closures整个Excel应用程序

我有一个下面的代码下面的代码。 当我点击它,它只是closures当前的Excel表,但不closures整个Excel应用程序。

Application.DisplayAlerts = False ThisWorkbook.Save Application.DisplayAlerts = True Application.Quit 

注意:我没有打开任何其他表单

通过上面的VBA代码closures后窗口依然出现。 在这里输入图像说明

我有这个问题,我通过放入Workbook_BeforeClose()解决它:

 ThisWorkbook.saved = true 

从例程中删除Application.DisplayAlerts = True

Application.Quit Method的帮助:

如果在使用此方法时未保存的工作簿已打开,Microsoft Excel将显示一个对话框,询问您是否要保存更改。 您可以通过保存所有工作簿之前使用Quit方法或通过将DisplayAlerts属性设置为False来防止此问题。 当此属性为False时,退出未保存的工作簿时Microsoft Excel不显示对话框; 它没有保存就退出。

这将避免任何(可能隐藏的)提示停止excel完全closures

该窗口不closures,因为您使用的是personal.xlsb。 剪切Personal.xlsb并粘贴到另一个位置。

而不是Personal.xlsb创build和处理模块。 这是一个更好的select。

这是一个奇怪的,希望有人会发现这个答案有用。 我使用Excel 2010(14.0)遇到了非常相似的东西。 我通过实验偶然发现了答案。 这对于一般目的来说是不好的答案。

无论什么原因,如果AccessVBOM选项未启用,Application.Quit将自动失败。 它不是开箱即用的,并且可以由networkingpipe理员通过Windows策略设置/取消设置。

通过遍历“Excel选项” – >“信任中心” – >“信任中心设置” – >“macros设置” – >“信任访问VBA项目对象模型”,可以在GUI中find此选项。 或以编程方式 。

AccessVBOM

由于我们都喜欢代码,在这个例子中,我们从C#interop运行Excel并调用quit函数。

 using Excel = Microsoft.Office.Interop.Excel; using Marshal = System.Runtime.InteropServices.Marshal; Excel.Application app = new Excel.Application(); app.Visible = false; app.DisplayAlerts = false; // this will hang if AccessVBOM is not enabled app.Quit(); Marshal.ReleaseComObject(app); 

从bat文件传递了MacroName,并尝试了下面的代码。 但是我观察到的一件事是,如果我们在Application.Quit之前closures工作簿(ActiveWorkbook.Close),那么它不起作用。

 Private Sub Auto_Open() Dim strMacroName As String strMacroName = VBA.CreateObject("WScript.Shell").Environment("process").Item("MacroName") If strMacroName <> "" Then Run strMacroName Application.DisplayAlerts = False ThisWorkbook.Save Application.DisplayAlerts = True If strMacroName <> "" Then Application.Quit End Sub Sub Button1_Click() MsgBox ("done") End Sub 

确保您的图纸没有任何外部链接参考,特别是断开的链接。

我为这个问题奋斗了一个多星期,重写和注释掉了很多代码来试图隔离这个问题。 我终于在今天上午的工作簿中对所有表格和外部工作表参考进行了审查。 我删除了所有不必要的链接和断开的引用,并且工作簿现在closures而不挂在内存中。