2014-11-23 8 views
-1

Excel 2013을 사용하고 있습니다. 하나의 Excel 통합 문서에 여러 차트를 PDF 파일로 저장하려고합니다. 차트는 데이터가있는 다른 시트에 있습니다. 따라서 각 시트에서 차트를 선택하고 하나의 PDF 파일로 저장해야합니다. pdf 파일의 한 페이지에 하나의 차트가 필요합니다. 이것을 할 수있는 방법이 있습니까? 지원에 감사드립니다.Excel에서 여러 개의 차트를 하나의 PDF 파일로 저장

감사합니다. Jeannine

답변

0

차트가있는 시트를 선택하고 PDF로 저장하십시오.

0

리플렉션에서 다소 번거롭기는하지만 맞춤 설정할 수있는 VBA 솔루션은 무엇입니까? 코드를 표준 코드 모듈에 넣고 outputPath를 자신의 것으로 대체하십시오. 접근 방식은 별도의 시트에 레이아웃을 작성한 다음 시트를 .pdf로 내보내는 것입니다. 이 예제에서는 통합 문서에 "작성"이라는 시트가 있는지 확인하십시오 (아마도 이렇게 할 코드를 추가하십시오).

Option Explicit 

Sub chartsTopdf() 
Dim outSheet As Worksheet, sht As Worksheet 
Dim RngToCover As Range 
Dim chtObj As ChartObject 
Dim outputPath As String, fileStem As String 
Dim chHeight As Long, chWidth As Long 
Dim topM As Integer, botM As Integer, rightM As Integer 
Dim n As Integer, pbRow As Integer, rwOffset As Integer 
Dim chrt As String 

Set outSheet = Sheets("Compose") 
outputPath = "C:\Data\Barry\VBA\SO\" 
fileStem = "Charts" 
'these values in 'points' 
topM = 60 
botM = 60 
rightM = 60 
'these values in 'rows' 
pbRow = 1 
rwOffset = 8 
chHeight = 12 
chWidth = 5 
Set RngToCover = Cells(chHeight, chWidth) 
n = 0 

    With ThisWorkbook 
     With outSheet 
      .ResetAllPageBreaks 
      .ChartObjects.Delete 
       With .PageSetup 
        .Orientation = xlPortrait 
        .PrintArea = "" 
        .TopMargin = topM 
        .BottomMargin = botM 
        .RightMargin = rightM 
       End With 
     End With 

     For Each sht In .Worksheets 
      If Not sht.Name = outSheet.Name Then 
       'Copy Chart 
       Set chtObj = sht.ChartObjects(1) 
       chtObj.Copy 
        With outSheet 
         .Paste 
         n = n + 1 
         Set RngToCover = .Range(.Cells(pbRow + rwOffset, 1), .Cells(pbRow + rwOffset + chHeight, 1 + chWidth)) 
         Set chtObj = .ChartObjects(n) 
         chtObj.Height = RngToCover.Height ' resize 
         chtObj.Width = RngToCover.Width ' resize 
         chtObj.Top = RngToCover.Top  ' reposition 
         chtObj.Left = RngToCover.Left  ' reposition 
         'add hpage break 
         .HPageBreaks.Add before:=.Cells(pbRow + rwOffset + chHeight, 1 + chWidth).Offset(2, 0) 

         pbRow = .HPageBreaks(n).Location.Row 
        End With 
      End If 
     Next sht 

    ActiveCell.Select 

     'set essential page parameters 
     With outSheet.PageSetup 
      .Orientation = xlPortrait 
      .PrintArea = "" 
      .TopMargin = topM 
      .BottomMargin = botM 
      .RightMargin = rightM 
     End With 

     'produce pdf file 
     outSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
      outputPath & fileStem & ".pdf", Quality:=xlQualityStandard, _ 
      IncludeDocProperties:=True, IgnorePrintAreas:=False, _ 
      OpenAfterPublish:=True 

    End With 

End Sub 

은 또한 관심을 가질 존 펠티어하여이 interesting article을 사용했다.

+0

감사합니다. – Jeannine

+0

당신의 Q에 대답하면 '틱'을 클릭하여 대답을 '수락'합니다. 이것은 그것이 해결되었음을 나타냅니다. – barryleajo

관련 문제