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