2017-04-22 194 views
0

我有一些在特定的excel工作表上工作的excel宏。它会检查一些表格,并根据需要向某些人发送提醒电子邮件。 我希望这个宏每天运行一次,以便每天检查表格,所以我不需要打开工作表并每天自己做。它可以做到吗?我听说过Windows任务调度程序作为一个选项,你认为这对我的目的是一个很好的选择吗?每天运行一次VBA Excel宏一次

非常感谢!

+0

是Windows任务调度程序或任何其他调度是你唯一的选择。 excel文件只是一个文档。除非另有说明,否则您会从外部触发一个宏来发送邮件,因此无法获得Excel内部的每日自动执行的宏。在一天内仅发送一次邮件可以包含在宏内部。然而,每天触发该宏必须仅由外部公用事业来完成。 – Karpak

+1

如果您愿意将Excel文件永久打开,您可以为宏添加一个“OnTime”事件,但这通常不实用,所以Task Scheduler可能是最佳方式。 – YowE3K

+2

@Karpak如何运行运行该宏的VbScript(或批处理文件)? – Masoud

回答

0

正如你所说,任务计划程序是一个不错的选择。要产生新的进程,并打开工作簿你有一个命令行specifiying(1)对Excel可执行文件和(2)的工作簿打开所以像

C:\Program Files\Microsoft Office 15\root\office15\Excel.exe "c:\MyWorkbook.xlsm" 

我周围全建议双引号工作簿的路径(但不是Excel.exe所必需的)。

然后在MyWorkbook.xlsm中,您可以编写在工作簿打开时运行的代码,通常这在ThisWorkbook模块中的任何标准模块中都是sub Auto_OpenSub Workbook_Open()

0

我会推荐一个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)