在多个 VBscript 之间共享变量(对象)

Share variable(object) between multiple VBscript

我想分享一些Excel宏给一些不太会用的同事

我从未在 VBS 中做过任何事情,但我找到了以下 .vbs 来启动宏:

Option Explicit

Dim xlApp, xlBook, oFSO, oShell, oExcel, oFile, oSheet
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False

Set xlBook = xlApp.Workbooks.Open("C:\Users\Desktop\API.xlsm")
xlApp.Run "getIEX"
xlBook.Close
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
WScript.Echo "End"

WScript.Quit

在我的 Excel 宏的某个点上,我有一个用户窗体,上面有我的 Excel Table 的 sheet 的一部分的屏幕.在这个用户表单上,我有 2 个按钮:自动保存或手动保存。

如果我按自动保存,一切正常,因为我的 Excel 宏继续运行,保存文件,然后 vbs 脚本关闭不可见的 excel 工作簿。

但是,如果他们手动按下保存(这会结束 Excel 的宏),同样的事情会发生... 所以我尝试使用以下代码从 Excel VBA 调用另外 2 个脚本:

    If ResponseX = vbYes Then
        Call savefile
        Shell "wscript.exe ""C:\Users\Desktop\UserFormYes.vbs"""          
    Else
        Shell "wscript.exe ""C:\Users\Desktop\UserFormNo.vbs"""
        Exit Sub

        

一个是他们按自动保存(结束脚本),另一个是手动保存,这将使 xlApp 在退出 WScript 之前可见。

问题是:我的对象 (xlApp) 未在 .vbs 脚本之间共享。

第一个 .vbs 脚本创建对象 xlApp 并启动​​ VBA 宏。 然后宏启动另一个 .vbs 脚本 我想做 2 个 .vbs 脚本: .第一个,如果他们按是:

xlBook.Close
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
WScript.Echo "End"

WScript.Quit

.第二个,如果他们按否:

Set xlApp.Visible = True


WScript.Quit

我该怎么做?可能吗 ?因为目前,我有错误: Object Require : xlApp

谢谢:)

不共享也不能共享,脚本和Excel是运行在两个不同的进程中。 VBA 代码已经可以访问它的主机 EXCEL.EXE 实例...这是从脚本生成的。

所以访问全局 Application 对象 的 VBA 代码是 已经使用了与脚本中完全相同的 xlApp 对象。

问题不在于 xlApp 没有在脚本之间共享;问题是 VBA 代码在您不希望它返回时返回。

脚本调用了一个getIEX宏;当该宏 returns 时,脚本恢复。

我会质疑是否需要首先涉及 VBScript,并使启用宏的 Excel 文档公开一种简单的方法供用户调用该宏(例如,将宏附加到某些形状或按钮).

编辑 -

现在我们了解到涉及两个需要相互通信的 VBScript 脚本(修订版 1 似乎是关于与调用的 VBA 宏共享 xlApp 变量),问题更清楚了,解决方案是让第二个脚本定义自己的 xlApp 变量并使用 GetObject 从当前 运行 进程获取该对象引用。

Dim xlApp
Set xlApp = GetObject("Excel.Application") 'watch out if you have multiple running instances!
Set xlApp.Visible = True
WScript.Quit