Применить шаблон ко всем диаграммам PPT вызывает ошибку «Определяемый пользователем тип не определен» - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь применить шаблон ко всем графикам в моем PPT, но получаю сообщение об ошибке

Определяемый пользователем тип не определен

Я нашел VBA онлайн, и тот, кто поделился им, сказал, что он работает для него. Какие-либо предложения? Я думал, что это может быть тире в пути, но использование «-» или «_» не помогает. Также попытался удалить последнюю скобку после пути.

Sub ChangeCharts()

    Dim myChart As ChartObject
    For Each myChart In ActiveSheet.ChartObjects
    myChart.Chart.ApplyChartTemplate ( _
    "Name\Users\Name\Library\Group Containers\UBF8T346G9.Office\User Content\Chart Templates\1.crtx")
    Next myChart

End Sub

Попробовал новый VBA;

Sub ChangeCharts()
  Dim oSl As Slide
  Dim oSh As Shape

  For Each oSl In ActivePresentation.Slides
    For Each oSh In oSl.Shapes
      Select Case oSh.Type
        Case Is = 3  ' Chart created in PPT
        Application.ActivePresentation.ApplyTemplate _
    "name/Users/name/Library/Group Containers/UBF8T346G9.Office/User Content/Chart Templates/1.crtx"

      End Select
    Next   ' oSh/Shape
  Next  ' oSl/Slide
End Sub

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Во-первых, посмотрите комментарии ниже, чтобы узнать, почему ваш пример кода не может работать в PPT:

Sub ChangeCharts()
    ' PPT has no ChartObject type  
    Dim myChart As ChartObject
    ' PPT has no ActiveSheet object
    For Each myChart In ActiveSheet.ChartObjects
    myChart.Chart.ApplyChartTemplate ( _
    "Name\Users\Name\Library\Group Containers\UBF8T346G9.Office\User Content\Chart Templates\1.crtx")
    Next myChart

End Sub

Предполагая, что вы запускаете это из PPT, вам понадобится что-то вроде:

Sub ChangeCharts
  Dim oSl as Slide
  Dim oSh as Shape

  For Each oSl in ActivePresentation.Slides
    For Each oSh in oSl.Shapes
      Select Case oSh.Type
        Case Is = 3  ' Chart created in PPT
          ' apply the template here
          With oSh.Chart
            .ApplyChartTemplate "drive:\path\template_name.crtx"
          End with  ' the chart
        ' Other case statements as needed to
        ' cover embedded/linked OLE objects 
        ' that are Excel charts
      End Select
    Next   ' oSh/Shape
  Next  ' oSl/Slide
End Sub
0 голосов
/ 19 января 2019

ActiveSheet - это объект Excel.Я думаю, что вы хотите использовать ActiveSlide для PowerPoint.

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