我在一个空白工作簿和多个数据工作簿中保存了一个excel宏。
我目前单独打开宏文件和每个数据文件,使用键盘快捷键在每个文件上运行宏。
有没有办法在所有数据工作簿上运行宏而无需打开它们,或者使用
答案 0 :(得分:3)
执行此操作的一种方法是将宏添加到文件PERSONAL.XLSB中。每次启动Excel时,此文件都将在后台加载。最初,PERSONAL.XLSB文件不会存在。 要自动创建此文件,只需开始录制“虚拟”宏(使用电子表格左下方的录制按钮)并选择“个人宏工作簿”将其存储。录制宏后,可以打开VBA使用[Alt] + [F10]编辑器,您将看到带有“虚拟”宏的PERSONAL.XLSB文件。 我使用此文件来存储始终可用的一般宏的负载。我已将这些宏添加到我自己的菜单功能区中。 此常见宏文件的一个缺点是,如果启动多个Excel实例,您将收到一条错误消息,表明PERSONAL.XLSB文件已被Excel实例Nr使用。 1.只要你现在不添加新的宏,这就不成问题了。
答案 1 :(得分:2)
以下两种可能的解决方案,
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
答案 2 :(得分: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
按如下方式保存文件(“您的文件名”.vbs)
通过双击(打开)保存的.vbs
文件,它将启动您的宏,而无需打开您的Excel文件。
希望这有帮助。
答案 3 :(得分:0)
您可以将宏保存在personal.xls或masterfile中,并使用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
答案 4 :(得分:0)
其他方式,
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