Всем доброго времени суток! Уважаемые форумчане помогите пожалуйста дополнить макрос: Необходимо из Excel, через VBA - Сохранить презентацию.pptx в .pdf На просторах нэта нашёл такой код, подправил под себя, работает.
Подскажите пожалуйста как изменить код чтоб при открытии презентации обновлялись связи, а потом уже конвертация в .pdf?
Код
Sub Test()
'Чтоб работало, нужно в редакторе VBA во вкладке Tools опция References подключить Microsft Power Point Object Library
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile Application.path & "\MSPPT.OLB"
On Error GoTo 0
Dim pp As New PowerPoint.Application
With pp.Presentations.Open("Диск:\путь к файлу\???????.pptx")
.ExportAsFixedFormat .path & "\test.pdf", 2&, 2&
.Close
End With
If pp.Presentations.Count = 0 Then pp.Quit
Set pp = Nothing
End Sub
Заранее Благодарен!
Такой код необходим для: Есть файл Excel с кучей таблиц и постоянно добавляющихся данных. Из этих таблиц посредством ссылок формируется презентация (открыл презентацию, при открытии новые данные подтянулись, презентация стала актуальной на сегодняшний день) Эту презентацию необходимо ежедневно рассылать всем. В течении дня работник работает в Excel файле, а в конце дня рассылает презентацию с учётом изменений текущего дня. Задача установить кнопку в Excel файле - нажал кнопку письмо с .pdf файлом всем улетело. Код для этой кнопки уже написал, всё работает, письмо с файлом улетает, но только если .pdf уже создан вручную. Поэтому и нужен указанный выше код, чтоб его внедрить и вообще не лазить в Power Point.
Как я понимаю это получится совершенно другой код? Всё что нашёл с использованием этого метода не допилено и корявое, вызывает ещё больше вопросов. А здесь уже полностью рабочий код, только при открытии файла не обновляются ссылки, хотя если открыть файл вручную выскакивает окно "обновить связи?" А если открывает VBA, то ссылки не обновляются и даже окно "Обновить связи?" не появляется.
Sub Test()
'Чтоб работало, нужно в редакторе VBA во вкладке Tools опция References подключить Microsft Power Point Object Library
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile Application.path & "\MSPPT.OLB"
On Error GoTo 0
Dim pp As New PowerPoint.Application
With pp.Presentations.Open("Диск:\путь к файлу\???????.pptx.pptx")
For Each sld In ActivePresentation.Slides
For Each sh In sld.Shapes
If sh.Type = msoLinkedOLEObject Then
sh.LinkFormat.Update
End If
Next
Next
.ExportAsFixedFormat .path & "\test.pdf", 2&, 2&
.Close
End With
If pp.Presentations.Count = 0 Then pp.Quit
Set pp = Nothing
End Sub
evgeniygeo написал: Если все же мне, то у меня была совсем другая задача.
Вопрос был к вам. В представленном коде выполняется обход всех слайдов презентации и поэлементный обход на каждом слайде, с обновлением элементов с типом msoLinkedOLEObject. Вопрос в следующем, чем индивидуальное обновление каждого такого элемента лучше, чем запуск обновления для всей презентации? Например, ваш подход часто используют при обновлении источников данных (вместо обновить всё) в случае, если важен порядок обновления соответствующих источников. Сначала обновляем таблицы справочники внешних данных, а потом основную таблицу, которая использует данные этих таблиц справочников. Но в вашем случае не могу придумать - для чего нужно индивидуальное обновление.
Sub aaa()
Dim pp As New PowerPoint.Application
With pp.Presentations.Open("C:\тест.pptm")
pp.ActivePresentation.UpdateLinks
End With
End Sub
и мой вот так работает:
Код
Sub aaa()
Dim pp As New PowerPoint.Application
With pp.Presentations.Open("C:\тест.pptm")
For Each sld In pp.ActivePresentation.Slides
For Each sh In sld.Shapes
If sh.Type = msoLinkedOLEObject Then
sh.LinkFormat.Update
End If
Next
Next
End With
End Sub