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

이미지 저장 명령문 (Rng_To_Image)

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

엑셀 선택영역을 그림으로 0.5초만에 저장하는 방법! - 이미지 저장 명령문

이 강의에서는 엑셀에서 선택한 셀 범위나 시트 전체를 PNG 이미지 파일로 저장하는 Rng_To_Image VBA 매크로의 작성 방법을 다룹니다. 보고서나 회의 자료를 이미지로 공유해야 하는 실무 상황을 가정해, 매크로의 9단계 동작 원리부터 ValidFileName, GetDesktopPath 등 보조 함수와의 연동 방식까지 단계별로 정리합니다.

이미지 저장 명령문 (Rng_To_Image)
DOWNLOADS

실습자료를 준비했어요

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

실습 가이드

이번 강의에서는 엑셀에서 선택한 영역 또는 시트를 이미지 파일로 저장하는 'VBA 이미지 저장 매크로'를 직접 작성하는 방법을 다룹니다. 선택영역뿐 아니라 시트에서 사용 중인 영역을 자동으로 인식하여 그림 파일로 저장하는 응용까지 함께 살펴봅니다.

Q. 선택영역이 아닌 시트 전체를 그림파일로 저장하고 싶어요

Rng_To_Image 함수의 인수로 워크시트의 사용 범위(UsedRange)를 전달하면, 시트에서 데이터가 입력된 전체 영역을 자동으로 인식하여 그림 파일로 저장할 수 있습니다.

Rng_To_Image Activesheet.UsedRange

Q. 저장경로를 통합문서와 같은 경로로 설정하고 싶어요.

4-b 오류처리 부분의 SavePath 변수를 ActiveWorkbook.Path 로 변경하면, 매크로 실행 시 현재 통합문서가 저장된 폴더에 이미지가 함께 저장됩니다.

If ValidFileName(FileName) = False Then MsgBox "올바른 파일명을 사용하세요.": End
 
If SavePath = "" Then SavePath = ActiveWorkBook.Path & "\"   '// 이 부분에서 SavePath를 통합문서의 저장경로로 변경합니다.
FilePath = SavePath & FileName & ".png"
 
If AddSequence = True Then
    FilePath = FileSequence(FilePath, 1)
End If

예제파일 이해하기 (직원 급여명세서 기본양식)

예제파일은 3개의 시트로 구성되어 있습니다.

  • 세율표 : 2019년 기준 소득세와 4대보험 요율이 정리된 시트입니다.
  • 급여자료 : 세율표를 기준으로 직원별 월소득에 따른 공제액과 실수령액을 계산하는 시트입니다.
  • 급여명세서 : 월과 사원번호를 선택하여 직원의 급여명세서를 출력하는 시트로, 급여자료 시트의 값을 참조합니다.

급여자료와 급여명세서 시트에는 INDEX/MATCH 함수가 사용되었습니다. 함수의 자세한 사용법은 관련 포스트에서 확인할 수 있습니다.

INDEX MATCH 함수 다중조건

강의에 사용된 전체 명령문

Option Explicit
 
Sub Test()
 
Rng_To_Image Selection
 
End Sub
 
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
 
Sub Rng_To_Image(rngSelection As Range, _
                Optional FileName As String = "엑셀이미지", _
                Optional SavePath As String = "", _
                Optional AddSequence As Boolean = True)
 
Dim NewWs As Worksheet
Dim picRange As Object: Dim MyObj As Chart
Dim PicH As Double: Dim PicW As Double
Dim FilePath As String
 
If ValidFileName(FileName) = False Then MsgBox "올바른 파일명을 사용하세요.": End
 
If SavePath = "" Then SavePath = GetDesktopPath
FilePath = SavePath & FileName & ".png"
 
rngSelection.CopyPicture xlScreen, xlPicture
 
Set NewWs = ActiveWorkbook.Sheets.Add
NewWs.Paste
 
Set picRange = NewWs.Shapes.Item(1)
With picRange
    PicH = .Height
    PicW = .Width
    .Delete
End With
 
With NewWs.Shapes.AddChart2
    .Height = PicH
    .Width = PicW
End With
 
Set MyObj = NewWs.Shapes.Item(1).Chart
 
MyObj.ChartArea.Select
MyObj.Paste
 
If AddSequence = True Then
    FilePath = FileSequence(FilePath, 1)
End If
 
MyObj.Export FilePath, "PNG"
 
Application.DisplayAlerts = False
NewWs.Delete
Application.DisplayAlerts = True
 
End Sub
 
Public Function FileExists(ByVal path_ As String) As Boolean
 
    FileExists = (Dir(path_, vbDirectory) <> "")
 
End Function
 
Public Function GetDesktopPath(Optional BackSlash As Boolean = True) As String
 
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) As String
 
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

강의에 사용된 VBA 사용자 지정함수

본 강의에서는 총 4개의 사용자 지정 함수가 추가로 사용되었습니다.

  • FileExists 함수 : 지정한 파일경로에 파일이 실제로 존재하는지 확인합니다.
  • GetDesktopPath 함수 : 사용자 컴퓨터의 바탕화면 경로를 반환합니다.
  • FileSequence 함수 : 파일이름이 중복되지 않도록 자동으로 순번을 매깁니다.
  • ValidFileName 함수 : 지정한 파일이름이 윈도우에서 사용 가능한지 점검합니다.
FileExists 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 지정한 파일경로의 파일존재여부를 확인합니다.
구문 : = FileExists ( 파일경로 )
Public Function FileExists(ByVal path_ As String) As Boolean
 
FileExists = (Dir(path_, vbDirectory) <> "")
 
End Function
 
Sub 파일존재여부확인(Path As String)
 
'##################################################################################
'Path로 입력된 경로에 파일이 존재하는지 여부를 확인하여 안내메세지를 띄웁니다.
'##################################################################################
 
If FileExists(Path) = True Then
MsgBox "해당 파일이 이미 존재합니다." & vbNewLine & _
"파일경로 : " & vbNewLine & _
Path
Else
MsgBox "해당 파일이 존재하지 않습니다."
End If
 
End Sub
GetDesktopPath 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 사용자 컴퓨터의 바탕화면경로를 출력합니다.
구문 : = GetDesktopPath ( [백슬래쉬표시] )
Public Function GetDesktopPath(Optional BackSlash As Boolean = True) As String
 
'// 사용자의 바탕화면 경로를 출력합니다.
 
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
 
Sub 바탕화면경로_()
 
MsgBox "현재 사용중인 컴퓨터의 바탕화면 경로는" & vbNewLine & _
        "[[ " & GetDesktopPath & " ]]" & vbNewLine & _
        "입니다."
 
End Sub
FileSequence 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 파일이름이 중복되지 않도록 파일이름에 순번을 매깁니다.
구문 : = FileSequence ( 파일경로, [시작번호] )
Function FileSequence(FilePath As String, Optional Sequence As Long = 1) as String
 
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
 
Sub 파일저장()
 
Dim strPath As String
Dim newPath As String
 
strPath = GetDesktopPath & "복사본.xlsm"
newPath = FileSequence(strPath, 1)
 
ThisWorkbook.SaveAs newPath
 
MsgBox newPath & "경로로 파일저장을 완료하였습니다."
 
End Sub
ValidFileName 함수 (VBA) :: 사용자지정함수 [상세설명 및 예제 보러가기]
설명 : 지정한 파일이름의 사용가능 여부를 확인합니다.
구문 : = ValidFileName ( 파일경로 )
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
 
Sub 파일이름체크()
 
If ValidFileName(Sheet1.Range("F2").Value) = True Then
    MsgBox "사용가능한 파일이름입니다."
Else
    MsgBox "사용 불가한 파일이름입니다.", vbCritical
End If
 
End Sub

매크로 동작원리 이해하기

선택한 범위를 이미지로 저장하는 매크로는 총 9단계로 구성됩니다.
엑셀은 셀 영역을 곧바로 이미지 파일로 저장하는 기능을 제공하지 않습니다. 따라서 이미지를 빈 차트 안에 붙여넣은 뒤, 차트를 그림 형식으로 출력하는 우회 방식을 사용합니다. 매크로의 자세한 동작 원리는 영상 강의에서 함께 설명드렸습니다.

  1. 선택된 범위를 그림 형태로 복사
  2. 임시 워크시트 추가
  3. 추가된 임시시트에 이미지 붙여넣기
  4. 이미지의 높이와 넓이 확인 후 이미지 제거
  5. 추가된 임시시트에 빈 차트 생성
  6. 차트의 높이와 넓이를 이미지와 동일하게 변경
  7. 차트 안에 이미지 붙여넣기
  8. 차트를 원하는 파일경로에 이미지 형태로 출력
  9. 임시 워크시트 삭제
VBA 명령문 작성하기

선택한 범위를 이미지로 저장하는 매크로를 단계별로 작성해보겠습니다.

먼저 Rng_To_Image 라는 명령문을 아래와 같이 인수를 포함하여 정의합니다.

Sub Rng_To_Image(rngSelection As Range, _
                Optional FileName As String = "엑셀이미지", _
                Optional SavePath As String = "", _
                Optional AddSequence As Boolean = True)
 
End Sub

명령문에 추가된 각 인수의 역할은 다음과 같습니다.

  • rngSelection : 사용자가 선택한 범위입니다.
  • FileName : 이미지로 저장될 파일명입니다. (기본값: 엑셀이미지)
  • SavePath : 이미지가 저장될 폴더의 경로입니다. (기본값: 빈칸 — 바탕화면)
  • AddSequence : 같은 이름의 파일이 있을 때 덮어쓸지, 순번을 붙여 저장할지 결정합니다.
A. 변수생성

매크로에서 사용할 변수를 다음과 같이 선언합니다.

Dim NewWs As Worksheet
Dim picRange As Object: Dim MyObj As Chart
Dim PicH As Double: Dim PicW As Double
Dim FilePath As String
  • NewWs : 임시로 추가할 워크시트입니다.
  • PicRange : 선택한 범위를 그림 형태로 붙여넣은 이미지 개체입니다.
  • MyObj : 이미지를 붙여넣을 차트 개체입니다.
  • PicH, PicW : 이미지의 높이와 넓이입니다.
  • FilePath : 이미지가 저장될 파일명을 포함한 전체 파일 경로입니다.
B. 파일이름 점검 및 저장할 파일경로 생성

윈도우에는 파일이름으로 사용할 수 없는 특수문자가 있습니다. 사용자가 지정한 파일이름이 윈도우에서 사용 가능한지 ValidFileName 함수로 먼저 점검합니다.

파일이름에 문제가 없으면 전체 파일경로를 생성합니다. 보조 인수인 SavePath 가 빈칸으로 전달될 경우, GetDesktopPath 함수를 통해 바탕화면 경로를 기본 저장 위치로 사용합니다.

AddSequence 인수가 True이면 FileSequence 함수를 호출하여, 같은 이름의 파일이 이미 존재할 경우 자동으로 순번을 매겨 새 파일명을 생성합니다.

If ValidFileName(FileName) = False Then MsgBox "올바른 파일명을 사용하세요.": End
 
If SavePath = "" Then SavePath = GetDesktopPath
FilePath = SavePath & FileName & ".png"
 
If AddSequence = True Then
    FilePath = FileSequence(FilePath, 1)
End If
C. 선택한 범위를 그림형태로 복사

매크로에 전달된 rngSelection 범위를 그림 형식으로 클립보드에 복사합니다. 본 예제에서는 사용자가 선택한 범위를 그대로 받아왔지만, 별도의 셀 범위를 임의로 지정하여 복사할 수도 있습니다.

rngSelection.CopyPicture xlScreen, xlPicture
D. 임시시트 생성 및 그림 붙여넣기

이미지를 임시로 보관할 워크시트를 새로 추가한 뒤, 복사한 그림을 해당 시트에 붙여넣습니다.

Set NewWs = ActiveWorkbook.Sheets.Add
NewWs.Paste
E. 이미지의 높이와 넓이 확인 후 이미지 제거

붙여넣은 이미지의 높이와 넓이 값을 PicH, PicW 변수에 저장한 뒤, 임시 이미지는 삭제합니다.

Set picRange = NewWs.Shapes.Item(1)
With picRange
    PicH = .Height
    PicW = .Width
    .Delete
End With
F. 빈 차트 생성 및 높이와 넓이 조정

임시 시트에 빈 차트를 생성한 뒤, 앞 단계에서 저장해 둔 이미지의 크기와 동일하게 차트의 높이와 넓이를 조정합니다.

With NewWs.Shapes.AddChart2
    .Height = PicH
    .Width = PicW
End With
G. 빈 차트안에 그림 붙여넣기

차트 안에 그림을 붙여넣습니다. 차트에 그림을 붙여넣을 때에는 반드시 Select 로 차트가 선택된 상태에서 Paste 를 실행해야 매크로가 정상 동작한다는 점에 유의하세요.

Set MyObj = NewWs.Shapes.Item(1).Chart
 
MyObj.ChartArea.Select
MyObj.Paste
H. 차트를 이미지로 저장

완성된 차트를 이전 단계에서 만든 파일 경로에 PNG 형식의 이미지로 출력합니다.

MyObj.Export FilePath, "PNG"
I. 임시시트 삭제

매크로 실행을 위해 임시로 추가했던 워크시트를 삭제합니다.

엑셀은 시트를 삭제할 때 기본적으로 확인 메시지를 띄웁니다. 매크로 실행 중 메시지가 나타나지 않도록 시트 삭제 전 DisplayAlerts 속성을 False 로 설정한 뒤, 삭제가 끝나면 다시 True 로 복원합니다.

Application.DisplayAlerts = False
NewWs.Delete
Application.DisplayAlerts = True

5. 이미지 저장 매크로 테스트

완성된 명령문이 정상 동작하는지 확인해보겠습니다. 아래와 같이 Test 명령문을 작성한 뒤 실행합니다.

Sub Test()
 
Rng_To_Image Selection
 
End Sub

매크로를 실행하면 아래 그림과 같이 선택된 범위가 바탕화면에 이미지 파일로 자동 저장되는 것을 확인할 수 있습니다.

범위를 이미지로 저장 매크로 완성 GIF

댓글 74
5 (32개 평가)
hjkang
hjkang 2019.12.24 03:35
안녕하세요. 강의가 정말 유용합니다!! 대단하셔요.
강사님, 혹시 위와 같은 방법으로
엑셀파일을 워드 파일로 변경하는 매크로도 가능할까요??
오빠두엑셀
오빠두엑셀 2019.12.24 03:40
네 물론 가능합니다.^-^ Word 라이브러리를 사용하시면 됩니다.
방법은 이후 강의인 아웃룩에서 진행한 방법과 동일하게 진행하시면 됩니다.
개체만 Outlook에서 Word로 변경한 뒤 코드를 작성해보시겠어요?:)
신태환
신태환 2019.12.24 03:35
안녕하세요. 강의 잘 보고 있습니다 정말 감사드려요!
다른게 아니고 혹시 저장을 바탕화면말고 특정 폴더에 할수있는 방법이 있을까요?
오빠두엑셀
오빠두엑셀 2019.12.24 05:39
안녕하세요? 오빠두엑셀입니다.
GetDesktopPath 함수 대신 값을 특정 폴더로 변경해보시겠어요?^-^
예를 들어 SavePath = "C:/" 등으로 설정하시면 됩니다.
지연
지연 2020.01.23 15:58
안녕하세요. 강의 잘 들었습니다.
하지만 엑셀 초보자인 저에게는 아직 매크로는 너무 어려운 공간이네요 ㅠㅠ
마지막부분 요약하면 도형을 삽입해서 매크로 실행링크를 걸고,
선택영역 지정 후 도형을 클릭해줘야만 선택영역 이미지 저장이 가능하다는 뜻인가요?
여러 엑셀파일에서 해당부분만 이미지로 저장하고 끄고.. 이런식으로 사용하고싶은데요
꼭 도형을 넣고 링크를 걸어줘야 가능한건가요?
오빠두엑셀
오빠두엑셀 작성자 2020.01.26 03:51
지연님 빠하! 안녕하세요?^^
소중한 의견 감사드립니다! 문의주신 내용은 추가기능으로 설정하면 바로 해결가능한데요.
이번 설 연휴가 지나고, 주말이 되기전에 추가기능형태의 파일을 작성해서 올려드릴테니 이번 주말에 다시한번 더 들려주시겠어요?^^
감사합니다.
장인임
장인임 2020.01.30 15:00
감사합니다!
단축키를 지정하는 쪽으로 설정이 가능하다면
그쪽으로 부탁드립니다!
오빠두 짱
오빠두 짱 2020.04.25 13:07
안녕하세요~^^
혹시 버튼 말고.. 단축키를 누르는 내용이 어디에 있나요?
제가 찾을 수가 없어서..^^

항상 감사합니다.~ 앞으로도 쭈욱~~ 부탁드려요~ ㅎㅎ
오빠두엑셀
오빠두엑셀 작성자 2020.04.26 00:03
안녕하세요?^^
매크로 단축키 설정은
'개발도구' - '매크로' - '원하는 매크로 선택' - '옵션' - '단축키'

에서 설정가능합니다.
만약 개발도구가 안보이실 경우 아래 링크를 참고해보세요.
www.oppadu.com/개발도구-활성화/
답변이 도움이 되셨길 바랍니다.
감사합니다.
오빠두 짱
오빠두 짱 2020.04.29 03:59
짱^^~~
강승균
강승균 2020.02.02 17:09
올려주신 동영상과 블로그 에첨부한 예제화일로 공부중인데요
제 컴에서 돌려보면
"개체가 이 속성 또는 메서드를 지원하지 않습니다(오류 번호 438)"
라는 에러메세지가뜨네요
디버깅 오류 되는곳은
With NewWS.Shapes.AddChart2
이부분입니다..
해법을 알수있나요?
윈도우10 , 엑셀 2007 사용버전입니다..
오빠두엑셀
오빠두엑셀 작성자 2020.02.03 06:39
강승균님 빠하!?‍♂️ 안녕하세요.^^
AddChart2는 엑셀 2013 이후버전부터 지원이되는 함수입니다.
따라서 엑셀 2007 버전을 사용중이시라면, 해당 부분을
With NewWS.Shapes.Addchart

로 바꾼 뒤 실행해보시겠어요?
제 답변이 도움이 되셨길 바랍니다.
감사합니다.^-^
의자현
의자현 2020.02.26 18:40
안녕하세요 강의 너무 감사합니다. 제가 찾던 강의에요 ㅠㅠ 매번 번거롭게 작업을 했었습니다.
혹시 이미지로 저장을 할때 가로크기를 1300픽셀로 조절해서 저장하는 방법좀 알려주시면 더욱 감사하겠습니다.

소중한 강의 다시 한번 감사드립니다. 건강하시고 행복하세요^^
오빠두엑셀
오빠두엑셀 작성자 2020.02.27 13:30
안녕하세요?^^
명령문에서 아래 코드를 상황에 맞춰 적절히 수정해보시기 바랍니다.

ix = Application.ActiveWindow.PointsToScreenPixelsX(1)

With NewWs.Shapes.AddChart2
.Height = PicH
.Width = PicW / ix * 1300
End With

제 답변이 도움이 되셨길 바랍니다.
감사합니다.
쏘룽
쏘룽 2022.10.21 11:28
컴파일 오류입니다. 변수가 정의되지 않았습니다. 라고 오류가 뜨는데 ㅠㅠ 어떻게 해결해야 할지 모르겠습니다.....
주니03
주니03 2020.04.19 18:46
안녕하세요? 강의 잘 봤습니다. 동일하게 설정하여 잘 작동은 하는데, 셀을 이미지로 붙여넣기 하는 과정에서 일정 크기 이상의 영역을 그림으로 추출하면 시트의 확대, 축소 상태에 따라 가운데 부분에 가로, 세로 굵은 줄이 하나 또는 여러개 나타납니다. 이는 매크로 없이 수동으로 해 보아도 동일한데요, 수동일때는 새 시트에 그림으로 붙여 넣은 후 확대를 해서 보면 선이 없어집니다. 혹시 이에 대한 해결책이 있을까요? 엑셀 2013 사용중입니다.
오빠두엑셀
오빠두엑셀 작성자 2020.04.21 13:06
안녕하세요?^^
아쉽게도 이는 엑셀 자체적인 문제이므로, 약간의 트릭을 사용해주셔야 할듯 합니다.
선택한 범위를 복사하시기 전에, Zoom 속성을 사용해서 시트의 확대 표시배율을 변경하신 뒤, 복사하고 이후 다시 원복시키는 방법으로 코드를 작성해보시면 어떨까 생각됩니다.
i = ActiveWindow.Zoom
ActiiveWindow.Zoom = 150
........
ActiveWindow.Zoom = i

이런 형태로 구현해보시면 해결되실듯 합니다 .^^
답변이 도움이 되셨길 바랍니다.
감사합니다.
호잇1
호잇1 2020.05.04 20:44
안녕하세요. 강의 항상 잘 보고 있습니다!
한가지 질문이 있는데요.

제가 구현하고싶은 매크로는
급여명세표 이름 넣는 칸에
제가 일일이 입력을 해서 캡쳐 영역을 선택한 뒤 저장하는 것이 아닌,

다른 시트에 있는 총 직원 명단을
자동으로 하나하나 복사해서 붙여넣고 자동으로 캡쳐하는 형태거든요.

혹시 파일 이름 저장할 때 파일이름을 엑셀이미지1, 엑셀이미지2 이런식이 아니라
직원 이름으로 저장도 가능한지요?
오빠두엑셀
오빠두엑셀 작성자 2020.05.05 12:33
안녕하세요?^^
네 물론 가능합니다. 아래와 같이 Rng_To_Image 함수를 작성하시면, 직원 이름으로 그림파일이 저장됩니다.
Rng_To_Image 이미지출력범위, 직원명범위

답변이 도움이 되셨길 바랍니다.
감사합니다.
호잇1
호잇1 2020.05.05 20:52
감사합니다. 해결했습니다 ㅠㅠㅠㅠ
좋은 하루 보내세요. 아니 적게 일하고 많이 버세요 흑흑
포튼가먼트
포튼가먼트 2021.11.14 12:58
혹시 어떻게 ㅠㅠ 해결하셨을까요..... rng_to_image 이미지 출력범위까지는 해결했는데, 직원명으로 파일이름을 저장하는 것이 안됩니다 ㅠㅠㅠㅠㅠ
갓블레스유
갓블레스유 2020.07.09 13:17
안녕하세요

기존 엑셀 2013버전에서
아래 코드로 그림파일 변환하여 잘 사용중인데
2016으로 업데이트후 해당 코드를 실행하면
그림 첨부는 생성되나 그림안 엑셀내용이 흰색으로만 나타나네요
혹시 도움을 얻고자 아래 코드에서
호환이 안되는 문제 코드가 있으시면
2016버젼으로 수정가능한지 문의 드립니다
감사합니다


Option Explicit

Sub save_Range_To_Pic()

  Dim strCell As String
  Dim rngCur As Range
  Dim cht As ChartObject
  Dim strPath As String
   
  Application.ScreenUpdating = False   '화면 업데이트 일시 중단
  On Error Resume Next             '에러 발생해도 계속 진행
   strPath = "D:\ASUNG\2.MACRO"       '이 엑셀파일이 저장된 폴더의 경로
  If Selection.Areas.Count > 1 Then    '한 개 이상의 영역을 선택시 중단
    MsgBox "한 개의 영역만 가능. 영역 다시 선택후 재실행", 64, "영역선택 오류"
    Exit Sub
  End If
   
  If Selection.Rows.Count = 1 And Selection.Columns.Count = 1 Then '1개의 셀이면
     strCell = MsgBox("현재 한 셀만 선택함. 계속할가요?", 64 + vbYesNo, "1개의 셀 선택")
    If strCell = vbNo Then Exit Sub    'No를 선택하면 중단
  End If

  Set rngCur = Selection         '현재 선택 영역을 개체변수에 넣음

  rngCur.CopyPicture           'Selection을 그림으로 복사해서 clipboard에 넣음
   
  Set cht = ActiveSheet.ChartObjects.Add(0, 0, Selection.Width, Selection.Height)
                              '새로운 chartobject를 하나 삽입
  cht.Chart.Paste                'Selection을 복사해서 붙여 넣음
  cht.Chart.Export strPath & Application.PathSeparator & "myPic.jpg" '그림을 내보냄
  cht.Delete                    '삽입했던 chartobject를 삭제

  If Err = 0 Then                 '만약 제대로 그림이 내보내졌으면 성공 메시지 표시
    MsgBox "Export was successful. Check the folder of this file.", 64, "Pic Export"
  End If
   
  On Error GoTo 0                '혹시 에러 발생했으면 초기화
  Set cht = Nothing               '개체변수 초기화
  Set rngCur = Nothing
End Sub
오빠두엑셀
오빠두엑셀 작성자 2020.07.10 11:23
안녕하세요? ^^
코드를 한단계씩 디버그 (F8키) 하시면 어느 부분에서 옳지 않은 동작을 하는지 확인가능 합니다.
디버깅 후 오류가 발생하는 부분과 함께 글 올려주시면 확인 후 답변드리겠습니다.
대공느
대공느 2020.09.04 14:08
안녕하세요. 덕분에 좋은 vba 코드 사용하였습니다.
  1. 드래그로 캡쳐 범위를 정하는 것이 아닌 a1:b3 처럼 고정해서 쓰려면 어느 부분을 어떻게 수정해야 할까요?
  2. 저장하는 위치가 바탕화면인데, 엑셀 파일이 저장된 폴더에 저장하려면 어떻게 해야할까요?
감사합니다.
오빠두엑셀
오빠두엑셀 작성자 2020.09.04 17:51
안녕하세요.
1. Selection 을 Range("A1:B3")으로 바꿔보세요.
2. GetDesktopPath 대신 ThisWorkbook.Path & "\" 를 입력해보세요.
대공느
대공느 2020.09.08 16:40
가..감사합니다!!!
이은미
이은미 2021.02.21 02:41
안녕하세요 너무좋은자료 올려주셔서 도움이많이되었습니다!!
추가적으로 궁금한게있어서 문의드립니다

range를("A1":"D1")("A2":"D2")("A3:D3") 이렇게 규칙적으로 변하게하면서 총 10줄을 이미지화하고싶은데요 for문을 쓰면 될것같은데 여러번 시도를해봐도 오류가떠서 문의드립니다

혹시 어떻게하면 반복적으로 한번에 수행시킬수있을까요?? 감사합니다~!!
2daldal
2daldal 2020.11.16 10:24
안녕하세요 올려주신 강의로 업무에 유용하게 사용하고 있습니다.
현재 매일아침 자동으로 데이터를 조회하여 이미지로 저장하여 사용중인데요. 간혹 새 이미지가 안올라와있어 엑셀을 보면 “4-D 임시시트 생성 및 그림붙여넣기” 이 단계에서 걸려서 다음 단계로 진행이 안되고 멈춰있더라구요
‘1004’ 런타임 오류가 발생하였습니다. 데이터를 붙여 넣을 수 없습니다. 이렇게 팝업이 떠 있고 디버그 버튼을 누르면
newws.paste로 이동이 됩니다.
매일 그러는 것도 아니고 자주발생하면 일주일에 두세번 나오는 일이라 어떻게 해결을 해야할지 잘 몰라서 문의 한번 드립니다