【发布时间】:2017-05-05 03:15:59
【问题描述】:
我想运行一个名为 MyMacro 的 VBA 宏,对于许多 excel 文件,它保存为 MyMacro.bas。我有下面的 VBS 代码,但它没有做我想要的。如果有人可以看一下,我将不胜感激。
我使用的是 Excel 2013。文件保存为.xls。
谢谢。
Const sRootFolder = "C:\Documents"
Const sExportedModule = "C:\Documents\MyMacro.bas"
Const sMacroName = "MyMacro"
Dim oFSO, oFDR, oFile ' File and Folder variables
Dim oExcel, oWB ' Excel variables (Application and Workbook)
Start
'------------------------------
Sub Start()
Initialize
ProcessFilesInFolder sRootFolder
Finish
End Sub
'------------------------------
Sub ProcessFilesInFolder(sFolder)
' Process the files in this folder
For Each oFile In oFSO.GetFolder(sFolder).Files
If IsExcelFile(oFile) Then ProcessExcelFile oFile.Path
Next
End Sub
'------------------------------
Sub Initialize()
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oExcel = CreateObject("Excel.Application")
End Sub
'------------------------------
Sub Finish()
oExcel.Quit
Set oExcel = Nothing
Set oFSO = Nothing
End Sub
'------------------------------
Function IsExcelFile(oFile)
IsExcelFile = (InStr(1, oFSO.GetExtensionName(oFile), "xls", vbTextCompare) > 0) And (Left(oFile.Name, 1) <> "~")
End Function
'------------------------------
Sub ProcessExcelFile(sFileName)
On Error Resume Next
wscript.echo "Processing file: " & sFileName ' Comment this unless using cscript in command prompt
Set oWB = oExcel.Workbooks.Open(sFileName)
oWB.VBProject.VBComponents.Import sExportedModule
oExcel.Run sMacroName
oWB.Save
oWB.Close
Set oWB = Nothing
End Sub
'------------------------------
这是一个适用于单个文件的 vbs 代码:
Option Explicit
ExcelMacroExample
Sub ExcelMacroExample()
Dim xlApp
Dim xlBook
Dim objWorkbook
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\Documents\test.xls", 0, True)
Set objWorkbook = xlApp.Workbooks.Open("C:\Documents\test.xls")
xlApp.Run "MyMacro"
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
【问题讨论】:
-
您能告诉我们它正在做什么以及您期望它做什么吗?
-
尝试在宏的开头加上一些
MsgBox 12345,看看它是否被调用。 -
奇怪,没有这个附加行就不会出现这个弹出窗口??
-
您是否尝试将
Const sMacroName = "MyMacro"更改为Const sMacroName = "MyMacro.MyMacro"? (今天早上我发生了一件事情,我的子模块和模块都具有相同的名称,并且很混乱。) -
哦 - 我刚刚尝试过,这解决了我的测试问题。 :(