有没有办法用 VBA 捕获 PowerPoint 幻灯片被删除的情况

问题描述 投票:0回答:1

我已经有了将 PowerPoint 幻灯片添加到演示文稿时运行的代码,但我找不到在删除幻灯片时捕获的方法。我想知道是否有人有什么想法?

我查看了 WithEvents 列表,但找不到显示正确的列表。

vba powerpoint
1个回答
2
投票

PowerPoint中没有这样的事件:-(

代码如何工作

  • 实现滑动计数器
  • 每当
    SlideSelectionChanged
    触发时,会将当前幻灯片计数与计数器进行比较 - 如果少于,则必须删除至少一张幻灯片。
    SlideSelectionChanged
    删除幻灯片时会触发,因为删除后会选择另一张幻灯片。

将此代码放入您的应用程序类中。

Private WithEvents objApp As Application

Private Sub Class_Initialize()
Set objApp = Application
On Error Resume Next
    'When addin starts there is no activepresentation
    If Application.Presentations.Count > 0 Then
        If Not ActivePresentation Is Nothing Then
            initSlideCounter ActivePresentation
        End If
    End If
On Error GoTo 0
End Sub

Private Sub initSlideCounter(p As Presentation)
p.Tags.Add "CNTSLIDES", p.Slides.Count
End Sub

Private Property Get SlideCounter(p As Presentation) As Long
On Error Resume Next
SlideCounter = p.Tags("CNTSLIDES")
If Err <> 0 Then
    initSlideCounter p
    SlideCounter = p.Tags("CNTSLIDES")
End If
On Error GoTo 0
End Property

Private Sub objApp_SlideSelectionChanged(ByVal SldRange As SlideRange)
Dim p As Presentation: Set p = SldRange.Parent

If p.Slides.Count < SlideCounter(p) Then
    MsgBox "at least one slide has been deleted"
    initSlideCounter p    'slide deleted
End If

End Sub

Private Sub objApp_NewPresentation(ByVal Pres As Presentation)
initSlideCounter Pres
End Sub

Private Sub objApp_PresentationOpen(ByVal Pres As Presentation)
initSlideCounter Pres
End Sub

Private Sub objApp_PresentationNewSlide(ByVal sld As Slide)
initSlideCounter sld.Parent
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.