所以我基本上有一个VBS脚本,它应该异步地将数据发布到Excel工作表。我目前通过在工作簿的路径上使用GetObject来执行此操作:
Set xlBook = GetObject(strPath & "\Runner.xlsm")
这似乎工作正常,除非工作簿在脚本结束时关闭,如果以前没有打开(不需要,我有一个宏将关闭并在必要时保存书籍。)
这类似于Question 7708039,除了我想故意保持excel实例OPEN,而不是强迫它关闭(与他的问题相反)。
我认为它正在关闭,因为引用该对象的变量在脚本结束时被销毁,但我无法弄清楚如何在不破坏它们的情况下释放这些句柄(即设置为Nothing)。
答案 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 1和Comment 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