2016-10-24 6 views
0

Excel 차트의 OLEFormat.Object이 포함 된 Powerpoint 2010 프레젠테이션에 문제가 있습니다. "(이전)"라는 단어로 이름이 변경되었습니다Powerpoint 2010의 차트 뒤집기 데이터가 VBA를 통해 업데이트되지 않습니다

  • 원래 : -

    내가 엑셀에서 데이터를 사용하여 차트를 업데이트하고 여러 단계에서 저장 아이디어는 내가 세 프레 젠 테이션으로 끝날 것입니다 파일 이름에 추가됩니다.

  • 새 데이터가 포함 된 원본 파일의 새 버전 - 다음 달 템플릿입니다.
  • 새 데이터가 포함 된 새 파일 - 이메일로 보내지는 보고서 버전입니다.

문제는 차트가 업데이트 된 데이터를 유지하지 않는 것입니다. 차트에 새 데이터가 표시되지만 차트를 편집하자 마자 뒤집어 원래 데이터 만 표시합니다. 워크 시트에 업데이트 된 데이터가 없습니다.

아래 이미지는 동일한 차트이지만 차트를 편집하면 마지막 시리즈가 12 월에서 6 월로 바뀝니다.

  • 새 폴더를 만들고 거기에 새로운 빈 프레젠테이션 장소 :

    enter image description here

    문제를 재현합니다.

  • 첫 번째 슬라이드에서 Click to add titleclick to add subtitle 개체를 삭제하십시오.
  • Insert 리본에서 Insert Object 대화 상자에서 ObjectInsert Excel Chart을 선택하십시오.
    차트는 Object 3 (처음 두 개체를 삭제함)이며 임의의 6 개월 데이터가 포함되어 있습니다.
  • 프레젠테이션이 Presentation 1.pptx으로 저장되었는지 확인하십시오.
  • 동일한 폴더에서 새 Excel 2010 통합 문서를 만듭니다. 확실히 차트 후에 저장 프레젠테이션의 두 가지 버전이에 대한 데이터를 표시해야합니다 업데이트되었습니다

    Option Explicit 
    
    Public Sub Produce_Report() 
    
        Dim sTemplate As String    'Path to PPTX Template. 
        Dim oPPT As Object     'Reference to PPT application. 
        Dim oPresentation As Object   'Reference to opened presentation. 
    
        sTemplate = ThisWorkbook.Path & "\Presentation1.pptx" 
    
        'Open the Powerpoint template and save a copy so we can roll back. 
        Set oPPT = CreatePPT 
        Set oPresentation = oPPT.Presentations.Open(sTemplate) 
    
        'Save a copy of the template - allows a rollback. 
        oPresentation.SaveCopyAs _ 
         Left(oPresentation.FullName, InStrRev(oPresentation.FullName, ".") - 1) & " (Previous)" 
    
        'Update the chart. 
        Audit_Volumes oPresentation.slides(1) 
    
        'Save the presentation using the current name. 
        oPresentation.Save 
    
        'Save the presentation giving it a new report name. 
        oPresentation.SaveAs ThisWorkbook.Path & "\New Presentation" 
    
    End Sub 
    
    Private Sub Audit_Volumes(oSlide As Object) 
        Dim wrkSht As Worksheet 
        Dim wrkCht As Chart 
        With oSlide 
         With .Shapes("Object 3") 
          Set wrkSht = .OLEFormat.Object.Worksheets(1) 
          Set wrkCht = .OLEFormat.Object.Charts(1) 
         End With 
         With wrkSht 
          .Range("A3:D7").Copy Destination:=.Range("A2") 
          .Range("A7:D7") = Array("December", 3, 4, 5) 
         End With 
    
         RefreshThumbnail .Parent 
    
        End With 
        Set wrkSht = Nothing 
        Set wrkCht = Nothing 
    End Sub 
    
    Public Sub RefreshThumbnail(PPT As Object) 
        With PPT 
         .designs(1).slidemaster.Shapes(1).Left = .designs(1).slidemaster.Shapes(1).Left + 1 
         .designs(1).slidemaster.Shapes(1).Left = .designs(1).slidemaster.Shapes(1).Left - 1 
        End With 
    End Sub 
    
    Public Function CreatePPT(Optional bVisible As Boolean = True) As Object 
        Dim oTmpPPT As Object 
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
        'Defer error trapping in case Powerpoint is not running. ' 
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
        On Error Resume Next 
        Set oTmpPPT = GetObject(, "Powerpoint.Application") 
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
        'If an error occurs then create an instance of Powerpoint. ' 
        'Reinstate error handling.         ' 
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
        If Err.Number <> 0 Then 
         Err.Clear 
         Set oTmpPPT = CreateObject("Powerpoint.Application") 
        End If 
        oTmpPPT.Visible = bVisible 
        Set CreatePPT = oTmpPPT 
        On Error GoTo 0 
    End Function 
    

    :

Produce_Report 절차를 통합 문서 내에서 모듈에 다음 VBA 코드를 추가하고 실행 업데이트 된 차트?

답변

0

Powerpoint에서 차트를 업데이트 할 때 이전에 Powerpoint보기를 slidesorter로 변경하고 모양 (DoVerb)에 대한 작업을 수행 한 다음 다시보기를 전환하는 예를 보았습니다.
나는 일반적으로 Excel 또는 Access에서 Powerpoint를 업데이트하기 때문에 코드를 작성하는 데 문제가있는 경우가 많습니다.

저는 놀아 왔고 작동하도록했습니다.
삽입 된 차트 개체에는 가능한 한 두 개의 동사, 즉 EditOpen이 있습니다.
코드가 RefreshThumbnail .Parent 인 곳에서 코드를 RefreshChart .Parent, .slidenumber, .Shapes("Object 3")으로 업데이트했습니다.

새로운 절차는 다음과 같습니다

Public Sub RefreshChart(oPPT As Object, SlideNum As Long, sh As Object) 
    oPPT.Windows(1).viewtype = 7 'ppViewSlideSorter 
    oPPT.Windows(1).View.gotoslide SlideNum 
    oPPT.Windows(1).viewtype = 9 'ppViewNormal 
    sh.OLEFormat.DoVerb (1) 
End Sub 

(이전에 내가 문제의 원인이라고 생각 oPPT.ActiveWindow를 사용했다).

이제 차트 자체의 크기를 조정하고 재 계산하지 않은 계산 뒤에 문제가 생겼습니다. 여러 가지 질문에 대해 서로 다른 문제가 발생했습니다. 당신은 단지이

oPPT.OLEFormat.Activate 
Call Pause or Sleep (3000) ' anything that pauses the macro and allows Powerpoint to do it's work 
ActiveWindow.Selection.Unselect 'This is like clicking off the opened embedded object 

당신은 너무이 필요할 수 있습니다와 (대런 Bartrup - 쿡에서)를 RefreshChart 서브 루틴을 교체 시도 할 수

0

. 여기서 slideindex는 현재 슬라이드의 인덱스입니다.

ActiveWindow.View.GotoSlide oSl.Slideindex