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