CMD如何調用Excel,並執行執行其中指定的宏


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語法的度娘繼續。飄過~

以上,搞定


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM