PowerPoint vba BeforeSaveAs - PullRequest
       10

PowerPoint vba BeforeSaveAs

1 голос
/ 15 января 2020

У меня есть шаблон PowerPoint, который связан с Excel. Некоторые области в Excel были скопированы со ссылками, чтобы они автоматически обновлялись.

Когда бы этот шаблон PowerPoint не был сохранен как, мне нужно удалить эти ссылки на внешние книги Excel.

Есть ли как-то сделать это в PowerPoint так же, как

Private Sub Workbook_Before Save(ByVal SaveAsUI As Boolean, Cancel As Boolean) в Excel?

Пока

Я попробовал приведенный ниже ответ без удачи. Кажется, что код почему-то не работает - здесь я не знаю, правильно ли я это делаю. Я попытался запустить его в обычном модуле и модуле класса - без какого-либо способа спровоцировать это. Затем я попытался запустить его как обычную подпрограмму, и здесь я получил ошибки в HasRevisionInfo and also Application.PresentationBeforeSave.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Я заставил его работать после долгих исследований, @ 0m3R дал мне правильный ответ.

Как-то я где-то нашел, что мне нужно объединить модуль класса с обычным модулем.

Вот код для модуля класса:

Private Sub PPTApp_PresentationBeforeSave(ByVal Pres As Presentation, Cancel As Boolean)
Dim sld As Slide
Dim shp As Shape
Dim TextValue As String
Dim intResponse As Integer

Set Pres = ActivePresentation

TextValue = "You're about to save this PowerPoint." & Chr(10) & "This Powerpoint is programmed to break all links" & _
" meaning that all of the content will not be updated automatically anymore." & Chr(10) & Chr(10) & _
"Do you wish to break all links?"

If Pres.Name <> "A3.potm" Then

intResponse = MsgBox(TextValue, Buttons:=vbYesNo)

If intResponse = vbYes Then
    For Each sld In Pres.Slides
        For Each shp In sld.Shapes
            On Error Resume Next
                shp.LinkFormat.BreakLink
            On Error GoTo 0
        Next shp
    Next sld
Else
MsgBox "You didn't break all links - the presentation may be overwritten in the future..."
End If
End If
End Sub

Вот код для обычного модуля

Option Explicit
Dim cPPTObject As New cEventClass

Sub InitializeApp()
    Set cPPTObject.PPTApp = Application
End Sub

Я решил создать «командную кнопку» в PowerPoint, чтобы пользователь запускал код перед просмотром презентации. Тогда всякий раз, когда они сохранят эту презентацию, им нужно будет выбрать, хотят ли они удалить ссылки:)

Спасибо за вашу помощь:)

0 голосов
/ 15 января 2020

Да, посмотрите Событие Application.PresentationBeforeSave , которое происходит до сохранения презентации. Вот пример vb

Private Sub PPTApp_PresentationBeforeSave(ByVal Pres As Presentation, _
        Cancel As Boolean)

    Dim intResponse As Integer

    Set Pres = ActivePresentation

    If Pres.HasRevisionInfo Then

        intResponse = MsgBox(Prompt:="The presentation contains revisions. " & _
            "Do you want to accept the revisions before saving?", Buttons:=vbYesNo)

        If intResponse = vbYes Then

            Cancel = True

            MsgBox "Your presentation was not saved."

        End If

    End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...