Я хочу построить много различных слайдов PowerPoint, составленных из элементов из набора из 12 (я назвал их «трафареты») - для каждого слайда меняется только порядок элементов и текст внутри элементов.
Цель:
Go через строки в Excel. Каждая строка представляет одно использование «трафарета». В столбце 5 указано, какой «трафарет» использовать (из идентификатора), а затем другие столбцы содержат тексты для полей.
Все трафареты находятся на последнем слайде презентации, откуда я копирую соответствующий, вставьте его и заполните его текстом.
Один из этих шаблонов - это текстовое поле (заголовок). Все остальные являются группами фигур.
Когда я пытаюсь запустить этот код, он сообщает мне 424 «Требуется объект» для этой строки
.TextFrame.TextRange.Text = wks.Range(line, CLMN).Text
... но после успешного запуска. Заголовок на слайде, и текст правильный.
Как ему может потребоваться объект по факту?
Full Sub:
Sub AddShape(typ As Integer, state As Integer, currentSld As Slide, height As Long, line As Integer)
'Set the constants (although not implemented as Const)
Dim CLMN As Integer
CLMN = 5
Dim stencils As Shapes
Dim stencilSlide As Integer
stencilSlide = CInt(ActivePresentation.Slides.Count)
Set stencils = ActivePresentation.Slides(stencilSlide).Shapes
Dim HEADER As Shape
Set HEADER = stencils("header")
Dim ALPHANUMERICAL As Shape
Set ALPHANUMERICAL = stencils("alphanumerical")
Dim BIRTHDATE As Shape
Set BIRTHDATE = stencils("birthdate")
Dim TOGGLE As Shape
Set TOGGLE = stencils("toggle")
Dim DROPDOWN As Shape
Set DROPDOWN = stencils("dropdown")
Dim NUMERICAL As Shape
Set NUMERICAL = stencils("numerical")
Select Case typ
Case 1
ALPHANUMERICAL.Copy
Case 2
NUMERICAL.Copy
Case 4
DROPDOWN.Copy
Case 5
TOGGLE.Copy
Case 9
BIRTHDATE.Copy
End Select
If typ = 10 Then
HEADER.Copy
With currentSld.Shapes.Paste
.Top = height
.TextFrame.TextRange.Text = wks.Range(line, CLMN).Text
End With
Else
With currentSld.Shapes.Paste
.Top = height
For x = 1 To .GroupItems.Count
If .GroupItems(x).Name = "label" Then
With .GroupItems(x)
.TextFrame.TextRange.Text = wks.Range(line, CLMN).Text
End With
Else
With .GroupItems(x)
.TextFrame.TextRange.Text = wks.Range(line, CLMN + CInt(.GroupItems(x).Name)).Text
End With
End If
Next
End With
End If
End Sub