在多个 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
我想分享一些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