. Левое расположение фигур в неправильном месте в PowerPoint 2016 VBA - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь скопировать диапазоны из листа Excel и вставить их в слайды в виде таблиц, затем расположить и изменить их размер. Однако, когда я пытаюсь расположить фигуры в ppt, метод .Left не работает должным образом; на миниатюрах слайдов в левой части экрана фигуры находятся в ожидаемых положениях (по центру, как в приведенном ниже коде), но при выборе слайда фигуры смещаются вправо от того места, где они должны быть.

Я подумал, что он может использовать «центр» в качестве исходной точки вместо левой границы слайда, но это не совпадает с величиной смещения.

Был бы очень признателен за помощь в этом - было бы полезно знать, если это ошибка в ppt или ошибка в моем коде, так как если это ошибка, это сильно влияет на осуществимость этого проекта. Для этого конкретного примера я мог бы, вероятно, использовать метод .Align в качестве обходного пути, но для последующих слайдов мне нужно иметь возможность точно позиционировать несколько фигур на одном слайде.

Я использую Office 365.

Код ниже:

Sub PP_export()

Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim XLws As Worksheet

Set PPApp = New PowerPoint.Application
Set XLws = ActiveSheet
Set PPPres = PPApp.Presentations.Open("Y:\Research\PROJECTS\2018\Magic Macro\ppt_template_.potx")
PPApp.Visible = True

''Lifestyle Statements
'By Col%
Set PPSlide = PPPres.Slides(3)
Dim LSCol As PowerPoint.Shape

XLws.Range("M106:o126").Copy
PPSlide.Shapes.PasteSpecial ppPasteDefault

Set LSCol = PPSlide.Shapes("Table 2")
With LSCol
    .Left = (28.35 * 10.56)
    .Top = (28.35 * 3.83)
    .Height = (28.35 * 13.21)
    .Width = (28.35 * 12.75)
End With

'By Index
Set PPSlide = PPPres.Slides(4)
Dim LSIndex As PowerPoint.Shape

XLws.Range("Q106:s126").Copy
PPSlide.Shapes.PasteSpecial ppPasteDefault

Set LSIndex = PPSlide.Shapes("Table 2")
With LSIndex
    .Left = (28.35 * 10.56)
    .Top = (28.35 * 3.83)
    .Height = (28.35 * 13.21)
    .Width = (28.35 * 12.75)
End With

Ответы [ 2 ]

0 голосов
/ 16 июля 2019

У меня возникла та же проблема, и я запускаю отладочное сообщение, показывающее положение после вставки, и оно кажется правильным. Но только миниатюра выглядит хорошо, фактический слайд неправильный.

Я обнаружил, что положение таблицы будет правильным при активации или отображении слайда перед вставкой таблицы. Также, если нужно вставить несколько таблиц, мне нужно было сделать короткий перерыв в 2 секунды между операциями вставки.

Мой обходной путь довольно уродливый, и я все еще ищу причину. Вероятно, это ошибка, но, возможно, это также связано с некоторым смещением слайда в фоновом режиме.

0 голосов
/ 08 мая 2018

Вам нужно перебрать таблицу и данные, если вы используете шаблон. Если у вас уже есть таблица (таблица 2) на слайде 3, вы можете использовать ее. просто отправьте в файл Excel объект и шаблон (путь + имя) возможно, потребуется немного повозиться.

Sub Slide_3(ByRef xlWorkBook, Template)

For Each oSh In Presentations(Template).Slides(3).Shapes
        Select Case oSh.Name
            Case "Table 2"
            For i = 1 To 20
                For j = 1 To 3
                    oSh.Table.Cell(i, j).Shape.TextFrame.TextRange.Text = xlWorkBook.Worksheets(24).Cells(105 + i, j + 12).Value
                Next j
            Next i
 'M106:o126

         End Select

Next oSh

End Sub
...