通过文本框选择已定义的幻灯片范围

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

我想通过vba在Powerpoint中选择一系列幻灯片。对于Excel,您只需编写

范围( “A1:A100”)

我想从幻灯片编号5到10中选择,我该如何编码?我的代码只选择了两张幻灯片:

ActivePresentation.Slides.Range(阵列(5,10))。选择

vba range powerpoint-vba
1个回答
0
投票

这是一个例子。这取决于您使用的文本框类型。我假设你选择的标准文本框是一个形状。我正在使用一些测试文本框,您需要根据自己的需要进行调整。

您调用子SelectSlides以生成幻灯片的数组数组,以便在两个文本框号之间进行选择。

您可以使用Range方法返回任意数量的形状或幻灯片。要为Index指定整数或字符串数​​组,可以使用Array函数,或者我相信,将数组传递给Range。

我会提前,虽然这工作一次,powerpoint崩溃,从那时起代码只选择了最后一项。

但是,您可以将ppt.Slides.Range(slidesArray)分配给Slides对象并使用该对象进行处理。

Dim slidesObject As Slides

Set slidesObject = ppt.Slides.Range(slidesArray)

码:

Option Explicit

Public Sub SelectSlideArray()

    Dim ppt As Presentation
    Dim sld As Slide
    Dim textBox1 As Shape
    Dim textBox2 As Shape

    Set ppt = ActivePresentation
    Set sld = ppt.Slides(1) ' slide with text boxes in 
    Set textBox1 = sld.Shapes("TextBox 3") 'change as required
    Set textBox2 = sld.Shapes("TextBox 4") 'change as required

    textBox1.TextFrame.TextRange = 5 ' you can say TextRange.Text but .Text is defaut
    textBox2.TextFrame.TextRange = 10

    Dim startSlideNumber As Integer
    Dim endSlideNumber As Integer

    startSlideNumber = Int(textBox1.TextFrame.TextRange)
    endSlideNumber = Int(textBox2.TextFrame.TextRange)

    SelectSlides ppt, startSlideNumber, endSlideNumber

    'PrintShapeNames sld

End Sub

Public Sub SelectSlides(ByVal ppt As Presentation, ByVal startSlideNumber As Long, ByVal endSlideNumber As Long)

    Dim outputSlideNumber As Long

    outputSlideNumber = startSlideNumber

    If ppt.Slides.Count < endSlideNumber Then
        MsgBox "You don't have enough slides in the presentation!"
        End
    ElseIf endSlideNumber < startSlideNumber Then
        MsgBox "End slide is before start slide!"
        End
    Else
       Dim slidesArray()
       ReDim slidesArray(0 To endSlideNumber - startSlideNumber)
       Dim currentSlide As Long

       For currentSlide = LBound(slidesArray) To UBound(slidesArray)

           slidesArray(currentSlide) = outputSlideNumber
           outputSlideNumber = outputSlideNumber + 1

       Next currentSlide

    End If

    ppt.Slides.Range(slidesArray).Select

End Sub

Private Sub PrintShapeNames(ByVal sld As Slide)

    Dim shp As Shape

    For Each shp In sld.Shapes
        Debug.Print shp.Name  
    Next shp

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