我有一些在特定的excel工作表上工作的excel宏。它会检查一些表格,并根据需要向某些人发送提醒电子邮件。 我希望这个宏每天运行一次,以便每天检查表格,所以我不需要打开工作表并每天自己做。它可以做到吗?我听说过Windows任务调度程序作为一个选项,你认为这对我的目的是一个很好的选择吗?每天运行一次VBA Excel宏一次
非常感谢!
我有一些在特定的excel工作表上工作的excel宏。它会检查一些表格,并根据需要向某些人发送提醒电子邮件。 我希望这个宏每天运行一次,以便每天检查表格,所以我不需要打开工作表并每天自己做。它可以做到吗?我听说过Windows任务调度程序作为一个选项,你认为这对我的目的是一个很好的选择吗?每天运行一次VBA Excel宏一次
非常感谢!
正如你所说,任务计划程序是一个不错的选择。要产生新的进程,并打开工作簿你有一个命令行specifiying(1)对Excel可执行文件和(2)的工作簿打开所以像
C:\Program Files\Microsoft Office 15\root\office15\Excel.exe "c:\MyWorkbook.xlsm"
我周围全建议双引号工作簿的路径(但不是Excel.exe所必需的)。
然后在MyWorkbook.xlsm中,您可以编写在工作簿打开时运行的代码,通常这在ThisWorkbook
模块中的任何标准模块中都是sub Auto_Open
或Sub Workbook_Open()
。
我会推荐一个VBScript文件,并使其每天使用任务计划程序运行。我更喜欢这个,因为我可以在一天中的任何时间打开Excel文件,并且宏不会运行(如果您只希望它在特定时间更新)。
这是您需要在记事本中写入的VBscript,然后使用*.vbs
扩展名保存。
Option Explicit
'On Error Resume Next 'Comment-out for debugging
ExcelMacro
Sub ExcelMacro()
Dim xlApp
Dim xlBook
Set xlApp = CreateObject("Excel.Application")
Set xlBook =
xlApp.Workbooks.Open("path\to\the\file.xlsm", 0, True)
xlApp.Run "Update" 'Name of your Sub
xlBook.Save
xlBook.Close
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
然后你可以在命令行从here设置的事件调度,如下所示:
schtasks /Create [/S <system> [/U <username> [/P [<password>]]]]
[/RU <username> [/RP <password>]] /SC <schedule> [/MO <modifier>] [/D <day>]
[/M <months>] [/I <idletime>] /TN <taskname> /TR <taskrun> [/ST <starttime>]
[/RI <interval>] [ {/ET <endtime> | /DU <duration>} [/K] [/XML <xmlfile>] [/V1]]
[/SD <startdate>] [/ED <enddate>] [/IT] [/Z] [/F]
其它链接可能对您有用:
Task Scheduler from the command line?从超级用户
What is a simple way to schedule a single event to happen at some time in the future? from Linux &的Unix
How to Schedule Programs to Run Automatically in Windows 7?从小发明的免费软件(TechSupportAlert)
是Windows任务调度程序或任何其他调度是你唯一的选择。 excel文件只是一个文档。除非另有说明,否则您会从外部触发一个宏来发送邮件,因此无法获得Excel内部的每日自动执行的宏。在一天内仅发送一次邮件可以包含在宏内部。然而,每天触发该宏必须仅由外部公用事业来完成。 – Karpak
如果您愿意将Excel文件永久打开,您可以为宏添加一个“OnTime”事件,但这通常不实用,所以Task Scheduler可能是最佳方式。 – YowE3K
@Karpak如何运行运行该宏的VbScript(或批处理文件)? – Masoud