今天遇到一个问题,用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))
具体是什么原因造成的,有待研究,如有知道的朋友请不吝赐教