2015-06-10 1 views
2

Я пытаюсь написать подпрограмму, которая скопирует и вставляет все (и позже только некоторые) слайды из файла PowerPoint в другой , сохраняя исходное форматирование.Как скопировать и вставить слайд PowerPoint СОХРАНЕНИЕ ИСТОЧНИКА ФОРМАТИРОВАНИЯ с помощью VBScript?

Это ближайший я получил:

Dim objPowerpointApp, objPresentations 
Set objPowerpointApp = CreateObject("Powerpoint.Application") 
Set objPresentations = objPowerpointApp.Presentations 

Dim objNewPresentation 
Set objNewPresentation = objPresentations.Open(strTemplateFile, 0, 0, -1) 

Dim objOldPresentation : Set objOldPresentation = objPresentations.Open(tempSlideSet.Path, 0, 0, 0) 

Dim tempCurrentSlide 
For Each tempCurrentSlide in objOldPresentation.Slides 
    tempCurrentSlide.Copy 
    objNewPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting") 
Next 

Это не приводит к возникновению ошибок и даже приклеивает правильные мастера слайдов, но это на самом деле не вставить любой из слайдов.

Я также попытался это:

Dim objPowerpointApp, objPresentations 
Set objPowerpointApp = CreateObject("Powerpoint.Application") 
Set objPresentations = objPowerpointApp.Presentations 

Dim objNewPresentation 
Set objNewPresentation = objPresentations.Open(strTemplateFile, 0, 0, -1) 

Dim objOldPresentation : Set objOldPresentation = objPresentations.Open(tempSlideSet.Path, 0, 0, 0) 

Dim tempCurrentSlide 
For Each tempCurrentSlide in objOldPresentation.Slides 
    tempCurrentSlide.Copy 
    objNewPresentation.Slides.Paste 
    objNewPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting") 
Next 

Какие вставит правильный слайдам, а также слайд, но слайд будет вставлен с форматированием назначения.

Естественно, это вставит все слайды правильно, но без какого-либо форматирования исходного:

Dim objPowerpointApp, objPresentations 
Set objPowerpointApp = CreateObject("Powerpoint.Application") 
Set objPresentations = objPowerpointApp.Presentations 

Dim objNewPresentation 
Set objNewPresentation = objPresentations.Open(strTemplateFile, 0, 0, -1) 

Dim objOldPresentation : Set objOldPresentation = objPresentations.Open(tempSlideSet.Path, 0, 0, 0) 

Dim tempCurrentSlide, lngSlideIndex 
For Each tempCurrentSlide in objOldPresentation.Slides 
    lngSlideIndex = objNewPresentation.Slides.Count 
    objNewPresentation.Slides.InsertFromFile tempSlideSet.Path, lngSlideIndex 
Next 

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

Как скопировать и вставить слайд PowerPoint с помощью VBScript и сохранить исходное форматирование?

ответ

1

Кому-то, кто борется с той же проблемой, вот подпрограмма, которую мне удалось создать. objDestPresentation должен быть Presentation Object, а sourceSlideRange должен быть SlideRange Object.

Скопирует слайды от sourceSlideRange до конца objDestPresentation. Надеюсь, это спасет кого-то из той борьбы, через которую я прошел!

Private Sub InsertSlide_Source(ByRef objDestPresentation, byVal sourceSlideRange) 
    sourceSlideRange.Copy 

    If Not objDestPresentation.Slides.Count = 0 Then 
     objDestPresentation.Windows(1).View.GotoSlide(objDestPresentation.Slides.Count) 
    End If 

    objDestPresentation.Application.CommandBars.ExecuteMso("PasteSourceFormatting") 
End Sub 
0

Это помогло мне решить долговременное разочарование в PowerPoint. Спасибо вам большое за размещение этого. Нюанс, который я нашел, очень важен для активации презентации, которую я хотел затронуть, перед тем, как вставить ее, иначе слайд может оказаться не в том месте. В моем случае я жонглировать вещи между тремя различными презентациями:

  1. я начинаю с пустой презентацией оболочки, что я тогда заселить
  2. У меня есть «пустой слайд» шаблон, который я использую для большинства слайды.
  3. У меня также есть другие одноразовые слайды, которые мне нужно включить.

Что касается активации надлежащего представления я использовал ответ от сюда:

http://answers.microsoft.com/en-us/msoffice/forum/msoffice_powerpoint-msoffice_custom/powerpoint-vba-making-right-window-active/32c9fa95-fa1d-46f8-912a-09771a63a27a Код