今天遇到一个问题,用cscript打开excel文件时,后打开的文件看不到前面打开文件的宏,而手动打开时,后面打开的文件可以看到前面打开文件中定义的宏。
刚开始时脚本如下:
open_res.bat和open_res.vbs如下
CScript //B .\open_res.vbs A.xlsm
CScript //B .\open_res.vbs B.xlsm
CScript //B .\open_res.vbs C.xlsm
Function export_csv(filepath)
Set oExcel = createobject("Excel.Application")
oExcel.Visible = true
Set oWorkbooks1 = oExcel.Workbooks.Open(filepath & "\Army.xlsm")
End Function
export_csv(WScript.Arguments.Item(0))
出现的问题是 B看不到A的宏,C看不到A和B的宏
后来找到了两种解决办法:
1.在A中定义一个宏:
Sub Batch_Open()
Dim path As String
path = ThisWorkbook.path
Workbooks.Open Filename:=path & "\B.xlsm"
Workbooks.Open Filename:=path & "\C.xlsx"
End Sub
然后open_res.vbs修改为
Function export_csv(filepath)
Set oExcel = createobject("Excel.Application")
oExcel.Visible = true
Set oWorkbooks1 = oExcel.Workbooks.Open(filepath & "\A.xlsm")
oExcel.Run "Batch_Open"
End Function
export_csv(WScript.Arguments.Item(0))
2.open_res.vbs中在一个excel object下打开三个文件
Function export_csv(filepath)
Set oExcel = createobject("Excel.Application")
oExcel.Visible = true
Set oWorkbooks1 = oExcel.Workbooks.Open(filepath & "\A.xlsm")
Set oWorkbooks2 = oExcel.Workbooks.Open(filepath & "\B.xlsm")
Set oWorkbooks3 = oExcel.Workbooks.Open(filepath & "\C.xlsm")
End Function
export_csv(WScript.Arguments.Item(0))
具体是什么原因造成的,有待研究,如有知道的朋友请不吝赐教