2012-01-18 256 views
9

我需要通过计划任务在Excel电子表格中运行宏。 我定义了如下工作:如何通过计划任务运行Excel宏

“C:\ Program Files文件\的Microsoft Office \ OFFICE10 \ EXCEL.EXE” “”

的问题是,在作业开始时,Excel会显示弹出并询问我们是否要禁用/启用阻止作业执行的宏。

如何运行此宏而无需手动点击启用宏?

+0

这可能有助于https://stackoverflow.com/questions/22771185/how-to-set-recurring-schedule-for-xlsm-file-using-windows-task - 程序员 – Justin 2018-01-18 03:45:35

回答

8

写一个简短的VBScript启动Excel,加载您的工作簿,并使用Application.Run运行宏。让您的计划任务运行vbscript。

如:http://www.mrexcel.com/forum/showthread.php?t=302970

+0

+1最佳方法。值得重新编码vbs中的宏以确保代码运行,即击败启用宏问题。 – brettdj 2012-01-19 03:40:15

+0

该脚本似乎可以正常工作,但不会阻止“启用宏”提示。我认为这可能与我在工作场所安装的企业安全策略有关? – mek363 2016-12-08 03:58:36

0

您可以尝试降低excel的安全级别,以避免在启动excel时弹出此窗口。

3

您不指定在Windows 7旗舰什么Excel或什么的Windows(或Macintosh)的版本,所以我会指定我使用Excel 2010中从Office 32位版本64有点...


如果你要保持你的工作簿打开并运行代码,在指定的时间,后来,那就试试这个..

将新代码模块插入到您的项目中 - 或者 - 使用您的项目中已有的模块。

创建调度子程序,如下图所示:

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()将在内部Scheduler()指定的确切时间,通过TimeValue定义执行TheScheduledSub()。你可以阅读更多关于TimeValuehere

您可能可以传递您希望Scheduler()sub执行您的子或函数的时间值作为子参数。

可以说,从现在开始你可能会运行一个小时5小时。 I.E. Application.OnTime Now + TimeValue(“05:00:00”),“TheScheduledSub”

或者从现在开始的一天?玩它。

我没有得到两个潜艇在不同的时间执行。我也试图同时执行两个。我同时执行两个不同的子目录的经验是,第二个子目录似乎在第一个子目录之前执行,但我没有充分探索它。所以YMMV。

我不认为Excel VBA具有多线程功能,因此请牢记这一点。我正在从Office套件运行32位Excel 2010。不知道64位Office Excel的行为或其他任何版本或平台。无论如何,多线程/多任务处理Excel VBA不是你问的问题,而是需要考虑的问题。

看到这个问题,并玩上述我可以想到一些想法,我想尝试自己!

0

您还可以使用工作簿打开并调用宏。只要有计划的任务打开工作簿,宏将在工作簿打开时运行。

0

另外,我发现这是一个好主意,有

Application.DisplayAlerts = False

之初禁用运行时可能会中断您的宏任何弹出消息。

还是看视频教程: http://youtu.be/lFSgV2gym9g