我有一個保存在空白工作簿和多個數據工作簿中的excel宏。在多個文件上運行excel宏
我目前單獨打開宏文件和每個數據文件,每個文件都用鍵盤快捷方式運行宏。
有沒有辦法來執行所有數據的工作簿宏,而無需打開它們,要麼
- 一個批處理文件,
- VBA/VBScript中,
- PowerShell中,
- 什麼類似?
我有一個保存在空白工作簿和多個數據工作簿中的excel宏。在多個文件上運行excel宏
我目前單獨打開宏文件和每個數據文件,每個文件都用鍵盤快捷方式運行宏。
有沒有辦法來執行所有數據的工作簿宏,而無需打開它們,要麼
您可以將宏保存在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
其他方式,
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
兩個可能的解決方案如下,
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
一種方法是添加宏的到文件PERSONAL.XLSB。每次啓動Excel時,都會在後臺加載該文件。最初PERSONAL.XLSB文件不會在那裏。 要自動創建此文件,只需開始錄製「虛擬」宏(使用電子表格左下角的錄製按鈕),然後選擇「個人宏工作簿」將其存儲。在錄製宏後,您可以打開VBA編輯器與[Alt] + [F10],您將看到帶有「虛擬」宏的PERSONAL.XLSB文件。 我使用這個文件來存儲總是可用的一般宏的加載。我已將這些宏添加到我自己的菜單功能區中。 此常見宏文件的一個缺點是,如果啓動多個Excel實例,您將收到一條錯誤消息,指出PERSONAL.XLSB文件已被Excel實例Nr使用。 1.只要你現在不添加新的宏,這是沒有問題的。
我羅伯特,如果我有2個或更多的個人電腦,在服務器的Excel,我該怎麼做? –
當每個用戶創建自己的這個單一Excel可執行文件的實例時,您將獲得「PERSONAL.xlsb被鎖定以進行編輯」。理想情況下,Microsoft不應該將此文件放在程序目錄中,而是放在用戶目錄中。不知道您是否可以配置Excel以從users目錄中讀取personal.xlsb文件? –
我有點偶然發現你的帖子,可能很晚,但對於所有未來的搜索。 可以通過創建.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文件。
希望這會有所幫助。
您可以將所有數據文件放到一個文件夾中,然後使用Dir()循環它們,打開每個文件並運行宏。 –
感謝所有人,我使用的解決方案是使用PERSONAL.XLSB文件(我在提到它之前我一無所知)和Powerhell腳本教程[在此處](http://blogs.technet.com/b /heyscriptingguy/archive/2009/01/13/how-do-i-run-an-office-excel-macro-on-multiple-workbooks.aspx)。 – Jonathan