我有一个电子表格,我想将其上传到公司的内部网供其他人查看。每次打开电子表格时,它都会运行一个后台脚本来更新信息。问题是 - 该脚本运行大约 10 分钟,因为它查看 2 个大表。
有没有办法每天刷新一次电子表格(例如凌晨 2 点),而无需有人打开它?
答案1
答案很简单:不。VBA 宏在 Microsoft Excel 引擎上运行,这意味着 Excel 必须打开才能运行宏。
但是,VBScript 与 VBA 使用的语言相同,不同之处在于 VBA 可以直接绑定到 Microsoft Excel 文件并使用 Sheet(1).cells(1,3) 等命令访问单元格,而 VBScript 则不能。经过大量工作,您可以创建一个读取和创建 .csv 文件的 vbscript,从长远来看,这可能会给您一个替代的想法。
如果这真的不是一个选择(老实说,我不会责怪你),你可以禁用每次有人打开脚本时加载的功能,而是将其设为手动运行作业,至少将时间控制权交给你。如果晚上有一台运行 Microsoft Excel 的个人计算机(甚至可能是服务器),你可以创建一个自动热键脚本或另一个 VBA 脚本来运行此宏并使用计划任务启动 excel 并打开工作簿。请注意,计划任务本身无法运行宏,因此你必须提供一种方法来自动运行宏。例如,你有一个 workbook2.xls,它有一个宏可以自动打开 workbook1.xls,然后运行其计算宏,最后保存 workbook1.xls,然后关闭两个文件。
答案2
我认为这可以可以使用应用程序.OnTime。
因此,当用户打开 Excel 工作表时,将以下内容添加到现有代码中
Public Sub ExecuteBigMacro()
timeForAlert = Now + TimeValue("24:00:00")
Application.OnTime timeForAlert, "ExecuteBigMacro"
'the rest of your code which takes ages!
End Sub
这意味着最初要在凌晨 2 点打开它(并且每次重新启动应用程序后都要打开它)!!尽管根据具体情况,您甚至可以让它每 4 小时更新一次,并在此期间接受,但用户会感到延迟!!