오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
퀵VBA 강의

PDF 변환 명령문 (Rng_To_Pdf)

오빠두엑셀 by 오빠두엑셀
  • 학습시간 13분
  • 난이도 전문가
  • 작성일 2019.10.22

선택영역을 PDF로 추출하는 명령문이 있다?! - PDF 저장 모듈 만들기

이 강의에서는 선택한 범위와 지정한 시트를 PDF 파일로 자동 저장하는 Rng_To_Pdf 매크로를 직접 작성하는 방법을 다룹니다. ExportAsFixedFormat 메서드와 PAGE_SETUP 모듈을 결합해 인쇄 레이아웃까지 정돈된 PDF를 한 번의 클릭으로 만들 수 있도록, 인수 설계부터 시트 전체·고정 범위 응용 예제까지 단계별로 정리합니다.

PDF 변환 명령문 (Rng_To_Pdf)
DOWNLOADS

실습자료를 준비했어요

수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇

1. 엑셀을 PDF로 저장하는 방법 (매크로 없이)

엑셀은 PDF 저장 기능을 기본으로 제공하며, 크게 두 가지 방법이 있습니다.

  • PDF 파일 형식으로 [다른 이름으로 저장]하기
  • PDF 형식이 지원되는 프린터로 출력하기 (Microsoft Print to PDF, ALPDF 등)
1-1. PDF 파일 형식으로 ‘다른 이름으로 저장’

[파일] – [다른 이름으로 저장]을 선택한 뒤, 파일 형식을 ‘PDF’로 지정해 원하는 경로에 저장합니다.

1-1. pdf 다른이름으로 저장

1-2. PDF 출력이 지원되는 프린터로 저장하기 (Microsoft Print to PDF 이용)

Microsoft에서 제공하는 Microsoft Print to PDF 프린터를 사용하면 엑셀 시트를 PDF로 곧바로 출력할 수 있습니다.

Microsoft Print to PDF 프린터는 윈도우 7 이상에서 기본 설치되어 있습니다. 만약 프린터 목록에 보이지 않는다면 관련 링크에서 설치 방법을 확인한 뒤 진행합니다.

1-2 인쇄 Microsoft Print to PDF

프린터로 PDF를 출력하면 머리말·꼬릿말, 한 페이지에 행/열 맞추기 등 다양한 페이지 레이아웃을 함께 설정할 수 있다는 장점이 있습니다.

2. 이번 강의에 사용된 보조 명령문

이번 강의에서는 총 4개의 보조 명령문과 1개의 보조 모듈을 사용합니다. 각 명령문에 대한 자세한 설명은 관련 포스트에서 확인할 수 있습니다.

강의에 사용된 VBA 보조 명령문
'##########################################
'z_SubModule 이라는 모듈을 생성한 뒤 복사/붙여넣기 하세요
'##########################################
Option Explicit
 
Public Function FileExists(ByVal path_ As String) As Boolean
 
    FileExists = (Dir(path_, vbDirectory) <> "")
 
End Function
 
Public Function GetDesktopPath(Optional BackSlash As Boolean = True)
 
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
 
Function FileSequence(FilePath As String, Optional Sequence As Long = 1)
 
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 & Sequence & Ext
 
Do Until FileExists(newPath) = False
    Sequence = Sequence + 1
    newPath = Path & Sequence & Ext
Loop
 
FileSequence = newPath
 
End Function
 
Function ValidFileName(ByVal FileName As String) As Boolean
 
Dim Arr As Variant: Dim Val As Variant
Dim Pnt As Long
 
Arr = Array("/", "\", ":", "*", "?", """", "<", ">", "|")
 
If InStr(1, FileName, ":\") > 0 Then
    Pnt = InStrRev(FileName, "\")
    FileName = Right(FileName, Len(FileName) - Pnt)
    Debug.Print FileName
End If
 
ValidFileName = True
 
For Each Val In Arr
    If InStr(1, FileName, Val) > 0 Then ValidFileName = False: Exit Function
Next
 
End Function
FileExists 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 지정한 경로에 파일이 존재하는지 확인합니다.
구문 : = FileExists ( 파일경로 )
GetDesktopPath 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 사용자 컴퓨터의 바탕화면 경로를 반환합니다.
구문 : = GetDesktopPath ( [백슬래쉬표시] )
FileSequence 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 파일 이름이 중복되지 않도록 끝에 순번을 자동으로 부여합니다.
구문 : = FileSequence ( 파일경로, [시작번호] )
ValidFileName 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 지정한 파일 이름이 윈도우 파일 시스템에서 사용 가능한지 검사합니다.
구문 : = ValidFileName ( 파일경로 )
강의에 사용된 VBA 보조 모듈
'##########################################
'z_PageSetup 이라는 모듈을 생성한 뒤 복사/붙여넣기 하세요
'##########################################
 
Public Enum ePrintMargin
xlNone = 0
xlNarrow = 1
xlNormal = 2
xlWide = 3
End Enum
 
Public Enum ePaperSize
xlA4 = 9
xlA3 = 8
xlLetter = 1
xlA5 = 11
End Enum
 
Function getPrintMargin(eValue As ePrintMargin) As Variant
 
'// 설정된 eNum 값으로 페이지 여백설정을 위한 값을 배열로 나열합니다.
 
Select Case eValue
Case 0
getPrintMargin = Array(0.05, 0.05, 0.05, 0.05, 0.1, 0.1)
Case 1
getPrintMargin = Array(0.25, 0.25, 0.75, 0.75, 0.3, 0.3)
Case 2
getPrintMargin = Array(0.7, 0.7, 0.75, 0.75, 0.3, 0.3)
Case 3
getPrintMargin = Array(1, 1, 1, 1, 0.5, 0.5)
End Select
 
End Function
 
Sub Page_Setup(WS As Worksheet, Optional LHead As String = "", Optional RHead As String = "&D / &T", _
Optional LFoot As String = "본 페이지의 무단복제를 금합니다.", Optional RFoot As String = "&P / &N 페이지", _
Optional eMargin As ePrintMargin = xlNarrow, _
Optional HFit As Boolean = True, Optional VFit As Boolean = False, _
Optional HCenter As Boolean = True, Optional VCenter As Boolean = False, _
Optional eOrient As XlPageOrientation = xlPortrait, Optional eSize As ePaperSize = xlA4)
 
Dim pSetup As String
Dim varMargin As Variant
Dim lngOrient As Integer
 
'// 인쇄설정 업데이트 중단 (속도증가)
Application.PrintCommunication = False
 
'// 인쇄여백값을 받아옵니다.
varMargin = getPrintMargin(eMargin)
 
'// 인쇄용지 방향을 설정합니다.
If eOrient = xlPortrait Then
lngOrient = 1
Else
lngOrient = 2
End If
 
'// ExecuteExcel4Macro 의 Page.Setup 명령문 실행을 위한 문구를 입력합니다.
Head = """&L" & LHead & "&R" & RHead & """"     '// 페이지 머릿말입니다.
Foot = """&L" & LFoot & "&R" & RFoot & """"     '// 페이지 꼬릿말입니다.
pLeft = varMargin(0)                            '// 왼쪽여백
pRight = varMargin(1)                           '// 오른쪽여백
Top = varMargin(2)                              '// 윗여백
Bot = varMargin(3)                              '// 아래여백
Head_margin = varMargin(4)                      '// 머릿말여백
Foot_margin = varMargin(5)                      '// 꼬릿말여백
Hdng = 0                                        '// 행/열반복 출력여부 0 = 반복출력안함 1 = 반복출력
Grid = False                                    '// 눈금선출력여부
Notes = False                                   '// 메모출력여부
H_cntr = HCenter                                '// 가운데정렬
V_cntr = VCenter                                '// 중앙정렬
Orient = lngOrient                              '// 문서방향, 1 = 세로 2 = 가로
Paper_size = eSize                              '// 용지크기
Pg_num = 1                                      '// 페이지 시작번호
Pg_order = 1                                    '// 페이지번호 순서, 1 = 위-아래-우 2 = 좌-우-아래
Quality = ""                                    '// 인쇄품질 (dot-per-inch로 입력) (공백 = 자동)
bw_cells = False                                '// 흑백인쇄여부, TRUE = 글자/테두리 검정,배경 흰색 FALSE = 색깔
pScale = 100                                    '// 축소/확대비율 또는 TRUE (Fit to Page)
 
'// 여백을 없음으로 설정할 경우 머릿말/꼬릿말을 삭제하여 인쇄영역과 겹치지 않도록 합니다.
If eMargin = xlNone Then
Head = """"""
Foot = """"""
End If
 
'// ExecuteExcel4Macro 명령문을 실행합니다.
pSetup = "PAGE.SETUP(" & Head & ", " & Foot & ", " & pLeft & ", " & pRight & ", " & Top & ", " & Bot & ", "
pSetup = pSetup & Hdng & ", " & Grid & "," & H_cntr & "," & V_cntr & "," & Orient & ","
pSetup = pSetup & Paper_size & "," & pScale & ","
pSetup = pSetup & Pg_num & "," & Pg_order & "," & bw_cells & "," & Quality & ","
pSetup = pSetup & Head_margin & "," & Foot_margin & "," & Notes & ")"
 
Application.ExecuteExcel4Macro pSetup
 
'// ExecuteExcel4Macro에서는 '한 페이지에 행/열 맞추기' 기능이 지원되지 않습니다.
'// 따라서 시트의 PageSetup 속성으로 '페이지 행/열 맞추기 기능을 설정합니다.
With WS.PageSetup
If HFit = True Then
.FitToPagesWide = 1
Else
.FitToPagesWide = False
End If
 
If VFit = True Then
.FitToPagesTall = 1
Else
.FitToPagesTall = False
End If
End With
 
'// 인쇄설정 업데이트
Application.PrintCommunication = True
 
End Sub
PAGE_SETUP 모듈 :: VBA 보조모듈 [상세설명 및 예제 보러가기]
설명 : 시트의 인쇄 레이아웃(머리말·꼬릿말·여백·용지 방향 등)을 한 번에 설정합니다.
구문 : PAGE_SETUP ( 해당시트, [머리말], [꼬릿말], [여백], [반복출력], 등… )

3. 엑셀 PDF 저장 매크로 본 명령문 작성

이제 PDF 저장 기능을 담당하는 본 명령문을 작성합니다. 명령문 이름은 Rng_To_Pdf로 지정합니다.

VBA 편집창에서 [삽입] – [모듈]을 클릭해 새 모듈을 추가한 뒤 명령문을 작성합니다.

3-1. 인수 설정

본 명령문에는 총 7개의 인수가 사용됩니다. 각 인수의 역할은 아래와 같습니다.

인수 설명
rngSelect
[Range]
PDF로 출력할 범위입니다.
FileName
[String, 선택인수]
저장할 파일명입니다. 기본값은 "pdf출력" 입니다.
SavePath
[String, 선택인수]
저장 경로입니다. 기본값은 바탕화면입니다.
DocProperty
[Boolean, 선택인수]
문서 속성 저장 여부입니다. 기본값은 TRUE 입니다.
PrintArea
[Boolean, 선택인수]
기존 인쇄 영역 무시 여부입니다. 기본값은 FALSE 입니다.
OpenPdf
[Boolean, 선택인수]
출력 후 PDF 파일 자동 실행 여부입니다. 기본값은 FALSE 입니다.
AddSequence
[Boolean, 선택인수]
파일명 중복 시 순번을 붙여 저장할지 여부입니다. 기본값은 TRUE 입니다.
Sub Rng_To_Pdf(rngSelect As Range, _
                Optional FileName As String = "pdf출력", _
                Optional SavePath As String = "", _
                Optional DocProperty As Boolean = True, _
                Optional PrintArea As Boolean = False, _
                Optional OpenPdf As Boolean = False, _
                Optional AddSequence As Boolean = True)
 
End Sub
3-2. 변수 설정

대부분의 값은 인수로 이미 받아오므로, 명령문 내부에서는 두 개의 변수만 추가로 선언합니다.

변수 설명
WS
[WorkSheet]
PDF로 출력할 범위가 속한 워크시트입니다.
FilePath
[String]
저장 경로와 파일명을 결합한 최종 파일 저장 경로입니다.
Dim WS As Worksheet
Dim FilePath As String
 
Set WS = rngSelect.Parent
 
If SavePath = "" Then SavePath = GetDesktopPath
 
FilePath = SavePath & FileName & ".pdf"
 
If ValidFileName(FilePath) = False Then MsgBox ("올바른 파일명을 사용하세요"): Exit Sub

WS는 인수로 받은 rngSelect 범위의 상위 개체, 즉 해당 워크시트로 설정합니다.

FilePath는 ValidFileName 보조 명령문으로 윈도우에서 허용되지 않는 특수 기호가 포함되어 있는지 먼저 검사한 뒤 다음 단계로 진행합니다.

3-3. 파일 저장 경로 순번 지정

AddSequence 인수가 TRUE일 경우, 같은 경로에 동일한 이름의 파일이 이미 있다면 파일명 뒤에 순번을 붙여 저장합니다. (FALSE일 때는 기존 파일을 덮어씁니다.)

따라서 AddSequence 가 TRUE인 경우 FileSequence 함수로 PDF 파일 저장 경로에 순번을 부여합니다.

If AddSequence = True Then
    FilePath = FileSequence(FilePath, 1)
End If
3-4. 선택 범위 PDF 출력

선택된 범위는 ExportAsFixedFormat 메서드로 PDF 파일로 출력합니다. ExportAsFixedFormat (영문 설명)에 대한 자세한 내용은 마이크로소프트 공식 문서를 참고하세요.

rngSelect.ExportAsFixedFormat xlTypePDF, FilePath, xlQualityStandard, DocProperty, PrintArea, , , OpenPdf

ExportAsFixedFormat 에 사용되는 인수는 다음과 같습니다. 앞에서 이미 받아둔 값을 그대로 전달하면 명령문 작성이 마무리됩니다.

인수 설명
Type
[xlFixedFormatType]
PDF 형식과 XPS 형식 중 어느 형식으로 추출할지 결정합니다.
FileName
[String]
저장할 파일 경로입니다.
Quality
[xlFixedFormatQuality]
PDF 또는 XPS 의 인쇄 품질입니다.
IncludeDocProperties
[Boolean]
문서 속성 포함 여부입니다.
IgnorePrintAreas
[Boolean]
기존에 설정된 인쇄 영역 무시 여부입니다.
From
[Long]
저장을 시작할 페이지 번호입니다.
To
[Long]
저장을 종료할 페이지 번호입니다.
OpenAfterPublish
[Boolean]
추출 후 파일 자동 실행 여부입니다.
FixedFormatExtClassPtr
[Object]
다른 형식으로 다시 저장될 수 있도록 FixedFormatExt 클래스로 내보내는 선택 인수입니다.
3-5. PDF 매크로 저장 전체 명령문
'####################################################
'모듈을 추가한 뒤 복사/붙여넣기 하세요.
'####################################################
 
Sub Rng_To_Pdf(rngSelect As Range, _
                Optional FileName As String = "pdf출력", _
                Optional SavePath As String = "", _
                Optional DocProperty As Boolean = True, _
                Optional PrintArea As Boolean = False, _
                Optional OpenPdf As Boolean = False, _
                Optional AddSequence As Boolean = True)
 
Dim WS As Worksheet
Dim FilePath As String
 
Set WS = rngSelect.Parent
 
If SavePath = "" Then SavePath = GetDesktopPath
 
FilePath = SavePath & FileName & ".pdf"
 
If ValidFileName(FilePath) = False Then MsgBox ("올바른 파일명을 사용하세요"): Exit Sub
 
If AddSequence = True Then
    FilePath = FileSequence(FilePath, 1)
End If
 
rngSelect.ExportAsFixedFormat xlTypePDF, FilePath, xlQualityStandard, DocProperty, PrintArea, , , OpenPdf
 
End Sub

4. 작성한 명령문 테스트하기

이제 작성한 PDF 추출 명령문이 정상적으로 동작하는지 확인합니다. 본 강의 예제 파일에서 [급여명세서] 시트는 Sheet4에 해당합니다. 따라서 Sheet4를 기준으로 인쇄 레이아웃을 설정한 뒤, 선택한 범위를 PDF로 추출하도록 테스트 명령문을 작성합니다.

4-0. Sheet4 급여명세서

Page_Setup (인쇄 레이아웃 설정) 모듈에 대한 자세한 설명은 관련 링크를 참고하세요.

Sub Test()
 
Dim FileName As String
 
FileName = Sheet4.Range("E3").Value & "-" & Sheet4.Range("H3").Value & "년 " & Sheet4.Range("H4").Value & "월"
 
Page_Setup Sheet4, FileName, HCenter:=False
 
Rng_To_Pdf Selection, FileName, AddSequence:=False
 
End Sub

명령문을 작성한 뒤 [급여명세서] 시트로 이동합니다. 상단 [개발도구] – [삽입]에서 ‘양식 컨트롤’의 [단추]를 추가합니다.

4-1. 개발도구 양식 단추 추가

단추를 추가하면 표시되는 [매크로 지정] 팝업창에서 방금 작성한 Test 명령문을 선택합니다. 이후 단추 이름을 원하는 텍스트로 변경합니다. 예제에서는 ‘선택영역을 pdf로 추출’로 변경하였습니다.

4-2 개발도구 매크로 지정

[급여명세서] 시트에서 출력할 범위를 선택한 뒤 단추를 클릭하면, 바탕화면에 직원명·연도·월이 포함된 파일명으로 PDF 파일이 저장됩니다.

4-3 범위 선택 후 pdf 출력

저장된 PDF 파일을 열어보면 좌측 상단에는 직원명과 해당 기간이, 우측 상단에는 PDF 저장 시각이 표시됩니다. 머리말·꼬릿말은 Page_Setup 모듈을 통해 원하는 형태로 자유롭게 변경할 수 있습니다.

4-4 머릿말 꼬릿말

5. 시트 전체 또는 고정된 범위를 PDF로 저장하기 (응용)

5-1. 시트에서 사용 중인 전체 범위를 PDF로 출력하기

워크시트의 UsedRange 속성을 활용하면, 시트에서 실제로 사용 중인 범위를 자동으로 받아와 PDF로 저장할 수 있습니다. UsedRange (영문 설명)에 대한 설명은 마이크로소프트 공식 문서를 참고하세요.

Sub Test()
 
Dim FileName As String
 
FileName = Sheet4.Range("E3").Value & "-" & Sheet4.Range("H3").Value & "년 " & Sheet4.Range("H4").Value & "월"
 
Page_Setup Sheet4, FileName, HCenter:=False
 
'# Rng_To_Pdf 의 저장범위를 Sheet4에서 사용중인 전체 범위로 입력합니다.
'# 시트 UsedRange 에 대한 설명은 아래 링크를 참고하세요.
'# https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.usedrange
 
Rng_To_Pdf Sheet4.UsedRange, FileName, AddSequence:=False
 
End Sub
5-2. 고정된 범위를 PDF로 출력하기

시트의 특정 고정 범위를 PDF로 저장할 수도 있습니다. 아래 예제는 [급여명세서] 시트의 ‘B2:E18’ 범위를 PDF로 출력하는 명령문입니다.

Sub Test()
 
Dim FileName As String
 
FileName = Sheet4.Range("E3").Value & "-" & Sheet4.Range("H3").Value & "년 " & Sheet4.Range("H4").Value & "월"
 
Page_Setup Sheet4, FileName, HCenter:=False
 
'# 시트의 특정 범위를 지정하여 PDF로 저장할수도 있습니다.
Rng_To_Pdf Sheet4.Range("B2:E18"), FileName, AddSequence:=False
 
End Sub
5-3. 미리 설정된 인쇄영역을 받아와 PDF로 출력하기

PageSetup.PrintArea 속성을 사용하면 시트에 미리 설정된 인쇄 영역을 그대로 받아와 PDF로 출력할 수도 있습니다.

'# 시트의 인쇄영역을를 지정하여 PDF로 저장할수도 있습니다.
Rng_To_Pdf sheet4.Range(sheet4.PageSetup.printare), FileName, AddSequence:=False
댓글 134
5 (62개 평가)
짱아둥이
짱아둥이 2020.03.31 15:43
강의 잘 보고 있습니다.
업무에 참고하려고 노력하고 있는 사람중에 한명입니다.
동영상 보면서 따라했는데 계속해서
컴파일 오류입니다.이름이 분명하지 않습니다.
라는 메세지가 생깁니다.
뭐가 문제인지 잘 모르겠습니다.
짱아둥이
짱아둥이 2020.04.03 08:17
해결했습니다.
이 강의 전에 "선택영역이미지로~" 강의보고 VBA 모듈에 기입된 명령문이 있었는데
이 강의에서의 모듈 명령문과 중복이 되었습니다.(한 파일 내에서)
중복된 것을 정리하니까 둘다 잘 작동합니다.
야매악사
야매악사 2020.04.06 19:10
인쇄영역으로 설정된 부분만 PDF(인쇄) 변환을 하고자 합니다. 이럴땐 어떻게 해야할까요?
오빠두엑셀
오빠두엑셀 작성자 2020.04.06 20:53
안녕하세요?^^ 인쇄영역을 범위로 설정하시려면 PageSetup.PrintArea 속성을 이용하시면 됩니다.
아래와 예제를 응용해보시겠어요?
아래 예제는 Sheet1의 인쇄영역범위를 반환합니다.

sheet1.Range(sheet1.PageSetup.printarea)
제시해드린 답변이 도움이 되셨길 바랍니다.
감사합니다.
이혁주
이혁주 2020.11.28 11:04
죄송합니다. 이 내용을 모듈 어디에 넣어야 될까요?
오빠두엑셀
오빠두엑셀 작성자 2020.11.29 04:48
Rng_To_Pdf 함수의 첫번째 인수로 사용하시면 됩니다.
이혁주
이혁주 2020.11.30 08:13
Sub Test()

Dim FileName As String

FileName = "케어라벨 발주서 " & Sheet1.Range("a4").Value & "-"

Page_Setup Sheet1, FileName, HCenter:=True

Rng_To_Pdf sheet1.Range(sheet1.PageSetup.printare), FileName, AddSequence:=True

End Sub

이렇게 했는데요...

[ '438'런타임 오류가 발생하였습니다.:
개체가 이 속성 또는 메서드를 지원하지 않습니다.]

라고나오네요.

귀찮으시겠지만 확인 부탁드릴께요.

감사합니다.
오빠두엑셀
오빠두엑셀 작성자 2020.11.30 17:13
안녕하세요.
VBA의 경우 적어주신 내용만으로는 정확한 답변을 드리기가 어렵습니다.
어느 부분에서 오류가 발생하는지 확인해주시고
만약 Page_Setup 또는 Rng_To_Pdf 에서 노란색이 강조되며 오류가 발생한다면
해당 명령문을 모듈에 추가해 주셨는지 확인해주세요 ^^
또는 완성파일을 확인해보시길 바랍니다.
감사합니다.
실바람
실바람 2021.12.10 16:44
아이거어~ 저도 안되서 무심코 복사붙여넣기의 업보인지 헤메던 끝에 찾오보니위에 탈자가 있는 것을 나중에 발견했네요 ㅋ~
.sheet1.Range(sheet1.PageSetup.printare)
printare => printarea
오빠두엑셀
오빠두엑셀 작성자 2021.12.10 21:32
실바람님 안녕하세요?
앗 댓글에 오타가 있었네요..!!;; 바로 수정했습니다.
확인해주셔서 감사합니다.
베베
베베 2022.08.21 23:56
저기 위에 5-3에 예제는 수정이 안되어 있네요..^^;
위에 예제 복사해서 계속 안되어서
왜 안되나 한참 고민....
파달
파달 2020.04.08 11:59
강의 잘 보고 있습니다.
항상 감사드립니다.
점심 맛있게 드시고 좋은하루 되십시요~!
김효정
김효정 2020.04.08 16:23
안녕하세요.강의 잘 보고 있습니다. 다름이 아니라 PageSetup 모듈에서 바닥글의 글꼴 설정을 하고 싶은데 어떻게 하면 될까요??
오빠두엑셀
오빠두엑셀 작성자 2020.04.09 16:52
안녕하세요?^^
글꼴을 수정하시려면, PageSetup 모듈의 인수를 아래와 같이 작성해보시기 바랍니다.
"&""폰트명""&T"
' // 출력 시간이 해당 폰트로 출력됩니다.

"&""+,굵게""무단 복제를 금합니다."
' // '무단 복제를 금합니다' 라는 문구가 굵은 글꼴로 바닥글에 추가됩니다.

제시해드린 답변이 도움이 되셨길 바랍니다.
감사합니다!^^
그리고
그리고 2020.04.30 10:44
선택 영역을 수정해 보고 싶습니다.
예로 단추는 sheet3에만들고 선택영역은 sheet1에서 불러오고 싶고
또하나는 sheet3에 단추를 만들고 선택영역은 sheet1에서 A1:M20 이런식으로 만들어 응용해보고 싶습니다.
도움 요청 드립니다.
어디를 손봐야 할까요?
Sub rng_to_pdf(rngselect As Range, _
Optional filename As String = "pdf출력", _
Optional savepath As String = "", _
Optional docproperty As Boolean = True, _
Optional printarea As Boolean = False, _
Optional openpdf As Boolean = False, _
Optional addsequence As Boolean = True)
Dim ws As Worksheet
Dim filepath As String
Set ws = rngselect.Parent
If savepath = "" Then savepath = "C:\Users\Home\Desktop\pdf\" '저장경로
filepath = savepath & filename & ".pdf"
If ValidFileName(filepath) = False Then MsgBox ("올바른 파일명을 사용하세요"): Exit Sub
If addsequence = True Then
filepath = FileSequence(filepath, 1)
End If
rngselect.ExportAsFixedFormat xlTypePDF, filepath, xlQualityStandard, docproperty, printarea, , , openpdf
End Sub
오빠두엑셀
오빠두엑셀 작성자 2020.05.02 21:32
안녕하세요?^^
다른 시트 범위를 pdf로 출력하고자 하신다면 기존 명령문을 수정하실 필요는 없습니다.
아래와 같이 코드를 작성해보시겠어요?
Sub Test

rng_to_pdf Sheet1.Range("A1:M20")

End Sub

이후 Sheet3에 단추를 추가하신 뒤, 매크로지정으로 Test 명령문을 연결합니다.
이후 Sheet3의 단추를 클릭하면 Sheet1의 지정한 범위가 PDF로 저장됩니다.
답변이 도움이 되셨길 바랍니다.
감사합니다.
그리고
그리고 2020.04.30 11:39
PDF가 아닌 선택범우를 엑셀로 저장하고자 한다면 어떻게 수정이 필요할까요?
rngselect.ExportAsFixedFormat xlTypePDF, filepath, xlQualityStandard, docproperty, printarea, , , openpdf
오빠두엑셀
오빠두엑셀 작성자 2020.05.02 21:37
안녕하세요?^^
선택범위를 PDF가 아닌 엑셀로 저장하시려면 아래 순서로 명령문을 작성하셔야합니다.
범위복사 -> 새로운 파일 추가 -> 붙여넣기 -> 파일 저장
아래와 같이 명령문을 작성해보시겠어요?
Sub Test

Selection.Copy
Dim WB : Set WB = Application.WorkBooks.Add
WB.WorkSheets(1).Range("A1").Paste

WB.SaveAs

End Sub


상황에 따라 SaveAs 부분을 적절히 수정 후 사용하시면 됩니다.^^
SaveAs 함수에 대한 인수는 아래 링크를 참고해보세요.
https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.saveas
답변이 도움이 되셨길 바랍니다.
감사합니다.
박원석
박원석 2020.06.09 06:15
선생님 강의 완전 잘 보고 있습니다. 왕초보임에도 불구하고 일단 무조건 따라서 하다보니 이해가 되는 것 같습니다.^^
저의 궁금한 점은 혹시 모든 인원 자료를 한번에 pdf 변환 하는 매크로 제작도 가능할런지요. 많은 인원의 자료를 변환 할때에 유용할 것 같아서요. 시간되실때 답변 부탁 드리겠습니다. 감사합니다. ^^
 
오빠두엑셀
오빠두엑셀 작성자 2020.06.09 10:32
안녕하세요~^^
네 물론 가능합니다. For 문으로 모든 인원을 참조할 수 있도록 코드를 작성하시면 되는데요.
예제파일을 참고하자면 아래와 같이 되겠습니다 ^^
<pre>Sub Test()
 
Dim FileName As String
For i = 1 to 4
Sheet4.Range("C3").Value = "OPD000" & i
FileName = Sheet4.Range("E3").Value & "-" & Sheet4.Range("H3").Value & "년 " & Sheet4.Range("H4").Value & "월"
 
Page_Setup Sheet4, FileName, HCenter:=False
 
Rng_To_Pdf Selection, FileName, AddSequence:=False
Next
End Sub</pre>
다빈치
다빈치 2021.11.23 16:45
안녕하세요? 방금 전에 댓글 달았는데 삭제가 되었네요?
저도 박원석님 처럼 전체 인원의 명세를 모두 pdf로 한꺼번에 변환하려고 하는데...
선생님께서 알려주신대로
For i = 1 to 4
Sheet4.Range("C3").Value = "OPD000" & i

를 넣어서 실행했더니 "컴파일오류입니다. 변수가 지정되지 않았습니다."라고 오류가 뜹니다. 방법을 알려주시면 감사하겠습니다.
그리고 인원이 수십명일 경우에는
For i = 1 to n으로 수정하면 될 것 같기는 한데 인원이 수시로 변동되는 경우는 그 변하는 범위의 리스트에 해당하는 숫자만큼의 인원수대로 출력할 수 있는 방법도 알려주시면 고맙겠습니다.
VBA의 기초가 부족하다보니...
조금의 변형도 쉽지가 않네요 ㅠㅠ
바쁘시겠지만 시간 나실 때 한번만 봐주셨으면 합니다...
감사합니다.
오빠두엑셀
오빠두엑셀 작성자 2021.11.24 18:47
안녕하세요?
모듈 맨 위쪽에 Option Explicit 이 적혀있다면 지운 뒤 명령문을 다시 실행해보세요.
인원수를 수시로 받아오려면, 인원수를 계산하는 셀을 따로 만든 뒤
For i = 1 to Range("A1").Value
형태로 사용해보시길 바랍니다.^^
감사합니다.
젊은이들
젊은이들 2021.11.26 13:28
안녕하세요, 좋은 강의 감사드립니다.
위처럼 실행했더니 사 번 : (C3) 셀이 계속 H5 셀에 연결된 게 풀리더라고요.
어쩔 수 없는 건가요?
오빠두엑셀
오빠두엑셀 작성자 2021.11.29 21:01
Value는 값을 입력하기 때문에 기존 함수는 사라집니다.
표 구조나 매크로를 적절히 수정하면 해결 가능합니다. 이 부분은 직접 공부해보시면 좋을 것 같습니다^^;
승빵빵
승빵빵 2020.07.13 16:03
안녕하세요 유튜브통해 알게되어 큰 도움 받고 있습니다.
혹시 2개의 시트를 동시에 pdf로 저장되게는 할 수 없을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.07.14 11:01
가능합니다. ^^
별도의 임시시트를 추가하신 뒤, 임시시트에 두 시트의 내용을 병합해서 pdf로 출력해보세요.
winyu
winyu 2020.07.14 11:56
앗 감사합니다. 한번 해보고 궁금한 점 있으면 다시 댓글 남기겠습니다
winyu
winyu 2020.07.15 15:12
감사합니다 쌤 말씀대로 하니까 해결됐어요!! 혹시 저장장소를 바꾸는 방법도 있을까요?
winyu
winyu 2020.07.14 09:48
안녕하세요 강의 잘 보고 있습니다. 업무에 많이 도움되고있어요 :)
다른게 아니고 2개시트를 동시에 pdf로 변환하는법은 없을까요?
정용선
정용선 2020.07.22 14:13
PDF로 저장할때 용지 방향이 "세로"로 저장이 되더라구요 혹시 "가로"로 저장할수있는 방법 없을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.07.22 15:54
안녕하세요?^^
Page_Setup 명령문의 Orient 인수를 변경해보세요.
Page_Setup .... eOrient:=xlLandscape
와 같이 함수를 수정해보시기 바랍니다. :)