【问题标题】:Close Excel Workbook from VBA/JScript without crashing Excel从 VBA/JScript 关闭 Excel 工作簿而不使 Excel 崩溃
【发布时间】:2019-07-28 08:29:28
【问题描述】:

在 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),但这也不起作用。

谢谢!

【问题讨论】:

  • 可能是因为您使用了关键字。将ThisWorkBook 更改为任何其他单词MyWorkBook 或其他东西。
  • @Mikku - 变量的名称没有区别(我尝试将其设置为 TWB)
  • 好的,你还可以做一件事,避免使用括号ThisWorkBook.Close False

标签: javascript excel vba jscript


【解决方案1】:

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

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

【讨论】: