【问题标题】:.Left positioning shapes in wrong place in PowerPoint 2016 VBA.Left 定位形状在 PowerPoint 2016 VBA 中的错误位置
【发布时间】:2019-07-16 19:46:25
【问题描述】:

我正在尝试从 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

【问题讨论】:

  • 欢迎来到Stack Overflow!你检查过方法的documentation吗?另外,你要乘什么/为什么要乘?最左边是.Left=0
  • 谢谢!是的——不幸的是,线索不多。 .Left 是形状对象的一个​​属性,它简单地表示从形状边界框的左边缘到幻灯片左边缘的距离(以磅为单位)。它可以设置为整数值,也可以返回形状最左侧位置的整数值。我正在乘以 VBA 以点为单位测量,但我有我想要位置的 cm 值,转换因子是 28.35
  • 没有看到你有什么我不能提供太多帮助(或想象你的问题是)但你能手动正确放置这些形状吗?如果是这样,你这样做后.Left的值是多少?
  • 查看粘贴为ppPasteEnhancedMetafile 是否有帮助。
  • @CCM 似乎确实解决了定位问题,但将范围粘贴为图像而不是不理想的表格。如果这是绕过它的唯一方法,那么我可以在 Excel 中格式化并粘贴为图像,但理想情况下人们可以从这些表格中复制和粘贴文本。

标签: vba excel office365 powerpoint


【解决方案1】:

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

我发现在粘贴表格之前激活或显示幻灯片时表格的位置是正确的。此外,如果需要插入多个表格,我需要在粘贴操作之间稍作休息 2 秒。

我的解决方法很丑陋,我仍在寻找原因。这可能是一个错误,但也可能与背景中幻灯片的某种偏移有关。

【讨论】:

  • 在这种情况下,在尝试重新定位形状/表格之前选择幻灯片似乎是答案。为我解决了这个问题。
【解决方案2】:

如果您使用模板,则需要遍历表格和数据。 如果您在幻灯片 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

【讨论】:

  • 非常感谢您回答这个问题 - 我一直在纠结,试图找出让它工作的循环,我只是成功地获得了相同的值来填充每个单元格桌子。这真的很聪明,再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多