2016-07-18 4 views
0

У меня есть презентация PowerPoint, которая имеет несколько таблиц Excel в качестве объектов. Файлы Excel обновляются один раз в неделю. После обновления файлов Excel мне нужно открыть PowerPoint, дважды щелкнуть по каждому объекту -> меню «Данные» -> «Редактировать ссылки» -> выбрать все источники -> Обновить значения.Macro для обновления объекта Excel в PowerPoint

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

После поиска в Интернете мне удалось получить следующий код, который приведет меня к шагу двойного щелчка по объекту, но я не знаю, как обновлять ссылки.

Sub update_objects() 

    Dim it As String 
    Dim i As Integer 
    For i = 1 To ActiveWindow.Selection.SlideRange.Shapes.Count 

     With ActiveWindow.Selection.SlideRange.Shapes(i) 
      If .Type = msoEmbeddedOLEObject Then 
       ActiveWindow.Selection.SlideRange.Shapes(i).Select.OLEFormat.DoVerb 
      End If 
     End With 
    Next i 
End Sub 
+0

В теории ActivePresentation.UpdateLinks должен это сделать. Вы пробовали это? –

+0

@SteveRindsberg спасибо за совет, я пробовал это, и он только обновляет графики в презентации, которые обновляются в любом случае при открытии презентации. У меня есть фактическая таблица из excel, которую необходимо обновить. Спасибо, Юрий – Yuri

+0

Вы имеете в виду конкретно таблицу Excel (в отличие от кучки ячеек в Excel, которые выглядят как таблица)? Я не уверен, как ведут себя таблицы, но если это связанные ячейки, то обновление ссылок должно работать. Если диапазон ячеек встроен, то нет. Объект Excel должен быть активирован для любых изменений. –

ответ

0

Этот код работает, но не во всех случаях. Он был написан для 2010 года. Измените тип по мере необходимости. 7 - объекты Excel Embedded.

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
    Sub open_and_close_all_objects() 
    'This will open and then close all charts and graphs in the presentation to allow them to keep the data 
    'Why this is needed is a question to be answered in the future. 


    Dim oSH As Shape 
    Dim oSl As Slide 
    Dim oSheet As Object 


    For Each oSl In ActivePresentation.Slides 
     For Each oSH In oSl.Shapes 

     ActiveWindow.View.GotoSlide oSl.Slideindex 
      If oSH.Type = 7 Then 
       oSH.Select 
       oSH.OLEFormat.Activate 

       Call Sleep(1500) 

       ActiveWindow.Selection.Unselect 
       ActiveWindow.View.GotoSlide oSl.Slideindex 
      End If 

     Next 


    Next 
    End Sub