Ссылка на пользовательский макет в PowerPoint из Excel по имени - PullRequest
0 голосов
/ 02 мая 2019

Я в Excel и хотел бы сослаться на пользовательский макет для слайда в PowerPoint по имени. Вы можете ссылаться на них только по индексу, поэтому я подумал, что функция должна помочь:

Sub Monatsbericht()
   Dim DestinationPPT As String
   Dim PowerPointApp As PowerPoint.Application
   Dim myPresentation As PowerPoint.Presentation

   Set PowerPointApp = New PowerPoint.Application
   DestinationPPT = "C:\VBA\Reports\MonthlyReport_Template.pptm" 
   Set myPresentation = PowerPointApp.Presentations.Open(DestinationPPT)

   Debug.Print PPLayout("CLayout1")

   'Rest of code
End Sub

Function PPLayout(clayout As String)
    Dim myPresentation As PowerPoint.Presentation
    Dim olay As PowerPoint.CustomLayout

For Each olay In ActivePresentation.SlideMaster.CustomLayouts
    If olay.Name = clayout Then
        PPLayout = olay.Index
        Exit Function
    End If
Next olay

End Function

Я получаю ошибку 429: «Создание объекта с помощью компонента Activex невозможно.», Выделяя для каждой строки в функции.

1 Ответ

1 голос
/ 02 мая 2019

На самом деле ActivePresentation должно быть myPresentation, Excel не должен знать ActivePresentation. Также вы должны указать myPresentation в качестве параметра, иначе это пустая переменная в вашей функции.

Если вы посмотрите на метод Slides.AddSlide (PowerPoint) , вы увидите, что вторым параметром является не index, а тип CustomLayout, поэтому ваша функция должна возвращать макет вместо index.

Public Function PPLayout(clayout As String, myPresentation As PowerPoint.Presentation) As PowerPoint.CustomLayout
    Dim olay As PowerPoint.CustomLayout

    For Each olay In myPresentation.SlideMaster.CustomLayouts
        If olay.Name = clayout Then
            Set PPLayout = olay
            Exit Function
        End If
    Next olay
End Function

И используйте это как

Debug.Print PPLayout("CLayout1", myPresentation).Index

или

myPresentation.Slides.AddSlide(myPresentation.Slides.Count + 1, PPLayout("CLayout1", myPresentation))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...