Как добавить новый слайд при копировании таблиц Excel, используя «для» L oop из Excel VBA? - PullRequest
0 голосов
/ 03 апреля 2020
Dim myPresentation As Object
Dim mySlide As Object
Dim PowerPointApp As Object
Dim shp As Object
Dim MySlideArray As Variant
Dim MyRangeArray As Variant
Dim x As Long

PowerPointApp.ActiveWindow.Panes(1).Activate
Set myPresentation = PowerPointApp.ActivePresentation

MySlideArray = Array(1, 2)
MyRangeArray = Array(Worksheets("name").Range("A3:E17"), Worksheets("age").Range("A22:E37"))

For x = LBound(MySlideArray) To UBound(MySlideArray)
    MyRangeArray(x).Copy
    Set shp = myPresentation.Slides(MySlideArray(x)).Shapes.PasteSpecial(DataType:=2)
    Set myPresentation = PowerPointApp.ActivePresentation.AddSlide(PowerPointApp.Slides.Count + 1, PowerPoint.PpSlideLayout.ppLayoutBlank).Select

Next x

Вопрос 1) Ошибка «Объект не поддерживает этот объект или метод» только в строке Count+1.select. В чем моя ошибка?

Вопрос 2) Если у меня есть два диапазона ячеек «A1: E9» и «A11: E20» на том же листе, который я хочу вставить в тот же слайд, есть ли способ написать код, который ищет непустые ячейки из A1 и копирует данные до последней заполненной строки и вставляет их в powerpoint?

Извинения за длинный вопрос. Будем рады получить любой ответ.

1 Ответ

1 голос
/ 03 апреля 2020

Set myPresentation = PowerPointApp.ActivePresentation.AddSlide(PowerPointApp.Slides.Count + 1, PowerPoint.PpSlideLayout.ppLayoutBlank).Select

В этом есть пара проблем:

  1. Вы уже Set myPresentation = PowerPointApp.ActivePresentation ранее. Я думаю, что вы имели в виду mySlide.
  2. PowerPointApp.ActivePresentation - используйте myPresentation, это избыточно.
  3. Метод Slides.AddSlide, а не Application.AddSlide или Presentation.AddSlide.
  4. ... но вы хотите Slides.Add, поскольку AddSlide принимает CustomLayout в качестве второго параметра.
  5. PowerPointApp.Slides.Count - свойства Slides нет приложения; это должно быть myPresentation.Slides.Count.
  6. PowerPoint.PpSlideLayout.ppLayoutBlank - обратите внимание, что это раннего связывания , в то время как остальная часть вашего кода использует позднего связывания . (Dim myPresentation As Object, Dim mySlide As Object и др. c.). Лучше быть последовательным. Я изложил ранний обязательный подход

С этими изменениями:

Const ppLayoutBlank as Long = 12

With myPresentation.Slides
    Set mySlide = .Add(.Count + 1, ppLayoutBlank)
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...