Как убедиться, что копии и вставленные слайды из другой презентации PowerPoint находятся в правильном порядке при вставке с использованием VBA - PullRequest
0 голосов
/ 03 марта 2020

Я использую этот код, чтобы легко вставлять слайды из другой презентации. Это работает нормально, но я заметил, что скопированные слайды попадают в случайном порядке. т.е. не в том порядке, в котором они находятся в файле PowerPoint. Как я могу это исправить, пожалуйста?

Dim i As Integer
Dim PPDD As String
Dim X As Long
Dim Y As Long
Dim Z As Long

  With Application.FileDialog(msoFileDialogFilePicker)

        .AllowMultiSelect = False
        .Filters.Add "PowerPoint Files", "*.pptx; *.ppt; *.pptm; *.ppsm", 1
        .Show
        On Error Resume Next
        PPDD = .SelectedItems.Item(1)
        End With


        X = InputBox("Please enter which position (slide number) you'd like the selected PowerPoint file to be inserted", "slide number", "1")
        Y = InputBox("Please enter the number of the first slide you want to copy", "slide number", "1")
        Z = InputBox("Please enter the number of the last slide you want to copy", "slide number", "1")

Set objPresentation = Presentations.Open(PPDD, WithWindow:=msoFalse)
For i = Y To Z
    objPresentation.Slides.Item(i).Copy
    Presentations.Item(1).Slides.Paste X
    Presentations.Item(1).Slides.Item(Presentations.Item(1).Slides.count).Design = _
        objPresentation.Slides.Item(i).Design
Next i
objPresentation.Close

1 Ответ

1 голос
/ 03 марта 2020

Ваша проблема заключалась в том, что он вводил их в обратном порядке. Когда вы звоните Presentations.Item(1).Slides.Paste X, он сохраняет вставку в эту позицию X. Что вам действительно нужно, так это постепенное смещение этого исходного индекса при вставке.

Я изменил обработку переменных, но по сути это то же самое.

Option Explicit 

Sub CopySlide()

    Dim pptStart As Presentation
    Set pptStart = ActivePresentation

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Filters.Add "PowerPoint Files", "*.pptx; *.ppt; *.pptm; *.ppsm", 1
        .Show

        On Error Resume Next
        Dim PPDD As String
        PPDD = .SelectedItems.Item(1)
        On Error GoTo 0
    End With

    If Len(PPDD) = 0 Then
        MsgBox "File not chosen. Closing."
        Exit Sub
    End If

    Dim pptOpened As Presentation
    Set pptOpened = Presentations.Open(PPDD, WithWindow:=msoFalse)


    Dim indexInsertAt As Long
    indexInsertAt = InputBox("Please enter which position (slide number) you'd like the selected PowerPoint file to be inserted", "slide number", "1")

    Dim indexCopyFirst As Long
    indexCopyFirst = InputBox("Please enter the number of the first slide you want to copy", "slide number", "1")

    Dim indexCopyLast As Long
    indexCopyLast = InputBox("Please enter the number of the last slide you want to copy", "slide number", "1")


    Dim offset As Long

    Dim i As Long
    For i = indexCopyFirst To indexCopyLast

        pptOpened.Slides.Item(i).Copy
        pptStart.Slides.Paste (indexInsertAt + offset)

        pptStart.Slides.Item(indexInsertAt + offset).Design = _
            pptOpened.Slides.Item(i).Design

        offset = offset + 1
    Next i

    pptOpened.Close

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...