2012-05-22 118 views
3

我有一個保存在空白工作簿和多個數據工作簿中的excel宏。在多個文件上運行excel宏

我目前單獨打開宏文件和每個數據文件,每個文件都用鍵盤快捷方式運行宏。

有沒有辦法來執行所有數據的工作簿宏,而無需打開它們,要麼

  • 一個批處理文件,
  • VBA/VBScript中,
  • PowerShell中,
  • 什麼類似?
+1

您可以將所有數據文件放到一個文件夾中,然後使用Dir()循環它們,打開每個文件並運行宏。 –

+0

感謝所有人,我使用的解決方案是使用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

回答

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 
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 
2

兩個可能的解決方案如下,

  1. 它可以直接作爲VBS文件
  2. 運行
  3. A 解決方案離子在Excel運行(按蒂姆·威廉姆斯建議)

解決方案

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 
3

一種方法是添加宏的到文件PERSONAL.XLSB。每次啓動Excel時,都會在後臺加載該文件。最初PERSONAL.XLSB文件不會在那裏。 要自動創建此文件,只需開始錄製「虛擬」宏(使用電子表格左下角的錄製按鈕),然後選擇「個人宏工作簿」將其存儲。在錄製宏後,您可以打開VBA編輯器與[Alt] + [F10],您將看到帶有「虛擬」宏的PERSONAL.XLSB文件。 我使用這個文件來存儲總是可用的一般宏的加載。我已將這些宏添加到我自己的菜單功能區中。 此常見宏文件的一個缺點是,如果啓動多個Excel實例,您將收到一條錯誤消息,指出PERSONAL.XLSB文件已被Excel實例Nr使用。 1.只要你現在不添加新的宏,這是沒有問題的。

+0

我羅伯特,如果我有2個或更多的個人電腦,在服務器的Excel,我該怎麼做? –

+0

當每個用戶創建自己的這個單一Excel可執行文件的實例時,您將獲得「PERSONAL.xlsb被鎖定以進行編輯」。理想情況下,Microsoft不應該將此文件放在程序目錄中,而是放在用戶目錄中。不知道您是否可以配置Excel以從users目錄中讀取personal.xlsb文件? –

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文件。

希望這會有所幫助。