이 페이지에서
구문
Save_EachWS [파일경로], [시트명], [덮어쓰기여부], [제외할시트]
인수구분
형식 설명
파일경로
선택
String
각 시트를 나누어 저장할 파일 경로입니다. 기본값은 실행중인 통합문서와 동일한 경로입니다.
시트명
선택
String
시트명을 지정하면 모든 파일의 시트 이름이 동일하게 저장됩니다. 기본값은 해당 시트 이름을 그대로 유지합니다.
덮어쓰기여부
선택
Boolean
TRUE 일 경우 기존 파일이 존재하면 파일을 덮어쓰기 합니다. 기본값은 False 입니다.
덮어쓰기여부가 False 이면서 기존 파일이 존재할 경우, 파일명-1·파일명-2 와 같이 파일명에 순번을 매겨 저장합니다.
제외할시트
선택
String
시트 나누기에서 제외할 시트 목록입니다.
제외할 시트를 쉼표(,)로 나누어 입력합니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요Sub Save_EachWS(Optional SavePath As String, Optional SheetName As String, Optional isOverWrite As Boolean = False, Optional ExcludeSheets As String)
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ Save_EachWS 함수
'▶ 각 시트를 각각의 통합문서로 나누어 저장합니다.
'▶ 인수 설명
'_____________SavePath : 시트를 나누어 통합문서로 저장할 폴더경로입니다. 기본값은 실행중인 통합문서와 동일한 경로입니다.
'_____________isOverWrite : 덮어쓰기 여부입니다. 기본값은 False 입니다.
'_____________ExcludeSheets : 시트 나누기에서 제외할 시트입니다. 쉼표로 나누어 여러개 시트를 지정할 수 있습니다.
'▶ 보조 명령문 안내 : FileExist, FileSequence 함수
'###############################################################
Dim WS As Worksheet
Dim FPath As String
Dim vSheets As Variant: Dim vSheet As Variant
If SavePath = "" Then SavePath = Application.ActiveWorkbook.Path
If ExcludeSheets <> "" Then vSheets = Split(ExcludeSheets, ",")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each WS In ThisWorkbook.Sheets
If ExcludeSheets <> "" Then
For Each vSheet In vSheets
If WS.Name = Trim(vSheet) Then
GoTo Pass:
End If
Next
End If
WS.Copy
FPath = SavePath & "\" & WS.Name & ".xlsx"
If FileExists(FPath) And isOverWrite = False Then
FPath = FileSequence(FPath)
End If
Application.ActiveWorkbook.SaveAs Filename:=FPath
If SheetName <> "" Then Application.ActiveWorkbook.Worksheets(1).Name = SheetName
Application.ActiveWorkbook.Close True
Pass:
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Public Function FileExists(ByVal path_ As String) As Boolean
'########################################################
'입력한 파일경로에 파일 존재여부를 확인합니다.
'https://www.oppadu.com/vba-fileexists-함수/
'########################################################
FileExists = (Dir(path_, vbDirectory) <> "")
End Function
Private Function FileSequence(FilePath As String, Optional Sequence As Long = 1, Optional Delimiter As String = "-") As String
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ FileSequence 함수
'▶ 기존 파일이 존재할 경우 순번을 매겨 파일을 저장합니다.
'▶ 인수 설명
'_____________FilePath : 확장자를 포함한 파일 경로입니다.
'_____________Sequence : 순번을 매길 시작번호입니다.
'_____________Delimiter : 파일명과 순번을 구분할 구분자입니다.
'▶ 보조 명령문 안내 : FileExist 함수
'###############################################################
Dim Ext As String: Dim Path As String: Dim newPath As String
Dim Pnt As Long
Pnt = InStrRev(FilePath, ".")
Path = Left(FilePath, Pnt - 1)
Ext = Right(FilePath, Len(FilePath) - Pnt + 1)
newPath = Path & Delimiter & Sequence & Ext
Do Until FileExists(newPath) = False
Sequence = Sequence + 1
newPath = Path & Delimiter & Sequence & Ext
Loop
FileSequence = newPath
End Function
활용 예제
각 시트를 통합문서와 동일한 경로에 나눠서 저장
Sub Test1()
'통합문서의 각 시트를 나누어 통합문서와 동일한 경로에 저장합니다.
Save_EachWS
End Sub
'시트1'·'시트2'를 제외하고 바탕화면에 나눠서 저장
Sub Test2()
'통합문서에서 '시트1'과 '시트2'는 제외한 나머지 시트를 나누어 바탕화면에 저장합니다.
Save_EachWS GetDesktopPath, , "시트1,시트2"
End Sub
안내사항
파일 존재여부를 확인하는 FileExists 함수와 파일명에 순번을 매기는 FileSequence 함수를 함께 사용하므로, 전체 코드를 모두 모듈에 붙여넣어야 합니다.
나눈 파일을 바탕화면에 저장하려면 파일경로에 GetDesktopPath 함수를 지정합니다.
매크로초보자입니다. 올려주신 코드에 대해 한줄씩 설명문을 써주시면 아주
감사하겠습니다.
有益な情報をたくさんありがとうございます!
大変恐縮ではございますが、コートについてもう少し詳しく説明文を添えて頂けたら凄くありがたいです!
From 해바라기
그냥 실행만시켰는데 그래서 뭐가 잘못한건지 궁금합니다 ㅎ
또는 파일 경로가 255자를 넘을 경우 오류가 발생할 수 있습니다.
아래 링크를 참고하여 매크로 코드를 한번 디버깅해보시겠어요?
https://www.oppadu.com/엑셀-vba-디버깅/
감사합니다.
예문에서 코드 복사해서 제가 들고있는파일 아무거나에 Test 해보려고했는데
전체 구문에서
Sub Test()
Save_EachWS , , "안내,시트"
End Sub
요부분만 삭제하면 Save_EachWS를 매크로로 쓸수 있는 것이 아닌가요..?
매크로 이름에 아무것도 안뜨네요..ㅠ
아니면 통채로가 한 셋트일까요..?
에 작성된 코드를 복사해서 사용하시면 됩니다.^^
Test 는 동작이 잘 동작하는지 테스트하는 코드입니다.
감사합니다.
해당 코드로 각 시트를 pdf로 저장하고 싶은데, 초보인지라 어렵네요.
코드를 어떻게 변환하면 좋을지 문의드립니다.
시트 → PDF 변환은 아래 강의를 참고해보시길 바랍니다.
https://www.oppadu.com/%ec%97%91%ec%85%80-pdf-%ec%9e%90%eb%8f%99-%ec%a0%80%ec%9e%a5-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8/
코드를 붙여넣으신 후, 실행할 매크로를 올바르게 선택하셨는지 한번 확인해보시겠어요?
[개발 도구] 탭 - [매크로]를 클릭해서 매크로 목록에 Save_EachWS가 보이는지 확인하시고,
만약 목록에 보이지 않는다면 코드가 '모듈'이 아닌 다른 위치(예: ThisWorkbook)에 붙여넣어진 것은 아닌지도 확인해보세요.
감사합니다.