Я видел такой пост раньше, но не смог добавить больше комментариев и не смог реализовать решение. Поэтому, пожалуйста, не критикуйте :) Мне в основном нужно открыть пустой файл pptx и указать местоположение папки, которая состоит из 20 других презентаций pptx (текст, графики, изображения) и добавить их (автоматически) в открытый файл. Все VBA, которые я пробовал до сих пор, не работают для меня, поэтому, пожалуйста, оставьте комментарии, если вы можете предоставить образец VBA для любителей, как я!

Очень признателен!

Как советовал один из мастеров здесь, вот код, который я использовал, и заменил strFPath на папку, в которую я включил все файлы pptx, которые я хотел вставить в файл pptx презентации MASTER, и заменил strSpec одним из файлов из папку, в которую я поместил другие файлы, чтобы она была вставлена, но не повезло, что она работает.

Sub Combine_fromFolder() 
    Dim strFPath As String 
    Dim strSpec As String 
    Dim strFileName As String 
    Dim oTarget As Presentation 
    Set oTarget = Application.Presentations.Add(WithWindow:=True) 
    strFPath = "C:\Users\John\Desktop\Test\" ' Edit this
    strSpec = "*.PPTX" 'to include PPT etc use "*.PP*"
    strFileName = Dir$(strFPath & strSpec) 
    While strFileName <> "" 
        oTarget.Slides.InsertFromFile strFileName, oTarget.Slides.Count, 1, 1 
        strFileName = Dir() 
    Wend 
End Sub 

1 ответ1

0

Я не мог получить тот, на котором ты должен работать. Он довольно старый, поэтому, возможно, он не совместим с более поздними версиями PowerPoint.

Я нашел следующий VBA в PPTools, решение 2, которое работает для того, что вы описали. Единственное исключение: вам не нужно менять путь, потому что он использует папку, в которой находятся файлы, которые вы хотите объединить.

В этом коде есть два Subs которые должны использоваться вместе.

  • Откройте новый файл презентации и сохраните его в папке, в которой находятся все файлы, которые вы хотите объединить (вы можете переместить их позже)
  • Вставьте код в окно VBA
  • Запустите макрос InsertAllSlides и он объединит их.

Sub InsertAllSlides()
'  Insert all slides from all presentations in the same folder as this one
'  INTO this one; do not attempt to insert THIS file into itself, though.

    Dim vArray() As String
    Dim x As Long

    ' Change "*.PPT" to "*.PPTX" or whatever if necessary:
    EnumerateFiles ActivePresentation.Path & "\", "*.PPT", vArray

    With ActivePresentation
        For x = 1 To UBound(vArray)
            If Len(vArray(x)) > 0 Then
                .Slides.InsertFromFile vArray(x), .Slides.Count
            End If
        Next
    End With

End Sub

Sub EnumerateFiles(ByVal sDirectory As String, _
    ByVal sFileSpec As String, _
    ByRef vArray As Variant)
    ' collect all files matching the file spec into vArray, an array of strings

    Dim sTemp As String
    ReDim vArray(1 To 1)

    sTemp = Dir$(sDirectory & sFileSpec)
    Do While Len(sTemp) > 0
        ' NOT the "mother ship" ... current presentation
        If sTemp <> ActivePresentation.Name Then
            ReDim Preserve vArray(1 To UBound(vArray) + 1)
            vArray(UBound(vArray)) = sDirectory & sTemp
        End If
        sTemp = Dir$
    Loop

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .