【发布时间】: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