Как выбрать несколько слайдов в PowerPoint, а затем дублировать их несколько раз? - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь дублировать выбранные слайды несколько раз в одной презентации. Может кто-нибудь, пожалуйста, посоветуйте, где я иду не так? Спасибо

Public Sub DuplicateSlideMultipleTimes()
    Dim n As Integer
    On Error Resume Next
    n = InputBox("How many copies of the selected slides do you want to make?")

    Dim mySlides As Slides
    Set mySlides = ActiveWindow.Selection.SlideRange

    If n >= 1 Then
        For numtimes = 1 To n
            mySlides.Copy After:=ActivePresentation.Slides(ActivePresentation.Slides.Count)
        Next
    End If
End Sub

Ответы [ 2 ]

0 голосов
/ 23 февраля 2020

Вот другой подход. Вместо того, чтобы перебирать каждый из выбранных слайдов для создания дубликата, он просто копирует и вставляет. Он также помещает их в конец презентации.

Обратите внимание, что mySlides был надлежащим образом объявлен как SlideRange, как уже указывал Рикардо.

Также обратите внимание, что On Error Resume Next имеет был удален, поскольку он может скрывать ошибки при неправильном использовании, как также указывал Рикардо.

Option Explicit

Public Sub DuplicateSlideMultipleTimes()

    Dim ans As String
    Dim num_copies As Long

    num_copies = 0
    Do
        ans = InputBox("How many copies of the selected slides do you want to make?")
        If Len(ans) = 0 Then Exit Sub
        If IsNumeric(ans) Then
            num_copies = CLng(ans)
            If num_copies > 1 Then Exit Do
        End If
        MsgBox "Invalid entry, try again!", vbExclamation
    Loop

    Dim mySlides As SlideRange
    Set mySlides = ActiveWindow.Selection.SlideRange

    Dim i As Long
    For i = 1 To num_copies
        mySlides.Copy
        ActivePresentation.Slides.Paste
    Next i

    MsgBox "Completed!", vbExclamation

End Sub
0 голосов
/ 23 февраля 2020

Вы были близки.

Некоторые основные моменты:

  1. Избегать при ошибке Возобновить Далее по мере возможности (это будет просто скрывать, где у вас есть ошибки)
  2. Объявить все ваши переменные (используйте Option Explicit в верхней части ваших модулей)
  3. У вас неправильные типы переменных

Просмотрите комментарии кода и настройте его в соответствии с вашими потребностями

Код:

Option Explicit

Public Sub DuplicateSlideMultipleTimes()

    Dim sourceSlide As Slide
    Dim selectedSlides As SlideRange

    Dim numTimes As Variant
    Dim counter As Long
    Dim totalCounter As Long

    ' Ask user for num slides
    numTimes = InputBox("How many copies of the selected slides do you want to make?")

    ' Check if numTimes is a number otherwise, exit procedure
    If Not IsNumeric(numTimes) Then Exit Sub

    ' Set a reference to the selected slides
    Set selectedSlides = ActiveWindow.Selection.SlideRange

    ' Loop through each slide in the selected slides
    For Each sourceSlide In selectedSlides
        For counter = 1 To numTimes
            ' Duplicate the slide
            sourceSlide.Duplicate
            ' Track total number of duplicated slides
            totalCounter = totalCounter + 1
        Next counter
    Next sourceSlide

    ' Display message to user
    MsgBox totalCounter & " duplicates generated"

End Sub

Дайте мне знать, если это работает

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