【发布时间】:2014-02-25 19:39:06
【问题描述】:
我正在尝试批量生成一系列 PowerPoint 演示文稿。我的幻灯片将包含从 Excel 创建和复制的两个元素。我正在使用 Office 2010。
第一个元素是平滑完成的 SmartArt 图形。第二个是我想复制为表格对象(而不是链接图像)的几个单元格。在用“形状”浪费了几个小时后,我找到了这个,但粘贴后我无法操纵它的高度和宽度。
PPApp.CommandBars.ExecuteMso ("PasteSourceFormatting")
然后,当我尝试使用以下方法保存演示文稿时,我意识到只保存了 SmartArt;即使在粘贴之后执行了 saveAs 命令,粘贴的表格也不会保存。
PPApp.CommandBars.ExecuteMso ("PasteSourceFormatting")
PPPres.SaveAs saveName, ppSaveAsDefault
PPPres.Close
更奇怪的是,我发现当我在上面的粘贴和保存之间添加一个用于调试的 msgbox 命令时,表格被正确保存。但是,我正在尝试批量生产这些文件,无法坐下来关闭每个消息框。
我的问题: 1. 粘贴后如何更改表格的高度/宽度/对齐方式? 2. 如何保存包含表格的文件?
已编辑,我当前的代码
Sub copyAllToPpt()
Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim PPName, xlName As String
xlName = ActiveWorkbook.Name
Dim saveName As String
Workbooks(xlName).Activate
Dim y As Integer
y = ActiveCell.Row
saveName = ActiveSheet.Cells(y, "B").Value & "-" & ActiveSheet.Cells(y, "A").Value & " Stats"
Set PPApp = CreateObject("Powerpoint.Application")
PPApp.Visible = True
Set PPPres = PPApp.Presentations.Add
PPName = PPPres.Name
PPApp.ActiveWindow.ViewType = ppViewSlide
Set PPSlide = PPPres.Slides.Add(1, ppLayoutBlank)
createSmartArtGraphicThenCopy
PPSlide.Shapes.Paste.Select
PPApp.ActiveWindow.Selection.ShapeRange.Height = 288
PPApp.ActiveWindow.Selection.ShapeRange.Width = 641
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, msoTrue
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, msoTrue
PPApp.ActiveWindow.Selection.Unselect
'Macro is working as expected up to here
Workbooks(xlName).Activate
createTable
'Table is copied in subroutine
PPApp.Activate
PPApp.CommandBars.ExecuteMso ("PasteSourceFormatting")
'Application.Wait (Now + TimeValue("0:00:05"))
'Tried the Wait() to no avail.
DoEvents: DoEvents: DoEvents
PPApp.ActivePresentation.SaveAs saveName, ppSaveAsDefault
PPApp.ActivePresentation.Close
End Sub
【问题讨论】:
-
正如@steverindsberg 建议的那样,我认为您的问题可能是时间问题。在粘贴表格之后以及保存和关闭之前,找到一些暂停片刻的方法。这就是你 msgbox 正在做的事情或 Steves doEvents。
-
谢谢。我按照建议尝试使用 3 个“DoEvents”。系统似乎随机给出保存的文件无表,或对象'_Presentation'的方法'SaveAs'失败。错误。
-
进一步更新:我重新排序了这两个元素,以便首先粘贴表格以尝试处理时间问题。结果是,在 SmartArt 顺利粘贴时,表格仍然没有粘贴。看着 PPT 窗口,我注意到在右键菜单闪现之前有很长的停顿。文件被VBA保存并关闭后,还有sans table。
标签: excel vba com powerpoint ole