。在PowerPoint 2016 VBA中错误位置左侧定位形状

时间:2018-05-02 10:50:28

标签: vba excel-vba office365 powerpoint powerpoint-vba

我正在尝试从Excel工作表中复制范围并将其作为表格粘贴到幻灯片中,然后定位并调整它们的大小。但是,当我尝试将形状放在ppt中时,.Left方法的行为不符合预期;在屏幕左侧的幻灯片缩略图中,形状处于预期位置(以下面的代码为中心),但是当我选择幻灯片时,形状会移动到它们应该的位置的右​​侧。

我认为它可能使用'center'作为参考点而不是幻灯片的左边界但是这与它的偏移量不匹配。

非常感谢一些帮助 - 很高兴知道它是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 :(得分:0)

如果使用模板,则需要遍历表和数据。 如果幻灯片3上已有表(表2),则可以使用此表。只需发送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

答案 1 :(得分:0)

我遇到了同样的问题,并且运行了一条调试消息,显示插入后的位置,这似乎是正确的。但是只有缩略图看起来不错,实际的幻灯片是错误的。

我发现在粘贴表格之前激活或显示幻灯片时表格的位置是正确的。另外,如果需要插入几张表,我需要在粘贴操作之间短暂间隔2秒。

我的解决方法非常难看,我仍在寻找原因。这可能是一个错误,但也许也与后台幻灯片的某种偏移有关。