엑셀 시트 저장 :: SaveWS 명령문 사용법 총정리
엑셀 SaveWS 명령문 목차 바로가기
요약
엑셀 시트를 특정 경로에 저장합니다. 기본값으로 사용할 경우 현재 선택된 시트를 바탕화면에 저장합니다.
명령문 구문
저장결과 = SaveWS(시트, 파일경로, 파일명, 확장자)
사용된 인수 및 변수 알아보기
| 인수 | 설명 |
| 시트 [선택인수, WorkSheet] |
저장할 시트입니다. 기본값은 현재 선택된 시트입니다. |
| 파일경로 [선택인수, String] |
저장할 파일 경로입니다. 기본값은 바탕화면입니다. |
| 파일명 [선택인수, String] |
저장할 파일 이름입니다. 파일명을 따로 입력하지 않을 경우 시트 이름으로 저장됩니다. |
| 확장자 [선택인수, String] |
파일 확장자입니다. 기본값은 "xlsx" 입니다. xlsx, xlsm, xlsx 중 하나의 형태로 저장가능합니다. |
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [엑셀VBA함수] SaveWS 명령문예제파일
상세 설명
엑셀 시트를 특정 경로에 저장하는 VBA 명령문입니다. 아무런 인수를 입력하지 않고 기본값으로 사용할 경우 현재 선택된 시트를 바탕화면 경로에 저장합니다. 파일을 성공적으로 저장하면 결과값으로 True를 반환하며, 파일 경로가 없거나 경로에 동일한 파일이 존재하는 경우 또는 알수 없는 오류로 인해 파일 저장에 실패할 경우에는 결과값으로 False를 반환합니다.
만약 통합문서에 포함된 모든 시트를 한 번에 저장해야 할 경우, Save_EachWS 명령문을 사용합니다. Save_EachWS 함수는 아래 관련 게시글에 전체 코드와 함께 자세히 설명해드렸습니다.
실전 사용 예제
- 현재 선택된 시트를 바탕화면 경로에 저장하기
Sub Test1() Dim blnPass As Boolean blnPass = SaveWS End Sub
- 통합문서의 특정 시트를 현재 통합문서와 같은 경로에 저장하기
Sub Test1() Dim blnPass As Boolean Dim WS As Worksheet Set WS = ThisWorkbook.Worksheets("시트명") blnPass = SaveWS(WS, ThisWorkbook.Path) End Sub
엑셀 시트 저장, SaveWS 명령문 동작원리
SaveWS 명령문 전체 코드
Function SaveWS(Optional WS As Worksheet, Optional Path As String, Optional FileName As String, Optional Ext As String) As Boolean '############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ SaveWS 함수 '▶ 선택한 시트를 해당 경로에 저장합니다. 저장에 실패했을 경우 False를 반환합니다. '▶ 인수 설명 '_____________WS : 저장할 시트입니다. 기본값은 현재 활성화된 시트입니다. '_____________Path : 저장할 파일 경로입니다. 기본값은 바탕화면입니다. '_____________FileName : 파일명입니다. 기본값은 시트 이름입니다. '_____________Ext : 파일 확장자입니다. 기본값은 "xlsx" 입니다. '▶ 사용 예제 'Dim blnPass As Boolean 'blnPass = SaveWS(ThisWorkBook.WorkSheets("시트명")) 'if blnPass = True Then MsgBox("시트를 저장했습니다.") '▶ 사용된 보조함수 'GetDesktopPath 함수 'FileExists 함수 '############################################################## Application.ScreenUpdating = False On Error GoTo EH: Dim fFormat As Long If WS Is Nothing Then Set WS = ActiveSheet If Path = "" Then Path = GetDesktopPath If FileName = "" Then FileName = WS.Name If Ext = "" Then Ext = "xlsx" Select Case Ext Case "xlsm": fFormat = 52 Case "xls": fFormat = -4143 Case "xlsx": fFormat = 51 End Select If Right(Path, 1) <> "\" Then Path = Path & "\" If Not FileExists(Path) Then MsgBox "저장 경로가 잘못되었습니다. 다시 확인해주세요.", vbInformation: SaveWS = False: Exit Function If FileExists(Path & FileName & "." & Ext) Then Dim vbYN As VbMsgBoxResult vbYN = MsgBox("경로에 동일한 파일이 존재합니다. 기존파일을 지우고 새로운 파일로 덮어쓰기 하시겠습니까?", vbYesNo) If vbYN = vbNo Then SaveWS = False: Exit Function End If WS.Copy With Application.ActiveWorkbook Application.DisplayAlerts = False .SaveAs Path & FileName & "." & Ext, FileFormat:=fFormat Sheets(1).Name = WS.Name .Close True Application.DisplayAlerts = True End With SaveWS = True Application.ScreenUpdating = True Exit Function EH: SaveWS = False Application.ScreenUpdating = True End Function Public Function GetDesktopPath(Optional BackSlash As Boolean = True) As String '######################################################## '사용중인 PC의 바탕화면 경로를 출력합니다. 'https://www.oppadu.com/vba-fileexists-함수/ '######################################################## Dim oWSHShell As Object Set oWSHShell = CreateObject("WScript.Shell") If BackSlash = True Then GetDesktopPath = oWSHShell.SpecialFolders("Desktop") & "\" Else GetDesktopPath = oWSHShell.SpecialFolders("Desktop") End If Set oWSHShell = Nothing End Function Public Function FileExists(ByVal path_ As String) As Boolean '######################################################## '입력한 파일경로에 파일 존재여부를 확인합니다. 'https://www.oppadu.com/vba-fileexists-함수/ '######################################################## FileExists = (Dir(path_, vbDirectory) <> "") End Function
명령문 동작원리 단계별 알아보기
- 화면 업데이트를 중단하여 처리속도를 개선합니다.
Application.ScreenUpdating = False On Error GoTo EH:
- 명령문에 사용할 변수를 설정합니다. 인수가 별도로 지정되지 않았을 경우, 각 변수를 기본값으로 설정합니다.
Dim fFormat As Long If WS Is Nothing Then Set WS = ActiveSheet If Path = "" Then Path = GetDesktopPath If FileName = "" Then FileName = WS.Name If Ext = "" Then Ext = "xlsx" Select Case Ext Case "xlsm": fFormat = 52 Case "xls": fFormat = -4143 Case "xlsx": fFormat = 51 End Select If Right(Path, 1) <> "\" Then Path = Path & "\"
- 파일 경로가 존재하지 않거나 기존 경로에 다른 파일이 존재할 경우 안내창을 출력합니다.
If Not FileExists(Path) Then MsgBox "저장 경로가 잘못되었습니다. 다시 확인해주세요.", vbInformation: SaveWS = False: Exit Function If FileExists(Path & FileName & "." & Ext) Then Dim vbYN As VbMsgBoxResult vbYN = MsgBox("경로에 동일한 파일이 존재합니다. 기존파일을 지우고 새로운 파일로 덮어쓰기 하시겠습니까?", vbYesNo) If vbYN = vbNo Then SaveWS = False: Exit Function End If
- 시트를 지정한 경로에 저장합니다.
WS.Copy With Application.ActiveWorkbook Application.DisplayAlerts = False .SaveAs Path & FileName & "." & Ext, FileFormat:=fFormat Sheets(1).Name = WS.Name .Close True Application.DisplayAlerts = True End With
- 파일 종료 후 명령문을 종료하거나, 오류가 발생했을 경우 False를 반환 후 명령문을 종료합니다.
SaveWS = True Application.ScreenUpdating = True Exit Sub EH: SaveWS = False Application.ScreenUpdating = True
- 현재 선택된 시트를 바탕화면 경로에 저장하기

