1. main.bat Source
------------------------------------------------------
@echo off
REM Execute the right macro in designated Excel file.
echo ==================Batch Start=======================
echo ==================Batch Start======================= > log.txt
echo.
echo. >> log.txt
echo ExecuteVBA: cscript execMacro.vbs
echo ExecuteVBA: cscript execMacro.vbs >> log.txt
echo.
echo. >> log.txt
echo OutputResultPath: %cd%\result\
echo OutputResultPath: %cd%\result\ >> log.txt
echo.
echo. >> log.txt
echo ExecuteTime: %date:~0,10% %time:~0,5% %
echo ExecuteTime: %date:~0,10% %time:~0,5% % >> log.txt
echo.
echo. >> log.txt
echo ConvertorDiffer is Executing.
echo ConvertorDiffer is Executing. >> log.txt
echo.
echo. >> log.txt
cscript execMacro.vbs
echo Execute is success.
echo Execute is success. >> log.txt
echo.
echo. >> log.txt
echo ===================Batch End========================
echo ===================Batch End======================== >> log.txt
exit
2. execMacro.vbs Source
------------------------------------------------------
execMacro.vbs
'*********************************************************
' Open Excel and Execute Macro
'
' Created By Maouizayoi 2015/06/26
'*********************************************************
Option Explicit
Const excelIndex = "result\differResult.xls"
Const macroName = "CopyAndDiffer"
Const excelFile = "differResult.xls"
Dim excelApp, objWbk, excelPath
' to get current cmd folder path
With WScript
excelPath = Replace(.ScriptFullName, .ScriptName, "")
End With
Set excelApp = CreateObject("Excel.Application")
' autoMacro forbbiden
excelApp.EnableEvents = False
'' readOnly // Comment out it
'Set objWbk = excelApp.Workbooks.Open(excelPath & excelIndex, False, True)
' compatibility mode // this is the mode I need now
Set objWbk = excelApp.Workbooks.Open(excelPath & excelIndex, True, False)
' present Excel window
excelApp.Visible = True
' Macro GO!
excelApp.Run excelFile & "!" & macroName & "." & macroName
' save result
objWbk.Saved = True
'objWbk.Close False
'Set objWbk = Nothing
' release event forbidden
excelApp.EnableEvents = True
' Excel over
'excelApp.Quit
Set excelApp = Nothing
PS: 简单说就是用1.bat来调2.vbs。
网上也有类似的流程,1.bat里调2.vbs时候传两个参数,一个是Excel路径,而另一个是宏的
识别符。怎么样都行。切记两点心得体会:重点号
一,对于版本在2013以上的office,在对应excel文件中保存宏时一般会有提示。这里可以选择
1, .xls(97-2003)版本
2, .xlsm(defualt2013-)
然后在选项中把宏的安全访问的设定改成权限要求最低的那个,就是哪个宏都允许访问。
(大不了完事再在Excel里改回来)如何操作,度娘查一查,帖子很多。此处略过
二,两个参数的pattern也好,吾辈这个例子也罢,实际Excel的open命令执行时:
关键参数的Format不要搞错,否则会出现找不到宏,或没有这个对象等错误。
e.g. param1' D:\Source\convertorDiffer\convertorDifferV2.0\result\differResult.xlsm
param2' differResult.xlsm!CopyAndDiffer.CopyAndDiffer
另:param2 不确定的,打开Excel 查看宏登录就知道了,不要自己只写个名字CopyAndDiffer,
那样一般找不到,把Excel 实际宏登录的宏的识别符拷出来。
还有1.bat(main.bat )的source 关键的只有cscript execMacro.vbs这一句,剩下都是
打Log,不用全拷,不懂其中CMD命令或VBA语法的度娘继续。飘过~
以上,搞定