Страницы: 1
RSS
Сохранить презентацию.pptx в PDF из Excel
 
Всем доброго времени суток! Уважаемые форумчане помогите пожалуйста дополнить макрос:
Необходимо из 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.
Изменено: DjAlex77 - 24.09.2021 02:26:31
 
pptx в PDF а какое отношение у этого всего к Excel?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Код прописан в Excel файле, и все действия делаются из Excel.
 
Доброе время суток
Цитата
DjAlex77 написал:
и все действия делаются из Excel.
Используйте Presentation.ExportAsFixedFormat method (PowerPoint)
 
Как я понимаю это получится совершенно другой код?
Всё что нашёл с использованием этого метода не допилено и корявое, вызывает ещё больше вопросов.
А здесь уже полностью рабочий код, только при открытии файла не обновляются ссылки, хотя если открыть файл вручную выскакивает окно "обновить связи?"
А если открывает VBA, то ссылки не обновляются и даже окно "Обновить связи?" не появляется.
 
DjAlex77, как вариант, можно использовать вот этот макрос для обновления связей в Power Point.
Код
For Each sld In ActivePresentation.Slides
    For Each sh In sld.Shapes
        If sh.Type = msoLinkedOLEObject Then
            sh.LinkFormat.Update
        End If
    Next
Next
 
evgeniygeo, пожалуйста, поясните - чем был вызван отказ от использования Presentation.UpdateLinks method (PowerPoint)?
 
evgeniygeo, попробую.
Спасибо Вам огромное за Ваше время и знания!!!
 
Цитата
Андрей VG написал:  evgeniygeo , пожалуйста, поясните
предполагаю, что это адресовано не мне, т.к. не я ТС
Если все же мне, то у меня была совсем другая задача.
 
evgeniygeo, выдаёт ошибку на строке:
Код
For Each sld In ActivePresentation.Slides

Похоже внедрил не правильно?
Код
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
Изменено: vikttur - 24.09.2021 10:55:21
 
Цитата
evgeniygeo написал:
Если все же мне, то у меня была совсем другая задача.
Вопрос был к вам. В представленном коде выполняется обход всех слайдов презентации и поэлементный обход на каждом слайде, с обновлением элементов с типом msoLinkedOLEObject.
Вопрос в следующем, чем индивидуальное обновление каждого такого элемента лучше, чем запуск обновления для всей презентации?
Например, ваш подход часто используют при обновлении источников данных (вместо обновить всё) в случае, если важен порядок обновления соответствующих источников. Сначала обновляем таблицы справочники внешних данных, а потом основную таблицу, которая использует данные этих таблиц справочников. Но в вашем случае не могу придумать - для чего нужно индивидуальное обновление.
Изменено: Андрей VG - 24.09.2021 11:20:56
 
Андрей VG,
мне было важно обновление по порядку, но Ваш вариант лучше, если нужно обновить просто все.

DjAlex77,
вариант от Андрей VG:
Код
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
  
Изменено: evgeniygeo - 24.09.2021 11:45:40
 
evgeniygeo, и Андрей VG,

Спасибо Вам ОГРОМНЕЙШЕЕ!!!
Страницы: 1
Наверх