如何用VBScript自动化VBA运行



  • 上一次我们说到,可以用UserForm规划VBA的运行
    https://actuarygarden.com/topic/182/规划模型运行工具-vba-scheduled-run

    但是这个工具好像有点太复杂了,有没有规划VBA运行简单粗暴的方法呢?

    有!那就是利用VBScript



  • 首先新建一个文本文档
    6bd4f2f8-f91a-4bee-8bb9-94a12430274c-image.png
    重命名为 Auto.vbs (当然除了vbs后缀外都可以随便改)

    34f19f5d-a85b-452c-b39d-1197086efa0c-image.png
    点击“是”

    于是我们有了这个文件
    eab4292d-44fb-4ccd-b12f-ad85f1cfda04-image.png

    假如我们现在要运行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
    d31771af-a91d-453c-92b9-e366764112da-image.png
    点击"Trust Center Settings"
    找到 “Trusted Locations”
    ed0397ad-2d5f-48fd-8653-b985a8a5ad7d-image.png
    添加“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
    7e42ed1a-5018-45d4-b384-1813715d17c0-image.png
    Windows logs里面找到Application
    05be803c-0548-4ce8-b3d6-a545a4729eea-image.png
    点进来找到WSH,General里面就会是我们自己写的log


登录后回复