从桌面运行宏,隐藏且对系统的影响最小



最近我工作的IT策略发生了变化,我一直使用的所有脚本(.bat.cmd.py)都不再工作。在可能的情况下,我已将这些转换为在工作簿中运行的 VBA 宏 - 因为这些宏仍然处于启用状态。

这里有两个宏来安排强制关机/取消它(分别)

Private Sub Workbook_Open()
Application.Visible = False
Shell "SHUTDOWN /s /f" '/Scheduled shut down, /Forced (ignores any unsaved)
End Sub

在第二个工作簿中

Private Sub Workbook_Open()
Application.Visible = False
Shell "shutdown /a" '/Abort scheduled shutdown
Application.Quit
End Sub

如您所见,宏在Workbook_Open()事件上运行,Application.Visible = False.目的是使用桌面快捷方式尽可能不可见且快速地打开这些工作簿。

问题和解决方案

  • 它更慢 - 我曾经将其作为批处理脚本运行,现在必须打开 Excel 才能运行它
    • 我已经把它作为减少开放时间的.xlsb,有没有更快的方法?
    • 我不是在问如何加快我的工作簿,我只是说是否有另一种保存文件的方法(也许是加载项?
    • 我也只选择在关闭中止时关闭 Excel,
    • 而不是在计划关闭时关闭 Excel,就好像 Excel 已经打开,那么取消宏打开得更快(如果我不小心安排了关机,这是必不可少的)
  • 运行不是不可见的;尽管工作簿本身从未显示,但会显示 Excel 启动图像

    • 我尝试将开关添加到快捷方式目标(/e以防止标准模板加载/r只读,希望它不会显示工作表) - 但它们不起作用
    • "C:Program Files (x86)Microsoft OfficerootOffice16EXCEL.EXE" /r /e "C:UsersUSERNAMEDocumentsstart.xlsb"
  • Application调用是 Excel 范围的。有时,我会在保存所有内容之前安排关机。(我知道我需要几秒钟才能保存,所以我先安排关机)

    • 当我将这些脚本作为.bat/.cmd脚本运行时,这很好,但是如果我运行这些并且 Excel 处于打开状态,那么一切都会关闭(或变得不可见 - 尽管我无法检查是哪一个),当我仍在处理某些事情时,这并不理想。
    • 我可以确保这些只隐藏主题自我吗?打开另一个 Excel 实例会有所帮助吗?

TL;博士

  • 我已将宏另存为Workbook_Open()工作簿中的.xlsb事件,这些工作簿从桌面快捷方式运行
  • 我该如何改进这一点
    • 隐藏进程
    • 使流程更快
    • 防止进程搞砸 Excel 的其余部分
    • 桌面快捷方式中的标志
    • 对宏代码的更改
    • 更改宏的保存方式
    • 无需在脚本被阻止时转换为脚本

注意,我会用 VBS 来完全绕过 Excel,但这也被阻止了

最快是带有关闭命令的桌面快捷方式,即%WINDIR%system32shutdown.exe /s /f

最新更新