본문 바로가기
Uipath

VBA Excel 특정 범위 지정 PNG 파일 생성하기

by Sol95 2022. 12. 14.
728x90

중요 : 소스 그대로 붙여 넣기 하면 안 돌아갑니다 내용 읽고 필요한 부분 선택해서 사용하세요

RPA 개발을 하다보면 현업들은 특정 범위의 결과를 메일로 받고 싶어 한다

특히 첨부파일로 저장해서 보내주면 99% 이상 메일 본문에 이미지를 넣어달라고 하는데 이때 PNG 파일 생성해서 메일 본문에 추가해주면 된다

 

해당 소스를 실행 하려면 절취선 하단 부분에 Excel_Range_PNG_Result 실행하면 Call을 통해 Excel_Range_PNG를 실행하게 됩니다

 

단순 Excel에서 결과값을 받지 않고 사용한다면 절취선 아래 부분은 필요하지 않음

최상단에 Function Excel_Range_PNG()으로 수정하고 실행하면 됩니다

 

Function Excel_Range_PNG(ByRef result)            'ByRef result는 하단에 result 값을 반환하기 위해 생성 
    On Error GoTo ErrorHandling             '에러 핸들링하는 부분 코드 실행 중 에러 발생 하단에 지정한 위치로 이동 파란색으로 표기 해뒀습니다
    Dim FilePath As String
    Dim Chart_Data As ChartObject
    
    Application.ScreenUpdating = False    '화면 업데이트 (일시) 중단


'아래 Columns 부분은 필수 필요 값이 아니라서 필요하면 사용하고 필요 없으면 빼면 됩니다
 Columns("A:XFD"). AutoFit          'A열에서 XFD열까지 열 자동 맞춤
Columns("A:XFD"). HorizontalAlignment = xlCenter        'A열에서 XFD열까지 가운데 정렬
 
    FilePath = "c:\RPA_Common\"     '사용자 저장 경로 설정 필요
    Range("A1:G15"). Select      '그림으로 만들 범위 지정
    Selection.CopyPicture          '그림으로 복사해서 클립보드에 넣음


    Set Chart_Data = ActiveSheet.ChartObjects.Add(0, 0, Selection.Width, Selection.Height)      '차트를 범위 크기로 생성
    Chart_Data.Select
    Chart_Data.Chart.Paste          '차트에 붙여 넣음
     
    '아래 Filename 둘 중 하나만 사용 사용하지 않는 건 주석 처리하거나 지우기
   Filename = FilePath & "파일 이름_" & Format(Now, "YYYYMMDD") & ". png"            ' 파일 이름_오늘날짜.png
   Filename = FilePath & "파일이름_" & Format(Now, "YYYYMMDDhhmmss") & ".png" 

'특이사항 : 파일 이름이 오늘 날짜로 되어있기 때문에 오늘 한번 실행했다면 해당 파일이 덮어쓰기 됨으로 시분 초도 추가해주면 좋다


        Chart_Data.Chart.Export Filename     '차트 png 파일 저장
        Chart_Data.Delete           '차트 삭제
    Set Chart_Data = Nothing        '개체 변수 초기화
    Application.ScreenUpdating = True    '화면 업데이트 재계
    result = "성공"
    Exit Function  '프로시저 종료
ErrorHandling:      '에러 발생 시 여기로 이동
    result = "실패"
    
End Function
---------------------------------------------------------------------------------------------------------------------------------------------
Function Excel_Range_PNG_Result()
Call Excel_Range_PNG(result)
Excel_Range_PNG_Result = result
Debug.Print Excel_Range_PNG_Result
End Function

728x90
반응형

댓글