PowerPoint vba BeforeSaveAs

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

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

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

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

Уже

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

2 ответа

Да, есть, посмотрите событие 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

Я заставил его работать после долгих исследований, @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, чтобы пользователь запускал код перед просмотром презентации. Затем всякий раз, когда они сохранят эту презентацию, они должны выбрать, хотят они удалить ссылки или нет:)

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

Другие вопросы по тегам