如果你要在 Excel 中使用 VBA 操作 PowerPoint,第一步,你必须引用 PowerPoint 对象库,可以使用前期绑定或者后期绑定。
引用 PowerPoint 对象库
前期绑定
打开 VBE(快捷键 ALT+F11),在 VBE 中单击【工具】,选择【引用】,在【引用 VBAProject】对话框中选择 【Microsoft PowerPoint 16 Object Library】(根据你的 Office 版本选择,本操作适用于 MS Office 2019)。
' 早期绑定
Dim pptApp As Application
Set pptApp = New PowerPoint.Application
后期绑定
将应用程序变量声明为对象,VBA 引擎在运行时连接到正确的应用程序。
' 后期绑定
Dim pptApp As Object
Set pptApp = CreateObject("PowerPoint.Application")
使应用可见
在设置 PowerPoint 应用程序的引用后,你可能需要使其可见。
pptApp.Visible = True
激活应用
在设置 PowerPoint 应用程序的引用后,你可能还需要激活 PowerPoint。
pptApp.Visible = Activate
操作 PowerPoint
如果你要在 Excel 中操作演示文稿,只需添加对你上面创建的 PowerPoint 的引用。详细课程请参考学习:PowerPoint VBA 编程。
举例来说,在 PowerPoint 中的代码:
Presentations.Open ("My Presentation.pptx")
如果需要在 Excel 中操作,需要这样使用:
pptApp.Presentations.Open ("My Presentation.pptx")
关闭应用程序
一旦操作完成,你需要关闭 PowerPoint 实例,并释放内存。
pptApp.Quit
Set pptApp = Nothing
示例一:使用前期绑定从 Excel 复制到 PowerPoint
本示例使用前期绑定,将 Excel 活动工作表中的数据复制到新建的演示文稿中,并保存在桌面上。本示例只为说明操作过程。
Sub CreatePPTSlides()
'前期绑定:工具 > 引用 > Microsoft PowerPoint 16 Object Library
'定义变量
Dim pptApp As PowerPoint.Application
Dim ppt As PowerPoint.Presentation
Dim newSlide As PowerPoint.Slide
'新建一个PowerPoint实例
Set pptApp = New PowerPoint.Application
'设置PowerPoint可见
pptApp.Visible = True
'激活PowerPoint
pptApp.Activate
'新增演示文稿
Set ppt = pptApp.Presentations.Add
'新增一张标题幻灯片
Set newSlide = ppt.Slides.Add(1, ppLayoutTitle) 'ppLayoutTitle = 1
'设置标题
newSlide.Shapes(1).TextFrame.TextRange = "在Excel中使用VBA操作PPT"
'设置副标题
newSlide.Shapes(2).TextFrame.TextRange = "果果云课堂"
'新增一张空白幻灯片
Set newSlide = ppt.Slides.Add(2, ppLayoutBlank) 'ppLayoutBlank = 12
'选择新增的空白幻灯片
newSlide.Select
'复制Excel中活动工作表A1单元格所在的区域数据
ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Copy
'将复制的数据粘贴为形状
newSlide.Shapes.PasteSpecial DataType:=2 '2 = ppPasteEnhancedMetafile
'将演示文稿保存在桌面上
ppt.SaveAs Environ("UserProfile") & "\Desktop\在Excel中使用VBA操作PPT示例一" & Format(Now, "yyyy-mm-dd hh-mm-ss") & ".pptx"
'关闭演示文稿
ppt.Close
'关闭PowerPoint应用程序
pptApp.Quit
End Sub
示例二:使用后期绑定从 Excel 复制到 PowerPoint
本示例使用后期绑定,将 Excel 活动工作表中的数据复制到新建的演示文稿中,并保存在桌面上。本示例只为说明操作过程。注意代码的区别。
Sub CopyRangeToPPT()
'使用后期绑定,无需引用库
'定义变量
Dim pptApp As Object
Dim ppt As Object
Dim newSlide As Object
'新建一个PowerPoint实例
Set pptApp = CreateObject("PowerPoint.Application")
'设置PowerPoint可见
pptApp.Visible = True
'激活PowerPoint
pptApp.Activate
'新增演示文稿
Set ppt = pptApp.Presentations.Add
'新增一张标题幻灯片
Set newSlide = ppt.Slides.Add(1, 1) 'ppLayoutTitle = 1
'设置标题
newSlide.Shapes(1).TextFrame.TextRange = "在Excel中使用VBA操作PPT"
'设置副标题
newSlide.Shapes(2).TextFrame.TextRange = "果果云课堂"
'新增一张空白幻灯片
Set newSlide = ppt.Slides.Add(2, 12) 'ppLayoutBlank = 12
'选择新增的空白幻灯片
newSlide.Select
'复制Excel中活动工作表A1单元格所在的区域数据
ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Copy
'将复制的数据粘贴为形状
newSlide.Shapes.PasteSpecial DataType:=2 '2 = ppPasteEnhancedMetafile
'将演示文稿保存在桌面上
ppt.SaveAs Environ("UserProfile") & "\Desktop\在Excel中使用VBA操作PPT示例二" & Format(Now, "yyyy-mm-dd hh-mm-ss") & ".pptx"
'关闭演示文稿
ppt.Close
'关闭PowerPoint应用程序
pptApp.Quit
End Sub