VBS开始一个excel的实例,然后从中分离出来

所以我基本上有一个VBS脚本,应该将数据asynchronous发布到Excel工作表。 我目前通过在工作簿的path上使用GetObject这样做:

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

这似乎工作正常,除了工作簿将closures在脚本的末尾,如果它以前没有打开(不需要,我有一个macros,将closures,并在必要时保存该书)。

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

我认为它是closures的,因为引用该对象的variables在脚本结束时被销毁,但是我不知道如何释放这些句柄而不销毁它们(即设置为Nothing)。

而不是得到一个具体的工作簿的引用,你有没有尝试获得一个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 

根据phd443322的两条评论评论1和评论2 ,这显然是由devise。 这里的解决scheme是欺骗对象(在这种情况下为Excel),使其认为用户需要与对象交互或在引用被销毁后保持交互。

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

 xlApp.Visible = True 

因此,Excel变得可见,不会因为引用被破坏而closures。
由于我不希望这个Excel实例可见,于是我让VBS使用xlApp.OnTime来调用一个macros(在一秒钟之后,VBS脚本已经退出足够的时间)来再次隐藏应用程序窗口。
这使得应用程序在屏幕上闪烁一秒钟,但这是我能做的最好的例子。