如何用VBScript自动化VBA运行
-
上一次我们说到,可以用UserForm规划VBA的运行
https://actuarygarden.com/topic/182/规划模型运行工具-vba-scheduled-run但是这个工具好像有点太复杂了,有没有规划VBA运行简单粗暴的方法呢?
有!那就是利用VBScript
-
首先新建一个文本文档
重命名为 Auto.vbs (当然除了vbs后缀外都可以随便改)
点击“是”于是我们有了这个文件
假如我们现在要运行C:\MengkeLyu\automation文件夹里面的test3.xlsm里面的main(宏名称),test4.xlsm里面的main和test5.xlsm里面的main,我们可以用记事本或者任何一个文本编辑器打开vbs文档,输入下面的代码。
Sub Automation(path, macro) Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open(path) objExcel.Application.Visible = False objExcel.Application.Run macro objExcel.ActiveWorkbook.save objExcel.ActiveWorkbook.Close objExcel.Application.Quit End Sub Call Automation("C:\MengkeLyu\automation\test3.xlsm", "test3.xlsm!main") Call Automation("C:\MengkeLyu\automation\test4.xlsm", "test4.xlsm!main") Call Automation("C:\MengkeLyu\automation\test5.xlsm", "test5.xlsm!main") WScript.Echo "Finished." WScript.Quit
双击vbs文件后这些宏就可以自动运行。
当然啦,为了能保证这些工作薄里面宏是启用的,我们可以把这个文件夹设置成"Trusted Location"
excel设置里面可以找到Trust Center
点击"Trust Center Settings"
找到 “Trusted Locations”
添加“C:\MengkeLyu\automation”这个路径进去就可以啦。添加进去后这个路径下所有的工作薄都会自动启用宏。
-
有一个小的优化,可以像下面这样修改代码,运行过程就会储存在系统日志里面
Sub Automation(path, macro) Set objExcel = CreateObject("Excel.Application") Set objWorkbook = objExcel.Workbooks.Open(path) objExcel.Application.Visible = False objExcel.Application.Run macro objExcel.ActiveWorkbook.save objExcel.ActiveWorkbook.Close objExcel.Application.Quit End Sub Dim shl Set shl = CreateObject("WScript.Shell") Call Automation("C:\MengkeLyu\automation\test3.xlsm", "test3.xlsm!main") Call shl.LogEvent(0,"Test3 has been finished") Call Automation("C:\MengkeLyu\automation\test4.xlsm", "test4.xlsm!main") Call shl.LogEvent(0,"Test4 has been finished") Call Automation("C:\MengkeLyu\automation\test5.xlsm", "test5.xlsm!main") Call shl.LogEvent(0,"Test5 has been finished") Set shl = Nothing WScript.Echo "Finished." WScript.Quit
然后我们打开系统日志,搜索Event Viewer
Windows logs里面找到Application
点进来找到WSH,General里面就会是我们自己写的log