VBS启动excel实例然后从中分离

时间:2014-06-23 23:24:44

标签: excel vbscript

所以我基本上有一个VBS脚本,它应该异步地将数据发布到Excel工作表。我目前通过在工作簿的路径上使用GetObject来执行此操作:

Set xlBook = GetObject(strPath & "\Runner.xlsm")

这似乎工作正常,除非工作簿在脚本结束时关闭,如果以前没有打开(不需要,我有一个宏将关闭并在必要时保存书籍。)

这类似于Question 7708039,除了我想故意保持excel实例OPEN,而不是强迫它关闭(与他的问题相反)。

我认为它正在关闭,因为引用该对象的变量在脚本结束时被销毁,但我无法弄清楚如何在不破坏它们的情况下释放这些句柄(即设置为Nothing)。

3 个答案:

答案 0 :(得分:3)

您是否尝试获取对Excel的引用然后打开工作簿,而不是获取对特定工作簿的引用?

' 1a. Get an existing Excel instance...
Set Excel = GetObject(, "Excel.Application")

' 1b. Or, create one. Make it visible for testing.
Set Excel = CreateObject("Excel.Application")
Excel.Visible = True

' Load the workbook...
Set Workbook = Excel.Workbooks.Open(strPath & "\Runner.xlsm")

' Do stuff and save, if desired.

' Close workbook...
Workbook.Close

' Excel stays open. If you want to close Excel, use:
Excel.Quit

答案 1 :(得分:0)

根据phd443322的两条评论Comment 1Comment 2,这显然是设计上的。 这里的解决方案是欺骗对象(在本例中为Excel),认为用户需要与其进行交互或在销毁引用后保持交互。

因此,正确的解决方法是使其具有交互性,在这种情况下使用:

xlApp.Visible = True

因此,Excel变得可见并且因为参考被销毁而不会被关闭 由于我不希望这个Excel实例可见,因此我让VBS使用xlApp.OnTime来调用一个宏(一秒钟之后,VBS脚本有足够的时间退出)再次隐藏应用程序窗口。
这使得应用程序在屏幕上闪烁一秒钟,但在这种情况下我能做的最好。

答案 2 :(得分:0)

我使用

遇到了同样的问题
xlApp.Visible = True

在Windows上进行此调用

wscript my-script.vbs C:/path/to/file.xml

但是当我将分隔符从/更改为时,它起作用了:

wscript my-script.vbs C:\path\to\file.xml