首页 > 解决方案 > 从 VBA/JScript 关闭 Excel 工作簿而不使 Excel 崩溃

问题描述

在 VBA 中,我有一个 JScript 语言(Javascript ES3)的全局脚本控制变量。我将 var“ThisWorkbook”设置为

var ThisWorkbook = GetObject('', 'Excel.Application').Workbooks('" + ThisWorkbook.Name + "')

然后我可以说关闭工作簿

ThisWorkbook.Close(false)

完成的完整 VBA 代码:

Sub Test

Dim ScriptC as Object
Set ScriptC = CreateObject("ScriptControl"): ScriptC.Language = "JScript"

ScriptC.Eval "var ThisWorkbook = GetObject('', 'Excel.Application').Workbooks('" + ThisWorkbook.Name + "')"
ScriptC.Eval "ThisWorkbook.Close(false)"

End Sub

但是,这会使我的 Excel 和所有打开的工作簿 (Excel 2016) 崩溃 - 避免这种情况的好方法是什么?我必须从 JScript/Javascript 执行此操作,但例如可以通过 WScript 变量执行此操作(只要它是从 JScript 中调用的)。原因是它是由在 JScript 而不是在 VBA 中评估的事件触发的(在这种情况下,VBA 只是包装器)。

我试过“ThisWorkbook.Application.Quit”(根据https://docs.microsoft.com/en-us/office/vba/api/excel.application.quit),但这也不起作用。

谢谢!

标签: javascriptexcelvbajscript

解决方案


此错误仅在从即时窗口运行命令时发生 - 如果从子程序中运行它不会崩溃。

在意识到这一点之前,我已经测试了很多次。非题,见谅。


推荐阅读