Требуется ошибка объекта несмотря на успешную операцию - PullRequest
0 голосов
/ 21 марта 2020

Я хочу построить много различных слайдов 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

enter image description here

1 Ответ

2 голосов
/ 22 марта 2020

Попробуйте использовать wks.Cells(line, CLMN).Value вместо wks.Range(line, CLMN).Text.

Я предполагаю, что line и CLMN - это длинные переменные, представляющие Row и Column.

Но, если line - это String, представляющий буквальную часть адреса (например, "A", "B", "AB"), вы должны использовать wks.Range(line & CLMN).Value

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