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語法的度娘繼續。飄過~
以上,搞定