【问题标题】:How to copy powerpoint sections to a new presentation using VBA如何使用 VBA 将 powerpoint 部分复制到新的演示文稿中
【发布时间】:2019-06-15 17:43:29
【问题描述】:

我们通常使用 powerpoint 来促进我们的实验。我们在 powerpoint 中使用“部分”来为每个实验任务保留一组幻灯片。移动部分以平衡实验的任务顺序是一项艰巨的工作!

我认为我们可以在 CSV 或数组中预定义一个平衡订单(使用代表订单的数字字符串)(还没有在 VBA 中构建出来)。然后使用 VBA 移动部分并为每个订单保存文件。我对使用 VBA 很生疏,但我认为我有一个很好的开始。问题出在第 24 行。我不知道如何将该部分复制到新的演示文稿中。有没有足够熟悉的人引导我走上正确的道路。

Sub Latin_Square()
    Dim amountOfSubjects As Integer
    'Declare the amount of subjects you have in your study
    amountOfSubjects = 14

    Dim filePath As String
    filePath = "C:/1.pptx"

    Dim amountofsections As Integer
    Dim i As Integer
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim desktopPath As String
    'find out where user's desktop is
    desktopPath = Environ("UserProfile") & "\Desktop\"


    Dim oldPresentation As Presentation
    Dim newPresentation As Presentation
    'open the target presentation
    Set oldPresentation = Presentations.Open("C:\1.pptx")
    For i = 1 To oldPresentation.Slides.Count
        oldPresentation.Slides.Item(i).Copy
        newPresentation.Item(1).Slides.Paste
    Next i
    oldPresentation.Close

    With newPresentation
        .SaveCopyAs _
            FileName:=fso.BuildPath(desktopPath, "Test" & 1 & ".pptx"), _
            FileFormat:=ppSaveAsOpenXMLPresentation
    End With

End Sub

【问题讨论】:

    标签: vba powerpoint sections copying


    【解决方案1】:

    如果要复制幻灯片及其部分,则不能仅通过newPresentation.Slides.Paste 粘贴幻灯片,因为这会将最后一张幻灯片的部分移动到新粘贴的幻灯片。

    下面是一个例子,如何逐张复制,检查一张幻灯片是否是一个节的开头,然后如何添加一个新节:

    Public Sub CopySlidesWithSections()
        Dim oldPresentation As Presentation, newPresentation As Presentation
        Dim oldSlide As Slide, newSlide As Slide
        Dim oldSectionProperties As SectionProperties, newSectionProperties As SectionProperties
        Dim i As Integer
    
        Set oldPresentation = ActivePresentation
        Set oldSectionProperties = oldPresentation.SectionProperties
    
        Set newPresentation = Application.Presentations.Add
        Set newSectionProperties = newPresentation.SectionProperties
    
        For Each oldSlide In oldPresentation.Slides
            oldSlide.Copy
            ' Would lead to wrong sectioning: Set newSlide = newPresentation.Slides.Paste.Item(1)
            Set newSlide = newPresentation.Slides.Paste(newPresentation.Slides.Count + 1).Item(1)
    
            For i = 1 To oldSectionProperties.Count
                If oldSectionProperties.FirstSlide(i) = oldSlide.SlideIndex Then
                    newSectionProperties.AddBeforeSlide _
                        newSlide.SlideIndex, _
                        oldSectionProperties.Name(i)
                    Exit For
                End If
            Next i
        Next oldSlide
    End Sub
    

    【讨论】:

    • 谢谢!那行得通!我将添加代码来执行拉丁方的改组。我可能会再发一次!
    猜你喜欢
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2020-03-05
    • 2017-05-30
    • 2011-07-01
    • 1970-01-01
    • 2015-12-28
    • 2018-05-06
    相关资源
    最近更新 更多