엑셀 시트 저장 :: SaveWS 명령문 사용법 총정리

현재 선택된 시트를 특정 경로에 저장하는 SaveWS 명령문의 전체 코드와 사용법을 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2022. 01. 29. 19:28
URL 복사
메모 남기기 : (3)

엑셀 시트 저장 :: SaveWS 명령문 사용법 총정리

엑셀 SaveWS 명령문 목차 바로가기
요약

엑셀 시트를 특정 경로에 저장합니다. 기본값으로 사용할 경우 현재 선택된 시트를 바탕화면에 저장합니다.

명령문 구문
저장결과 = SaveWS(시트, 파일경로, 파일명, 확장자)
사용된 인수 및 변수 알아보기
인수 설명
시트
[선택인수, WorkSheet]
저장할 시트입니다. 기본값은 현재 선택된 시트입니다.
파일경로
[선택인수, String]
저장할 파일 경로입니다. 기본값은 바탕화면입니다.
파일명
[선택인수, String]
저장할 파일 이름입니다. 파일명을 따로 입력하지 않을 경우 시트 이름으로 저장됩니다.
확장자
[선택인수, String]
파일 확장자입니다. 기본값은 "xlsx" 입니다. xlsx, xlsm, xlsx 중 하나의 형태로 저장가능합니다.

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


상세 설명

엑셀 시트를 특정 경로에 저장하는 VBA 명령문입니다. 아무런 인수를 입력하지 않고 기본값으로 사용할 경우 현재 선택된 시트를 바탕화면 경로에 저장합니다. 파일을 성공적으로 저장하면 결과값으로 True를 반환하며, 파일 경로가 없거나 경로에 동일한 파일이 존재하는 경우 또는 알수 없는 오류로 인해 파일 저장에 실패할 경우에는 결과값으로 False를 반환합니다.

만약 통합문서에 포함된 모든 시트를 한 번에 저장해야 할 경우, Save_EachWS 명령문을 사용합니다. Save_EachWS 함수는 아래 관련 게시글에 전체 코드와 함께 자세히 설명해드렸습니다.

실전 사용 예제
  1. 현재 선택된 시트를 바탕화면 경로에 저장하기
    Sub Test1()
     
    Dim blnPass As Boolean
    blnPass = SaveWS
     
    End Sub
  2. 통합문서의 특정 시트를 현재 통합문서와 같은 경로에 저장하기
    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
명령문 동작원리 단계별 알아보기
  1. 화면 업데이트를 중단하여 처리속도를 개선합니다.
    Application.ScreenUpdating = False
     
    On Error GoTo EH:
  2. 명령문에 사용할 변수를 설정합니다. 인수가 별도로 지정되지 않았을 경우, 각 변수를 기본값으로 설정합니다.
    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 & "\"
  3. 파일 경로가 존재하지 않거나 기존 경로에 다른 파일이 존재할 경우 안내창을 출력합니다.
    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
  4. 시트를 지정한 경로에 저장합니다.
    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
  5.  파일 종료 후 명령문을 종료하거나, 오류가 발생했을 경우 False를 반환 후 명령문을 종료합니다.
    SaveWS = True
     
    Application.ScreenUpdating = True
     
    Exit Sub
     
    EH:
    SaveWS = False
    Application.ScreenUpdating = True
5 2 추천
게시글평점
Subscribe
Notify of
3 Comments
Inline Feedbacks
View all comments
3
0
Would love your thoughts, please comment.x