메뉴

SaveWS

Function

선택한 시트를 지정한 경로에 파일로 저장하는 VBA 사용자 지정 함수입니다.

SaveWS 코드 미리보기
구문 = SaveWS ( [시트], [파일경로], [파일명], [확장자] )
인수구분 형식 설명
시트 선택 Worksheet
저장할 시트입니다. 기본값은 현재 선택된 시트입니다.
파일경로 선택 String
저장할 파일 경로입니다. 기본값은 바탕화면입니다.
파일명 선택 String
저장할 파일 이름입니다. 파일명을 따로 입력하지 않을 경우 시트 이름으로 저장됩니다.
확장자 선택 String
저장할 파일의 확장자입니다. 기본값은 "xlsx" 입니다.
xlsx, xlsm, xls 중 하나의 형태로 저장할 수 있습니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · 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

활용 예제

현재 선택된 시트를 바탕화면 경로에 저장하기
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

안내사항

실행하려면 보조 함수인 GetDesktopPath 함수와 FileExists 함수가 함께 모듈에 있어야 하며, 전체 코드에 두 함수가 모두 포함되어 있습니다.
저장에 성공하면 TRUE, 경로가 없거나 저장에 실패하면 FALSE 를 반환합니다.
댓글 3
5 (2개 평가)
원더우먼
원더우먼 2022.12.20 18:01
원하는 시트를 골라서 (2개이상)
내가 원하는 경로에 원하는 이름으로 지정하는 방법을 알고 싶습니다 ㅠ
오빠두엑셀
오빠두엑셀 작성자 2022.12.20 21:49
안녕하세요.
시트를 선택하는 방법은 아래 링크를
https://www.oppadu.com/엑셀-vba-시트-합치기-시트병합-프로그램-예제/
저장하는 방법은 WorkBook.SaveAs 함수를 사용해보세요.
https://learn.microsoft.com/en-us/office/vba/api/excel.workbook.saveas
강민준🤗
강민준🤗 2024.08.11 12:58
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료