我有一个保存在空白工作簿和多个数据工作簿中的 excel 宏。
我目前单独打开宏文件和每个数据文件,并使用键盘快捷键在每个文件上运行宏。
有没有办法在所有数据工作簿上运行宏而不打开它们,或者使用
- 一个批处理文件,
- VBA/VBScript,
- 电源外壳,
- 或类似的东西?
我有一个保存在空白工作簿和多个数据工作簿中的 excel 宏。
我目前单独打开宏文件和每个数据文件,并使用键盘快捷键在每个文件上运行宏。
有没有办法在所有数据工作簿上运行宏而不打开它们,或者使用
一种方法是将宏添加到文件 PERSONAL.XLSB。每次启动 Excel 时,此文件都会在后台加载。最初,PERSONAL.XLSB 文件将不存在。要自动创建此文件,只需开始录制“虚拟”宏(使用电子表格左下角的录制按钮)并选择“个人宏工作簿”将其存储。录制宏后,您可以打开 VBA使用 [Alt]+[F10] 编辑器,您将看到带有“虚拟”宏的 PERSONAL.XLSB 文件。我使用这个文件来存储总是可用的通用宏的负载。我已将这些宏添加到我自己的菜单功能区中。这个通用宏文件的一个缺点是,如果您启动多个 Excel 实例,您将收到一条错误消息,即 PERSONAL. Excel 实例 Nr 已在使用 XLSB 文件。1. 这时候只要不添加新的宏就没有问题。
以下两种可能的解决方案,
vbscript解决方案
Dim objFSO
Dim objFolder
Dim objFil
Dim objXl
Dim objWb
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("scripting.filesystemobject")
Set objFolder = objFSO.getfolder("c:\temp")
For Each objFil In objFolder.Files
If InStr(objFil.Type, "Excel") > 0 Then
Set Wb = objExcel.Workbooks.Open(objFil.Path)
wscript.echo Wb.name
Wb.Close False
End If
Next
vba解决方案
Sub OpenFilesVBA()
Dim Wb As Workbook
Dim strFolder As String
Dim strFil As String
strFolder = "c:\Temp"
strFil = Dir(strFolder & "\*.xls*")
Do While strFil <> vbNullString
Set Wb = Workbooks.Open(strFolder & "\" & strFil)
Wb.Close False
strFil = Dir
Loop
End Sub
我刚刚偶然发现了你的帖子,也许很晚,但对于所有未来的搜索。可以通过创建 .vbs 文件来启动您的宏。为此,请打开记事本并添加以下内容:
objExcel = CreateObject("Excel.Application")
objExcel.Application.Run <insert macro workbook file path, module and macro name here>
objExcel.DisplayAlerts = False
objExcel.Application.Save
objExcel.Application.Quit
Set objExcel = Nothing
按如下方式保存文件(“您的文件名”.vbs)
通过双击(打开)保存的.vbs
文件,它将启动您的宏,而您根本无需打开您的 Excel 文件。
希望这可以帮助。
另一种方式,
Sub LoopAllWorkbooksOpened()
Dim wb As Workbook
For Each wb In Application.Workbooks
Call YourMacroWithWorkbookParam(wb)
Next wb
End Sub
Sub YourMacroWithWorkbookParam(wb As Workbook)
MsgBox wb.FullName
End Sub
您可以将宏保存在您的个人.xls 或主文件中,并使用 vba 循环浏览工作簿,并在运行宏之前激活它们。据我所知,您仍然必须使用 vba 打开它们。
你可以使用这样的东西:
sub LoopFiles
Dim sFiles(1 to 10) as string 'You could also read this from a range in a masterfile
sFiles(1) = "Filename1.xls"
.
.
sFiles(10) = "Filename10.xls"
Dim wb as Workbook
Dim iCount as integer
iCount = ubound(sFiles)
Dim iCount2 as integer
For iCount2 = 1 to iCount
Workbooks(sFiles(iCount2)).open
Workbooks(sFiles(iCount2)).activate
Call YourMacro
Workbooks(sFiles(iCount2)).close
next iCount2
end sub