我需要通过计划任务在Excel电子表格中运行宏。 我把工作定义如下:
“C:\ Program Files \ Microsoft Office \ Office10 \ EXCEL.EXE”“”
问题是,当作业启动时,Excel会显示一个弹出窗口,询问我们是否要禁用/启用宏,这会阻止作业的执行。
如何在不必手动点击启用宏的情况下运行此宏?
答案 0 :(得分:8)
编写一个简短的vbscript,它启动Excel,加载你的工作簿并使用Application.Run来运行宏。让您的计划任务运行vbscript。
答案 1 :(得分:3)
您没有指定什么版本的Excel或Windows版本(或Macintosh),因此我将指定我在Windows 7 Ultimate 64位上使用Office 32位的Excel 2010 ...
如果您希望在稍后的指定时间保持工作簿的运行并运行代码,请尝试此操作。
将新代码模块插入项目 - 或者 - 使用项目中已有的代码模块。
创建一个调度程序子程序,如下所示:
Sub Scheduler()
'-- RUNS SUB(S) (OR FUNCTIONS) AT TIME SCHEDULED.
Application.OnTime TimeValue("11:46:40"), "TheScheduledSub"
End Sub
创建要运行的子例程(或函数)。这是一个例子:
Sub TheScheduledSub()
Debug.Print "TheScheduledSub() has run at " & Time
End Sub
Scheduler()
将在TheScheduledSub()
内指定的确切时间执行Scheduler()
,由{strong> TimeValue
定义。您可以阅读有关TimeValue
here的更多信息。
您可能会传递时间值,希望Scheduler()子能够作为子参数执行您的子或函数。
你可以说,从现在开始你可能会跑5个小时。 I.E. Application.OnTime Now + TimeValue(“05:00:00”),“TheScheduledSub”
或者从现在起一天?玩弄它。我确实在不同时间执行了两个子程序。我也尝试同时执行两个。我同时执行两个不同子的经验是第二个子似乎在第一个子执行之前执行,但我还没有完全探索它。所以YMMV。
我认为Excel VBA不具备多线程能力,因此请牢记这一点。我从Office套件运行32位Excel 2010。不确定64位Office Excel的行为或任何其他版本或平台的行为。无论如何,多线程/多任务Excel VBA不是你要求的,但它应该被考虑。
看到这个问题并玩弄上述内容,我可以想到一些我想尝试自己的想法!
答案 2 :(得分:0)
您可以尝试降低excel的安全级别,以避免在启动excel时弹出。
答案 3 :(得分:0)
您还可以使用工作簿打开和调用宏。只需让计划任务打开工作簿,宏就会在打开工作簿时运行。
答案 4 :(得分:0)
另外,我发现
是个好主意 Application.DisplayAlerts = False
在开始时禁用任何可能在运行时中断宏的弹出消息。
或者看教程视频: http://youtu.be/lFSgV2gym9g