rand(life)

[엑셀Q/A] 폴더 안에 있는 여러 엑셀파일에 동일한 매크로 적용 본문

컴퓨터/엑셀

[엑셀Q/A] 폴더 안에 있는 여러 엑셀파일에 동일한 매크로 적용

flogsta 2011. 3. 4. 18:57

 어느 분이 댓글로 질문하신 내용입니다.
http://flogsta.tistory.com/632#comment5458065

질문이 있는데요 만약에 같은 폴더 안에 있는 각각의 엑셀 파일에 동일한 메크로를 적용하고 싶을때는 메크로를 어떤 방식으로 돌려야지 가능한지 궁금해서 문의 드립니다.
제가 한 폴더 안에 엑셀 파일이 50개가 넘는데요 작업이 쉽지가 않아서요.


제가 가진 지식으로 해결할 수 없는 문제에 닥치면, 일단 구글의 도움을 빌립니다. 그랬더니, 역시나 답이 나왔습니다.
출처: http://www.eggheadcafe.com/software/aspnet/33007769/run-macro-on-multiple-files.aspx


다음의 매크로는 특정 폴더(여기서는 C:\Temp\)안에 있는 모든 엑셀파일의 이름을 A열에 나열하고,
A1셀에 있는 파일부터 하나씩 열어 macroxx라는 매크로를 실행한 후, C:\Temp\New 폴더를 만들어 저장하고, 닫는 동작을 수행합니다.

Sub list_um()
 Dim F As String
 Dim roww As Long

 roww = 0
 Dim FileLocSpec As String

FileLocSpec = "C:\Temp\*.xls"
MkDir ("C:\temp\new")
F = Dir(FileLocSpec)

 Do Until F = ""
 roww = roww + 1
 Cells(roww, 1).Value = F
 F = Dir
 Loop

 Set r = Range("A1")

 While r.Value <> ""
 Workbooks.Open Filename:="C:\Temp\" & r.Value

 Call macroxx

 ActiveWorkbook.SaveAs Filename:="C:\Temp\new\" & r.Value, _
                                    FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close
Application.DisplayAlerts = False
Set r = r.Offset(1, 0)

 Wend

Application.DisplayAlerts = True

 End Sub



이 매크로를 만들고 매크로 사용통합문서(*.xlsm)로 저장하신 후, 실행해 보시면 매크로 macroxx가 실행된 결과의 엑셀파일이 C:\Temp\new 폴더 밑에 저장되어 있을 겁니다.
(단, 이 매크로가 있는 파일은 C:\Temp 폴더안에 있으면 안됩니다)

엑셀2007형식의 파일(*.xlsx)에 잘 적용됩니다. 97-2003형식(*.xls) 의 파일도 실행은 됩니다만 저장된 파일을 열때 경고메시지가 출력됩니다.