首页 文章

使用VBA删除Powerpoint上的幻灯片,具体取决于Excel单元格

提问于
浏览
0

我在Excel中有一个VBA模块,用于删除Powerpoint幻灯片 . 代码如下:

Function MyRange(ByVal StartIndex As Long, ByVal StopIndex As Long) As Variant
        Dim A() As Long
        Dim I As Long
        ReDim A(StartIndex To StopIndex)
        For I = StartIndex To StopIndex: A(I) = I: Next
        MyRange = A End Function

Sub RemoveUnwantedSlides()
            ActivePresentation.Slides.Range(MyRange(94, 101)).Delete
            ActivePresentation.Slides.Range(MyRange(85, 92)).Delete
            ActivePresentation.Slides.Range(MyRange(76, 83)).Delete
End Sub

但是,我想要删除幻灯片编号的代码,具体取决于Excel中特定单元格的当前值 . 假设“1”在单元格A1中,则只应删除幻灯片94-101 . 如果“2”在单元格A1中,则只应删除幻灯片85-92 . 如果“3”在单元格A1中,则只应删除幻灯片76-83 .

如何在IF语句中插入当前宏?谢谢

我已经适应了以下但它不起作用:

Sub RemoveUnwantedSlides()
Dim A() As Long
        Dim I As Long
        ReDim A(StartIndex To StopIndex)
        For I = StartIndex To StopIndex: A(I) = I: Next
        MyRange = A

'The file name and path of the file to update
sourceFileName = "C:\Users\Children.pptm"
Set pptApp = New PowerPoint.Application
Set pptPresentation = pptApp.Presentations.Open(sourceFileName)

pptApp.Activate

Dim ppSlidesArr As Variant

Select Case Range("A1").Value
    Case 1
        ppSlidesArr = MyRange(64, 65)

    Case 2
        ppSlidesArr = MyRange(85, 92)

    Case 3
        ppSlidesArr = MyRange(76, 83)

End Select

ActivePresentation.Slides.Range(ppSlidesArr).Delete

结束子

它给了我一个“运行时错误429:'ActiveX组件无法创建对象”另外,如果我想删除特定幻灯片而不是范围,我将如何进行?谢谢

1 回答

  • 0

    尝试下面的代码,您可以使用 Select Case 使代码更加可调,以适应未来的情况:

    Sub RemoveUnwantedSlides()
    
    Dim ppSlidesArr As Variant
    
    Select Case Range("A1").Value
        Case 1
            ppSlidesArr = MyRange(94, 101)
    
        Case 2
            ppSlidesArr = MyRange(85, 92)
    
        Case 3
            ppSlidesArr = MyRange(76, 83)
    
    End Select
    
    ActivePresentation.Slides.Range(ppSlidesArr).Delete
    
    End Sub
    

相关问题