使用Excel VBA宏通过Windows计划任务运行

6
我有一个 Excel 电子表格,我设置了一个定时器在特定时间段运行代码将数据导出到数据库。如果该电子表格处于打开状态且当前时间与设定的时间相同,则会将数据导出到数据库。
我在子例程和 workbook_open 中都使用了这行代码 Application.OnTime TimeValue("22:00:00"), "ExportOpenJobs"
当电子表格处于打开状态时,这很好用,但是我想通过 Windows 计划任务来设置它。
我的主机 PC 是 Windows Server 2012,文件存储在其中。在任务计划程序中,我将操作设置为启动程序,将程序脚本设置为 *.xlsm 文件的位置和实际文件,以及任务的开始时间。我在 Excel VBA 中设置了此任务的开始时间 30 秒之前。
我的问题是 Windows 任务计划程序在设置的时间运行,查看任务历史记录后,我可以看到任务已启动/完成和操作已启动/完成,通常需要约 50 分钟才能完成,但是当我检查数据库时,Excel VBA 没有运行。
我如何让任务计划程序运行 Excel VBA 代码?
在 Windows Server 中,您是否真的需要安装 Excel,或者应该在另一台机器上进行操作?
2个回答

8

你好,我会创建这个.VBS文件,并使用Windows任务计划程序在所需的时间间隔执行此vbs文件。

Set fso = CreateObject("Scripting.FileSystemObject")
curDir = fso.GetAbsolutePathName(".")

Set myxlApplication = CreateObject("Excel.Application")
myxlApplication.Visible = False
Set myWorkBook = myxlApplication.Workbooks.Open( curDir & "\myTest.xlsm" ) 'Change to the actual workbook that has the Macro
myWorkBook.Application.Run "Module1.HelloWorld" 'Change to the Module and Macro that contains your macro
myxlApplication.Quit

Application.Run方法 (Excel)

这个例子需要在运行预定任务的主机上安装Excel。如果主机是服务器或桌面计算机,则由您选择。

Windows任务计划程序应该按以下方式完成任务的“操作”部分:

操作:启动一个程序

程序/脚本:C:\Windows\SysWOW64\cscript.exe

添加参数(可选):C:\Path_to_your_vbs\Your.vbs

开始于(可选):C:\Path_to_your_vbs\


谢谢,我应该通过Visual Studio或类似的工具创建它吗? - Jez
我已经设置好并运行了,使用这个过程更新大约800行通常需要多长时间?我问这个问题是因为它现在已经运行了2个半小时。 - Jez
如果这是一个问题,那么当Excel打开工作簿时会要求您立即启用它们。 - Sean W.
1
.vbs文件可以随时执行,不一定需要通过Windows任务计划程序执行。此脚本还假定.vbs文件与Excel工作簿在同一目录中。因此,为了解决问题,您可以随时执行vbs文件并确定未发生的情况。Excel是否打开? Excel是否打开工作簿? Excel是否执行宏?它在哪个步骤失败? - Sean W.
1
这是正确的,主机确实需要安装Excel,因此如果您在服务器上安装了Excel,它将正常工作。 Windows任务计划程序的问题在于,您实际上需要使用操作:“启动程序”,程序/脚本:“C:\ Windows \ SysWOW64 \ cscript.exe”,参数:“C:\ Path_to_vbs \ Your.vbs”,“开始:”C:\ Path_to_vbs”。我也会更新答案。 - Sean W.
显示剩余9条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接