2017-04-24 1 views
1

& 간 게시에서 업데이트 : http://www.ozgrid.com/forum/showthread.php?t=203827실행 엑셀 파워 포인트 링크 된 차트를 업데이트하는 매크로 (통합 문서 이미 열기)

내 목표 파워 포인트 내에서 엑셀 매크로를 실행하는 것입니다. [모든 매크로는 Excel에서 데이터 범위에 대한 행 필터링을 변경하여 차트에 표시된 선을 변경합니다.]

그래서 내 PPT 매크로는 (1) 차트를 변경하는 Excel 매크로를 실행 한 다음 (2) Excel 차트에 연결된 PPT에서 해당 차트를 업데이트해야합니다.

Sub Test() 
    Excel.Application.Run "'" & "C:\myPath\" & "PPT Macro Test.xlsm'!Steps" 
    ActivePresentation.UpdateLinks 
End Sub 

그것은 Excel에서 차트를 업데이트합니다 "단계"매크로를 실행하지만, PPT 차트를 업데이트하지 않습니다 :

는 여기에 내가 무엇을 시도했다입니다.

그래서이 게시물에서 기술을 적용했습니다 : How to update excel embedded charts in powerpoint? (모자 팁 brettdj). 희망으로

Sub Test() 
    Excel.Application.Run "'" & "C:\myPath\" & "PPT Macro Test.xlsm'!Steps" 
    ChangeChartData 
End Sub 

Sub ChangeChartData() 

    Dim pptChart As Chart 
    Dim pptChartData As ChartData 
    Dim pptWorkbook As Object 
    Dim sld As Slide 
    Dim shp As Shape 

    For Each sld In ActivePresentation.Slides 
     For Each shp In sld.Shapes 
      If shp.HasChart Then 
       Set pptChart = shp.Chart 
       Set pptChartData = pptChart.ChartData 
       pptChartData.Activate 
       Set pptWorkbook = pptChartData.Workbook 
       On Error Resume Next 
       'update first link 
       pptWorkbook.UpdateLink pptWorkbook.LinkSources(1) 
       On Error GoTo 0 
       pptWorkbook.Close True 
      End If 
     Next 
    Next 

    Set pptWorkbook = Nothing 
    Set pptChartData = Nothing 
    Set pptChart = Nothing 

End Sub 

는 지금은 작동하지만,이 열립니다 동안 일시 정지, & 통합 문서를 닫고 저장합니다. 상당히 큰 파일이므로 프레젠테이션 중에 받아 들일 수없는 지연입니다. 다시 열지 않고 닫는 것없이 이미 "배후에서"열리는 Excel 통합 문서에서 매크로를 실행하는 방법이 있습니까?

미리 감사드립니다.

+1

이 코드에서 * Excel 파일을 열 수있는 내용이 보이지 않습니다. 연결된 차트 개체는 특히 PPT가 프레젠테이션 모드에있는 동안 실시간으로 데이터를 업데이트하려고 할 때 악명이 높습니다. 또한 PPT 프레젠테이션의 모든 * 차트에 왜 반복하고 있습니까? 업데이트가 필요한 차트/슬라이드가 하나뿐이라면 각 슬라이드 및 각 모양/차트를 반복하는 것이 최적이 아닙니다. –

+0

@David Zens (1) 예, 통합 문서를 열 때까지 단계별로 진행해야합니다. "pptChartData.Activate". 나도 놀랐다. (2) 나는 모든 차트를 반복 할 필요가 없다. (그리고 나중에 수정하기를 의도했다.) 처음에는 brettdj의 접근법을 사용하여 여러 것을 한꺼번에 변경하지 않았다. – Keifffer

+0

PPT 명령 단추를 사용하여 광산을 테스트했으며 예상대로 작동했습니다. 원한다면 Google 드라이브에 샘플 파일을 저장하고 나와 공유하여 작업 방식을 보여줄 수 있습니다. 저에게 알려주세요. –

답변

1

간략한 테스트에서 통합 문서가 이 이미 열려 있다고 가정하면을 열면 데이터가 Excel 절차에 따라 실시간으로 업데이트됩니다. PowerPoint에서 ChangeChartData 절차를 호출 할 필요가 없습니다. 이 에 관계없이 필요한 모든 차트, 진행되고 당신의 PPT에서 호출 매우 큰 엑셀 파일에 대한 Save 방법의 (아마도) 리소스 집약적 인 작업을 피할 수

Sub Test() 
    Excel.Application.Run "'" & "C:\myPath\" & "PPT Macro Test.xlsm'!Steps" 
End Sub 

과 같다 불필요하게 긴 런타임에 대한 가능성이 큰 범인.

거기 Test 절차가 파워 포인트에서 호출하는 방법에 따라 몇 가지 예외가 될 수 있으며 그렇지 않으면 관찰하는 경우는 (최소한 : 절차가 실행되는 방법을 PPT 프리젠 테이션 모드에있는 동안) 자세한 내용을 추가 기쁘게한다

This answer is promising 그러나 명백한 경고가 있습니다 (두 파일 모두 열려 있어야하며 Excel 파일은 열려있는 Excel 파일이어야합니다). 다른 시나리오를 테스트하여 아직 작동하는지 확인하지 않았습니다. 나를 위해 그것은 것처럼 보인다 작동한다 : 당신의 구현에서

Set pres = Presentations("Chart.pptm") 'ActivePresentation, modify as needed. 
' Make sure you reference correct shape name on the next line: 
pres.Slides(1).Shapes("Chart1").LinkFormat.Update 

, 아마도 :

For Each sld In ActivePresentation.Slides 
    For Each shp In sld.Shapes 
     If shp.HasChart Then 
      Set pptChart = shp.Chart 
      pptChart.LinkFormat.Update 
     End If 
    Next 
Next 

ChartData 개체의 Activate 방법 MSDN Notes that에 관한 :

당신에게 이 속성을 참조하기 전에 Activate 메서드를 호출해야합니다. 그렇지 않으면 오류가 발생합니다.몇에서 ...

This 자기 대답 질문을

This is by design와 "늘는 '변경',하지만 난이가 좋은 또는으로 바람직 UI 경험을 고려하는 이유를 이해하고 다른 사람에게 이야기 한 적이 몇 년 전에는 Activate 요구 사항을 피할 수 있다고 제안했으나 정확하지 않다고 생각합니다. 복제 할 수 없으며이를 수행 할 수 있음을 나타내는 다른 출처를 찾을 수 없습니다.

+0

David, "... 데이터가 실시간으로 업데이트되어야합니다." 나는 그것이 사실 이길 바랬지만 그것이 내가 원하는 바가 아닙니다. (1) "ChangeChartData"가 실행되거나 (2) 수동으로, PPT에서 차트를 마우스 오른쪽 버튼으로 클릭하고 "데이터 편집"을 선택하거나 (3) 링크 된 차트 업데이트/새로 고침을 참조하십시오. Excel 자체에서 매크로를 실행하면 자동으로 PPT 차트가 업데이트됩니다. # 3은 아마도 # wh ich는 당신이 "어떻게 그것을 사용하려고합니까?"라는 질문을 설명합니다. PPT 프리젠 테이션 중간에 발표자가 명령 단추를 클릭하여 매크로를 실행할 수 있기를 바랍니다. – Keifffer

+0

PPT 명령 단추를 사용하여 광산을 테스트했으며 예상대로 작동했습니다. 원한다면 Google 드라이브에 샘플 파일을 저장하고 나와 공유하여 작업 방식을 보여줄 수 있습니다. 저에게 알려주세요. –

0

@David, 도움 주셔서 감사합니다. 이것은 (주로) 작동합니다 :

Sub Test() 
    Excel.Application.Run "'" & "C:\myPath\" & "PPT Macro Test.xlsm'!Steps" 
    Slide1.Shapes(1).LinkFormat.Update 
End Sub 

대부분입니다. 귀하의 의견은 "그것이 작동하고 있었고, 그렇지 않았습니다. 지금은"문제 해결을 강요했습니다.

  • 열고 PPT 파일 (NOT 읽기 전용이가 된 Excel 파일을 열면 "데이터 편집"
  • 를 선택하고 마우스 오른쪽 임베디드/링크 된 차트를 클릭, 업데이트를 즉시
  • 링크 클릭 : 여기에 해결 방법입니다)
  • 닫기 엑셀, 놀랍게도 파일

을 저장하지 않고, 그 다음 슬라이드 쇼보기에서 버튼을 클릭하거나, VB 탐색기를 통해 단계별로 실행됩니다. 더 놀라운 것은, 그것이 실행될 때 Excel을 열지 못한다는 것입니다. 단지 백그라운드에서 작동합니다.

"데이터 편집"을 마우스 오른쪽 버튼으로 클릭하지 않으면 읽기 전용/알림/취소를 묻는 Excel & 프롬프트가 항상 열립니다. 그런 다음 PPT에서 매크로를 실행할 수없고 Excel 내에서 실행하면 PPT가 아니라 Excel에서만 차트가 업데이트됩니다.

대체적으로 "Slide1.Shapes (1) .LinkFormat.AutoUpdate = ppUpdateOptionAutomatic"을 시도하여 자동으로 업데이트를 설정할지 확인했습니다.

해결 방법으로 해결할 수있는 사람이 누구인지 알면 감사하겠습니다. 그 동안 데이빗에게 당신의 이기심없는 인내에 감사 드리며, 나는 당신에게 대답에 대한 신용을주는 방법을 알아 내려고 노력할 것입니다.

+0

나는 [this] (http://stackoverflow.com/help/someone-answers)에서 답변을 승인 된 것으로 표시하는 방법을 설명한다고 생각합니다. 그렇습니다. 확실히 이상합니다. 비슷한 일이 일어나는 것을 보았습니다. 수동으로 통합 문서를 열면 매크로가 실행되어 Excel 화면이 깜박이지 않고 실시간으로 데이터가 업데이트됩니다. 아주 이상한. 코드를 통해 이러한 단계를 수행 할 수 있어야하지만 동일한 결과가 산출되는지 테스트하지 않았습니다. 나는 그것을해야한다고 생각한다. 그러나 그렇게하지 않으면 놀라지 않을 것이다. :) –

관련 문제