2017-04-25 7 views
0

백그라운드에서 VBA 코드가있는 버튼을 클릭하여 Excel 시트에서 직접 작은 크기의 스크린 샷을 자동 생성하려고합니다.Excel VBA에서 스크린 샷 찍고 별도의 파일로 저장

내가 셀 범위의 G1의 스크린 샷을 가지고 가야 : I12, 그리고 파일 이름 라는 scrt.png에 저장 여기 상황이다. 스크린 샷의 크기는 셀 범위 G1의 크기와 정확히 동일하게 유지되어야합니다. I12

이전 게시물 중 하나에서 언급 된 범위의 스크린 샷을 처음으로 포함하여이 코드를 발견했습니다. ChartSheet를 생성 한 다음 scrt.png 파일을 언급 된 위치에 성공적으로 저장합니다. 본질적으로 ChartSheet에서 선택한 셀 범위의 비트 맵을 성공적으로 생성하고 언급 된 위치에서 별도의 scrt.png 파일을 생성합니다. 그러나 코드의 문제는 생성 된 scrt.png 파일에 전체 ChartSheet 스크린 샷이 있다는 것입니다. 위에서 언급 한 셀 범위로 저장된 파일 만 찾고 있습니다. 코드를 조정하려고했지만 성공하지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

Sub Macro1() 
    myFileName = "scrt.png" 
    Range("G1:I12").Select 
    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture 

    Charts.Add 
    ActiveChart.Paste 
    ActiveChart.Export Filename:=ThisWorkbook.Path & "\" & myFileName, Filtername:="PNG" 
End Sub 

고마워요.

답변

0

대신 차트 시트를 사용하는 일반 워크 시트에 포함 된 chartObject를 사용 - 다음 복사 된 범위를 사진에 붙여 넣기 전에

Sub Tester() 

    ExportRange Selection, "C:\_Stuff\test\scrt.png" 

End Sub 


Sub ExportRange(rng As Range, sPath As String) 

    Dim cob, sc 

    rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture 

    Set cob = rng.Parent.ChartObjects.Add(10, 10, 200, 200) 
    'remove any series which may have been auto-added... 
    Set sc = cob.Chart.SeriesCollection 
    Do While sc.Count > 0 
     sc(1).Delete 
    Loop 

    With cob 
     .Height = rng.Height 
     .Width = rng.Width 
     .Chart.Paste 
     .Chart.Export Filename:=sPath, Filtername:="PNG" 
     .Delete 
    End With 

End Sub 
+0

감사 톤 @TimWilliams을 크기를 조정할 수 있습니다. 이것은 완벽하게 작동합니다! +1 – user6337701