在多个文件上运行excel宏
我有一个excel宏保存在一个空白工作簿和多个数据工作簿中 目前,我分别打开宏文件和每个数据文件,使用键盘快捷键在每个文件上运行宏 有没有一种方法可以在所有数据工作簿上运行宏而不打开它们,或者在多个文件上运行excel宏,excel,powershell,vbscript,vba,Excel,Powershell,Vbscript,Vba,我有一个excel宏保存在一个空白工作簿和多个数据工作簿中 目前,我分别打开宏文件和每个数据文件,使用键盘快捷键在每个文件上运行宏 有没有一种方法可以在所有数据工作簿上运行宏而不打开它们,或者 批处理文件 VBA/VBScript powershell 还是类似的 您可以将宏保存在personal.xls或主文件中,使用vba循环浏览工作簿,并在运行宏之前激活它们。据我所知,您仍然必须使用vba打开它们 您可以使用以下内容: sub LoopFiles Dim sFiles(1 to 10
- 批处理文件
- VBA/VBScript
- powershell
- 还是类似的
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
换句话说
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
下面是两种可能的解决方案
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
解决方案
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
Sub-OpenFilesVBA()
将Wb设置为工作簿
作为字符串的Dim strFolder
作为字符串的Dim strFil
strFolder=“c:\Temp”
strFil=Dir(strFolder&“\*.xls*”)
当strFil vbNullString时执行
设置Wb=Workbooks.Open(strFolder&“\”&strFil)
Wb.关闭错误
strFil=Dir
环
端接头
一种方法是将宏添加到PERSONAL.XLSB文件中。每次启动Excel时,都会在后台加载此文件。最初,PERSONAL.XLSB文件将不存在。
要自动创建此文件,只需开始录制“虚拟”宏(电子表格左下角的“录制”按钮),然后选择“个人宏工作簿”将其存储。录制宏后,可以使用[Alt]+[F10]打开VBA编辑器,您将看到带有“虚拟”宏的PERSONAL.XLSB文件。
我使用这个文件来存储总是可用的常规宏的加载。我已将这些宏添加到我自己的菜单功能区中。
此常用宏文件的一个缺点是,如果启动多个Excel实例,您将收到一条错误消息,说明PERSONAL.XLSB文件已被Excel实例1使用。只要你现在不添加新的宏,这是没有问题的。我刚才偶然发现了你的帖子,可能很晚了,但对于以后的所有搜索来说。 可以通过创建.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
objExcel=CreateObject(“Excel.Application”)
objExcel.Application.Run
objExcel.DisplayAlerts=False
objExcel.Application.Save
objExcel.Application.Quit
设置objExcel=Nothing
按如下方式保存文件(“您的文件名”.vbs)
双击(打开)保存的.vbs
文件,它将启动宏,而无需打开excel文件
希望这有帮助。您可以将所有数据文件放入一个文件夹,然后使用Dir()循环它们,打开每个文件并运行宏。谢谢大家,我使用的解决方案是结合使用PERSONAL.XLSB文件(在提到它之前我对它一无所知)并且找到了powershell脚本教程。可能与i.robert重复,如果我有两台或更多的PC,且服务器中有excel,我如何才能做到这一点?当每个用户创建自己的此单个excel可执行文件实例时,您将得到“PERSONAL.xlsb已锁定以进行编辑”。理想情况下,Microsoft不应该将此文件放在programs目录中,而是放在users目录中。不确定是否可以将Excel配置为从用户目录读取personal.xlsb文件?