2016-12-02 4 views
1

до сих пор я пытался Chart.Refresh и Chart.Update и также ChartData.UpdateLinks и ни работы. Мой вопрос похож на этот только, что этот код не работает на мой РРТ How to update excel embedded charts in powerpoint?Как обновить данные через VBA в Power Point?

Если я мог Запись макроса, как в Excel шаги будут:

1.Select Диаграмма

- .Chart Инструменты>Обновить данные

Это код, что я успел написать, но он не в «gChart.Application.RefreshData»:

Sub refreshchart() 
    Dim ppApp As PowerPoint.Application, sld As Slide 
    Dim s As PowerPoint.Shape 
    Dim gChart As Chart, i As Integer 
    ppApp.Visible = True 
    i = 3 
    Set sld = ActivePresentation.Slides(i) 
    sld.Select 
    For Each s In ActivePresentation.Slides(i) 
    If s.Type = msoEmbeddedOLEObject Then 
    Set gChart = s.OLEFormat.Object 
    With gChart.Application 

    gChart.Application.Refresh 
    Set gChart = Nothing 
    End If 
    Next s 

End Sub 

Целое число i включено в i = 1 до 73, но в качестве теста я использую слайд 3. Не все слайды имеют диаграммы, но большинство из них имеют 4 диаграммы (65 из 73).

Спасибо вам большое за помощь! =)

ответ

0

Я немного изменил код и с этим небольшим изменением обновлял диаграммы автоматически.

Много раз, если вы делитесь своими компиляциями excel ppt, перерыв ссылок и после их восстановления автоматическое обновление графика не работает.

С downstanding макро автоматизированное обновление будет работать снова:

Sub Refresh()

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 
      shp.Chart.REFRESH 

      On Error Resume Next 
      On Error GoTo 0 

     End If 
    Next 
Next 

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

End Sub


редактировать ниже код в макросе в книге Excel, которая также содержит исходные данные. Не уверен, будет ли такой же код работать с PowerPoint. Я просто открываю книгу Excel, а затем обновляю PowerPoint для меня.


Я искал навсегда, чтобы найти ответ на этот вопрос, и, наконец, удалось заставить его работать с тонной чтения и методом проб и ошибок. Моя проблема заключалась в том, что у меня есть PowerPoint с большим количеством графиков, которые были созданы с помощью CTRL + C и CTRL + V, поэтому ни одна из них не связана. Это, как я получил его на работу:

Dim myPresentation As PowerPoint.Presentation 
Dim sld As PowerPoint.Slide 
Dim shp As PowerPoint.Shape 
Dim myChart As PowerPoint.Chart 

For Each sld In myPresentation.Slides 
    For Each shp In sld.Shapes 
     If shp.HasChart Then 
      Set myChart = shp.Chart 
      myChart.ChartData.Activate 
      myChart.Refresh 
     End If 
    Next 
Next 

Я не знаю, если есть ненужный код там, но я просто счастлив, что я, наконец, получил его на работу, так что я не прикасаясь к нему больше. Надеюсь, это вам поможет.

0

Это может помочь, он открывает и закрывает встроенный объект Excel

For Each s In ActivePresentation.Slides(i) 
    If s.Type = msoEmbeddedOLEObject Then 
     s.Select        'select the object 
     s.OLEFormat.Activate     'Activate it (like 2x click)) 
     ActiveWindow.Selection.Unselect  'To let it close 
     ActiveWindow.View.GotoSlide s.Slideindex 'make current slide active 
    End If 
Next s 
+0

Возможно, потребуется одно изменение. В PPT 2016 s.Type может потребоваться = 7, а не msoEmbeddedOLEObject – mooseman

+0

Спасибо @mooseman –

+0

Проводилось ли какое-либо из этих работ? – mooseman

1

Этот код работал. Но он работает только в том случае, если оба файла открыты (предел, если только один): Power Point и Excel с данными. Он фактически обновляет все диаграммы один за другим.

Sub updatelinks() 
Dim sld As Slide, shp As Shape 

For Each sld In ActivePresentation.Slides 

    For Each shp In sld.Shapes 
    On Error Resume Next 
    shp.LinkFormat.Update 
    Next 

Next 

MsgBox ("Graficos actualizados con éxito") 

End Sub 

Итак, если Excel находится на общедоступном месте, код не будет работать, потому что это занимает слишком много времени, чтобы восстановить данные. Я все еще ищу способ сделать это. Благодаря!