2016-04-12 5 views
0

Я работаю над темой, в которой мне нужно экспортировать данные Excel в PowerPoint. Все отлично работало, пока у меня не было только одного слайда. Но когда я попытался добавить еще один слайд, он показывает ошибку:Невозможно добавить новый ppt-слайд из Excel VBA, Ошибка 429

run time error 429 : Active x component cannot create an Object.

Вот мой код:

Dim pptSlide As Slide 
Dim pptLayout As CustomLayout 
'my code 
Set pptLayout = ActivePresentation.Slides(1).CustomLayout 'error at this line 
Set pptSlide = ActivePresentation.Slides.AddSlide(2, pptLayout) 

Не знаю, что случилось с ним.

+0

Ваш код работает, если он запускается из самой PowerPoint. Используете ли вы позднюю или раннюю привязку? То есть, вы установили ссылку на PowerPoint? В качестве теста попробуйте затемнить переменные как Object. –

+0

да У меня есть ссылка на PowerPoint. Что вы подразумеваете под кодом, запущенным из PowerPoint? @SteveRindsberg – Nikky

+0

Я просто имел в виду, что я запустил ваш код в PowerPoint, чтобы убедиться, что он работает так, как ожидалось. Когда вы автоматизируете PPT из другой программы, иногда проще и быстрее отлаживать PPT-часть IN Powerpoint. –

ответ

0

Этот код работает нормально для меня, когда в колоде есть один слайд, но, конечно, он не работает, когда в колоде нет слайдов, потому что он ссылается на слайд 1, чтобы получить ссылку на свой собственный макет.

Dim pptSlide As Slide 
Dim pptLayout As CustomLayout 
'my code 
With ActivePresentation 
    ' If the deck has some slides, get a freference to the first slide's custom layout 
    If .Slides.Count > 0 Then 
    Set pptLayout = .Slides(1).CustomLayout 'error at this line 
    Else 
    ' If no slides in the deck, use the second custom layout from the master 
    ' (usually the Title and Content layout 
    Set pptLayout = .SlideMaster.Design.SlideMaster.CustomLayouts(2) 
    End If 
    Set pptSlide = .Slides.AddSlide(.Slides.Count + 1, pptLayout) 
End With 
+0

Привет, попытался объединить ваш код с моим. Все еще дает ту же ошибку. в строке 'With Active Presentation' – Nikky

+0

Возможно, вам следует добавить больше своего кода, чем только фрагменты, которые вы предоставили до сих пор. –

+0

Он работает, когда я добавляю oPPTApp.ActivePresentation. Но новый добавленный слайд не имеет того же макета, что и предыдущий. Это пустой слайд с названием. Как я могу получить тот же формат, что и предыдущий слайд. – Nikky

0

Хей, я имел ту же ошибку. Когда вы дублируете слайд, он становится SlideRange. Все, что вам нужно сделать, это взять первый элемент из диапазона, как показано ниже:

Dim spptRange As SlideRange 
    Dim sppt As PowerPoint.Slide 
    Set spptRange = PPApp.ActivePresentation.Slides(spptNr).Duplicate 
    Set sppt = spptRange.Item(1)