【发布时间】:2012-01-18 17:39:16
【问题描述】:
我需要通过计划任务在 Excel 电子表格中运行宏。 我将工作定义如下:
"C:\Program Files\Microsoft Office\Office10\EXCEL.EXE" ""
问题在于,当作业启动时,Excel 会显示一个弹出窗口并询问我们是否要禁用/启用宏,这会阻止作业的执行。
如何在无需手动点击启用宏的情况下运行此宏?
【问题讨论】:
我需要通过计划任务在 Excel 电子表格中运行宏。 我将工作定义如下:
"C:\Program Files\Microsoft Office\Office10\EXCEL.EXE" ""
问题在于,当作业启动时,Excel 会显示一个弹出窗口并询问我们是否要禁用/启用宏,这会阻止作业的执行。
如何在无需手动点击启用宏的情况下运行此宏?
【问题讨论】:
编写一个简短的 vbscript 来启动 Excel,加载您的工作簿并使用 Application.Run 运行宏。让您的计划任务运行 vbscript。
【讨论】:
您没有指定 Excel 的版本或 Windows(或 Macintosh)的版本,因此我将指定我在 Windows 7 Ultimate 64 位上使用 Office 32 位的 Excel 2010... em>
如果您想保持工作簿打开并在指定时间运行代码,稍后再试试这个。
在您的项目中插入一个新的代码模块 - 或 - 使用您在项目中已有的代码模块。
如下图创建一个调度器子例程:
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() 将在由 TimeValue 定义的 Scheduler() 中指定的确切时间执行 TheScheduledSub()。你可以阅读更多关于TimeValuehere的信息。
您可能会传递您希望 Scheduler() 子程序执行子程序或函数的时间值作为子程序中的参数。
比方说,从现在开始,您可能会运行不到 5 个小时。 IE。 Application.OnTime Now + TimeValue("05:00:00"), "TheScheduledSub"
或者也许是从现在开始的一天?玩弄它。
我确实让两个潜艇在不同的时间执行。我也尝试同时执行两个。我对同时执行两个不同的 sub 的经验是,第二个 sub 似乎在第一个之前执行,但我还没有完全探索它。所以YMMV。
我认为 Excel VBA 不支持多线程,因此请记住这一点。我正在从 Office 套件运行 32 位 Excel 2010。不确定 64 位 Office Excel 的行为方式或任何其他版本或平台。无论如何,多线程/多任务 Excel VBA 不是您要求的,但需要考虑。
看到这个问题和上面玩的我能想到一些我想尝试自己的想法!
【讨论】:
您可以尝试降低excel的安全级别,以避免在启动excel时弹出此问题。
【讨论】:
您还可以使用工作簿打开和调用宏。只需让计划任务打开工作簿,宏就会在工作簿打开时运行。
【讨论】:
另外,我发现有一个好主意
Application.DisplayAlerts = False
在开始时禁用任何可能在运行时中断宏的弹出消息。
或观看教程视频: http://youtu.be/lFSgV2gym9g
【讨论】: