VBA - PowerPoint презентация (и PDF) слияние - PullRequest
0 голосов
/ 31 марта 2020

Я использую следующий код, чтобы собрать презентацию Powerpoint из многих других презентаций Powerpoint:

Sub InsertFromOtherPres()
    Dim xlApp As Object
    Dim xlWorkBook As Object
    Dim i, j As Byte
    Dim wbname As String
    Dim sldB, sldE As Byte

    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = True

    On Error Resume Next

    Set xlWorkBook = xlApp.Workbooks.Open("C:\Users\----\OneDrive\Desktop\Roli PPT\Book - Pages - Macro.xlsm", True, False)

    On Error GoTo 0

    j = 3

    For i = 2 To 154
        wbname = "C:\Users\----\OneDrive\Desktop\Roli PPT\" & xlWorkBook.Sheets("Sheet1").Cells(i, "K").Value

        sldB = xlWorkBook.Sheets("Sheet1").Cells(i, "L").Value
        sldE = xlWorkBook.Sheets("Sheet1").Cells(i, "L").Value

        ActivePresentation.Slides.InsertFromFile FileName:=wbname, Index:=j, SlideStart:=sldB, SlideEnd:=sldE

        j = j + 1
    Next i

    Set xlApp = Nothing
    Set xlWorkBook = Nothing

    MsgBox "Ready"
End Sub

В файле excel в столбце «K» указаны имена исходных ppts, а в столбце «L» - это номера слайдов, которые нужно скопировать. Тем не менее, я получаю сообщение об ошибке, когда макрос попадает в строку, где число в столбце «L» больше 26 (это означает, что необходимый слайд больше 26 в исходном ppt)
Run-time error '-213718860 (80048240)': Slides (unknown member) : Integer out of range. 27 is not in the valid range of 1 to 26.

Может ли кто-нибудь помочь с этим?

Также я ищу простой макрос, который, как и выше, может копировать данные страницы PDF-файла в другой PDF-файл, а также указывать, куда именно (номер страницы) копировать.

1 Ответ

0 голосов
/ 31 марта 2020

У меня не было возможности протестировать его, но этот код должен скопировать несколько слайдов из Source презентации в Destination презентацию.

Это будет выдает ошибку, если заданы недопустимые номера (например, «копировать 0 слайдов» ), и автоматически настроится на переполнение (например, «Копировать слайды с 1 по 10 из 7 слайдов» или «вставить на слайде 20 из 15» ) - обе эти ошибки, я думаю, могут быть вашими.

Private Function CopySlidesToPresentation(ByRef Source As Presentation, ByVal CopyStart As Long, ByVal CopySlides As Long, _
    ByRef Destination As Presentation, Optional ByVal InsertAt As Long = -1) As Boolean
    'Source: Presentation to copy from
    'CopyStart: First slide to copy
    'CopySlides: How many slides to copy
    'Destination: Presentation to copy to
    '~~OPTIONAL~~
    'InsertAt: Position to insert at.  If omitted, will insert at the end of the Presentation
    '~~RETURNS~~
    'TRUE if all slides copy successfully
    'FALSE if unable to copy slides

    Dim CurrentSlide As Long

    CopySlidesToPresentation = False
    If CopyStart < 1 Then Exit Function 'Cannot start before the First Slide
    If CopySlides < 1 Then Exit Function 'Cannot copy No or Negative Slides
    If CopyStart > Source.Slides.Count Then Exit Function 'Cannot copy after the Last Slide
    If InsertAt < 1 Then Exit Function 'Cannot Insert before the Presentation starts

    If CopyStart + CopySlides > Source.Slides.Count Then CopySlides = 1 + Source.Slides.Count - CopyStart 'Trim to Presentation Length
    If InsertAt > Destination.Slides.Count Then InsertAt = -1 'Trim to Presentation Length

    On Error GoTo FunctionError

    For CurrentSlide = 0 To CopySlides - 1 'Copy each slide in turn
        Source.Slides(CopyStart + CurrentSlide).Copy
        If InsertAt > 0 Then
            Destination.Slides.Paste InsertAt + CurrentSlide
        Else
            Destination.Slides.Paste 'Put it at the end
        End If
    Next CurrentSlide

    CopySlidesToPresentation = True 'Success!

FunctionError:
    On Error GoTo -1 'Clear the Error Handler
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...