我想打开一个启用宏的工作簿来每小时从用户那里捕获数据,并且还传递一个/e/ScheduledOpen
标志给它以在 VBA 中指示它是否由任务计划程序打开(在这种情况下它将自动关闭)或手动打开(在这种情况下它应该保持打开状态)。
我最关心用户体验和可移植性- 所以我真的不想依赖编写任何额外的.vbs
或.bat
脚本。VBA 宏没有被 IT 安全锁定,但这些东西可能被锁定。此任务打开的文件的用户本身不是程序员,可能会被出现的命令提示符吓跑。
在任务计划程序中,我正在执行“运行程序或脚本”任务。我尝试了几种几乎好的方法:
explorer "C:/path/to/file.xlsm"
非常适合用户体验和可移植性,因为它模拟双击文件 - 我不需要知道 Excel.exe 的路径或担心现有实例,因为这些实例都可以得到很好的处理。- 问题是我无法将
/e/ScheduledOpen
标志传递给 Excel VBA。
- 问题是我无法将
"C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" "C:/path/to/file.xlsm" /e/ScheduledOpen
允许我向 VBA 提供标志- 问题是这个 Excel 路径在每台机器上都不同,因此不可移植
- 此外,如果文件已经打开,Excel 会弹出一条错误消息,这不太好
cmd /c ""%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\Excel.lnk" "C:/path/to/file.xlsm" /e/ScheduledOpen"
允许我向 VBA 提供标志,并且具有指向 Excel 的动态路径- 问题是它会生成一个 cmd 窗口,用户体验很差
- 当 Excel 已打开文件时也会出现同样的问题
任务计划程序中没有 cmd 的“%PROGRAMDATA%\ Microsoft \ Windows \ Start Menu \ Programs \ Excel.lnk”“C:/path/to/file.xlsm”/e/ScheduledOpen`似乎不起作用
我在“安装时”(首次打开 .xlsm 工作簿时)设置任务,这样我就可以从注册表中查找 Excel.exe 的路径,但如果他们安装新的 Excel 版本,则可移植性会降低,任务将会中断。如果可以解决这个问题,那就太好了。
答案1
对于一行代码,尝试使用start
来启动可以找到的任何 Excel 实例。基本上相当于使用 \Start Menu\Programs\Excel.lnk。
cmd /c start excel "C:/path/to/file.xlsm" /e/ScheduledOpen
这确实会闪现一个 cmd 窗口,但它不会停留在那儿。我进行的测试表明,如果文件已打开,则不会显示弹出窗口。
或者,您可以让宏在计划任务运行时更新 Excel 路径,以防 Excel 版本升级