从Excel中建立PowerPoint演示文档
在《Excel & Access Integration:With Office 2007》的最后一章中,介绍了Microsoft Excel与Word、PowerPoint和Outlook整合的基本技术。其中,介绍Excel和PowerPoint整合技术时,演示了如何在Excel工作簿中创建演示文档,然后使用自动化将其转换为PowerPoint演示文档,如题。
我觉得这是一项非常有用的技术,充分发挥了两种应用程序各自的优点。在Excel工作簿中,每张工作表代表演示文档中的一张幻灯片,在工作表中能够充分利用Excel的数据分析和处理功能生成生动且有意义的图表或表格。然后,将这些工作表转换为PowerPoint幻灯片,从而利用PowerPoint的演示功能。
下面的示例沿用《Excel & Access Integration:With Office 2007》中的示例文档WorkbookToPowerPoint.xlsm,以演示这项技术。在该工作簿中,包含有四张工作表,分别包含四个区域(Asia、South America、United Kingdom、United States)的收入数据以及相应的图表分析(如下图所示)。
当然,这些工作表都是设计好了的,与PowerPoint中的幻灯片形式相同,每一张工作表代表一张幻灯片,分别演示一个区域的收入数据及分析情况。下面,我们将这些工作表转换为相应PowerPoint演示文档中的幻灯片。
首先,需要添加对Microsoft PowerPoint ╳╳ Object Library的引用(其中╳╳代表该对象库的版本号),如下图所示。
然后,在标准模块中输入下面的代码:
1: Sub WorkbooktoPowerPoint()
2:
3: '声明变量
4: Dim pp As PowerPoint.Application
5: Dim PPPres As PowerPoint.Presentation
6: Dim PPSlide As PowerPoint.Slide
7: Dim xlwksht As Excel.Worksheet
8: Dim MyRange As String
9: Dim MyTitle As String
10: Dim SlideCount As Integer
11:
12: '开启PowerPoint,添加新的演示文档并使其可见
13: Set pp = New PowerPoint.Application
14: Set PPPres = pp.Presentations.Add
15: pp.Visible = True
16:
17: '设置数据和标题的单元格区域
18: MyRange = "A1:I27"
19:
20: '开始循环每张工作表
21: For Each xlwksht In ActiveWorkbook.Worksheets
22: '设置每张幻灯片的标题
23: MyTitle = xlwksht.Range("C19").Value
24:
25: '复制单元格区域为图片
26: xlwksht.Range(MyRange).CopyPicture _
27: Appearance:=xlScreen, Format:=xlPicture
28:
29: '统计幻灯片并添加新幻灯片作为下一个可用的幻灯片号
30: SlideCount = PPPres.Slides.Count
31: Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutTitleOnly)
32: PPSlide.Select
33:
34: '粘贴图片并调整其位置
35: PPSlide.Shapes.Paste.Select
36: pp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
37: pp.ActiveWindow.Selection.ShapeRange.Top = 100
38:
39: '为该幻灯片添加标题并移到下一张工作表
40: PPSlide.Shapes.Title.TextFrame.TextRange.Text = MyTitle
41: Next xlwksht
42:
43: '激活PPT演示文档
44: pp.Activate
45:
46: '释放内存
47: Set PPSlide = Nothing
48: Set PPPres = Nothing
49: Set pp = Nothing
50:
51: End Sub
第4行至第10行声明了7个变量。其中变量pp代表PowerPoint应用程序对象,变量PPPres代表PowerPoint的演示文档(Presentation)对象,变量PPSlide代表PowerPoint幻灯片(Slide)对象,变量xlwksht代表Worksheet对象,变量MyRange是一个字符串变量用来存储和传递单元格区域,变量MyTitle是一个字符串变量用来存储代表幻灯片标题的字符串,变量SlideCount是用于计数的整型变量。
第13行创建一个PowerPoint对象的新实例,第14行添加新的演示文档,第15行设置Visible属性为True,使PowerPoint可见。
第18行将希望作为幻灯片内容的区域赋值给变量MyRange。
第21行开始遍历工作簿中的每张工作表。
第23行将工作表中单元格C19中的内容赋值给变量MyTitle,作为每张幻灯片的标题。
第26行和第27行使用CopyPicture方法将指定的单元格区域作为图片。
第31行使用Slide对象的Add方法在演示文档中添加新幻灯片,其中变量SlideCount+1指定添加的幻灯片的索引号,并使用ppLayoutTitleOnly参数确保所创建的幻灯片带有标题文本框。
第35行至第37行粘贴图片到当前幻灯片中,并使图片水平居中且与顶部垂直距离为100像素。
第40行为该幻灯片添加标题。
第47至第49行释放对象变量所占用的内存。
运行WorkbooktoPowerPoint过程后,结果如下图所示:

发表评论