用宏实现从Excel中复制图片自动生成PPT
VBA是基于Basic语言和宿主程序(Excel、Word、Power point、Access等)的应用程序。采用VBA编写的宏(macro)工具可以进行一些重复性工作。比如可以通过宏工具从Excel文件中读取指定数据并输出到要求文件中,可以对具有某些相同特征的Excel文件进行比较、打印,可以让一大堆的图片自动生成PPT。宏,类似于dos中的批处理文件,Linux中的shell脚本,通过宏工具可以实现办公自动化,大大提高工作效率。
本文编写了一个可以将Excel中的图片(chart)复制到power point中生成PPT的宏。
功能:将Excel中的图片复制到power point中生成PPT,并对图片进行调整以适应窗口大小。
需求:
1 PPT模板文件。本例名字为template. pot,放在和宏同一级目录的文件夹下面。
2 已经生成图片的Excel文件,Excel#.xls,如第一个Excel文件名字为Excel1.xls,本例中excel文件至少有5个chart。
3 本文提供的宏程序。
PPT模板、Excel文件和包含宏程序的PPT文件在同一级目录下
步骤:
1 将power point的安全性调整为中或者低。路径:选项----安全性----宏安全性。
2 启动power point,通过:工具----宏----Visual Basic编辑器或者快捷键Alt+F8启动VB编辑器。
3 插入模块,将本文代码拷贝到模块中,保存。
4 运行宏。
'******************** Code Start **************************代码下载
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
' Function: Copy chart from excel to power point.
' Vincent From www.veryword.com
Sub AutoPPT()
Dim p_path As String
p_path = ActivePresentation.Path
Dim Count As Integer
Dim k As Integer
Dim LoopName As Variant
LoopName = Array("1", "2", "3", "4", "5")
Set PPT = New PowerPoint.Application
PPT.Visible = True
Count = InputBox("Please input the number of excel files.")
Set newPres = Presentations.Add(True)
newPres.SaveAs "PPT"
For k = 1 To 5
Dim objExcel As Object
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.Workbooks.Open (p_path & "\Excel" & Count & ".xls")
objExcel.Charts(6 - k).Activate
objExcel.activeworkbook.Save
objExcel.activeworkbook.Close
ActivePresentation.ApplyTemplate FileName:=p_path & "\template.pot"
ActivePresentation.Slides.Add 1, ppLayoutBlank
ActivePresentation.Slides(1).Select
ActiveWindow.Selection.SlideRange.Shapes.AddOLEObject(Left:=75#, Top:=125#, Width:=750#, Height:=450#, FileName:=p_path & "\Excel" & Count & ".xls", Link:=msoFalse).Select
With ActiveWindow.Selection.ShapeRange
.ScaleWidth 0.78, msoFalse, msoScaleFromTopLeft
.ScaleHeight 0.78, msoFalse, msoScaleFromTopLeft
End With
ActiveWindow.Selection.Unselect
ActiveWindow.Selection.SlideRange.Layout = ppLayoutTitleOnly
ActiveWindow.Selection.SlideRange.Shapes.SelectAll
ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Select
ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Characters(Start:=1, Length:=0).Select
With ActiveWindow.Selection.TextRange
.Text = "Excel" & Count & " " & "Chart" & LoopName(5 - k)
With .Font
.NameAscii = "Arial"
.Size = 40
.Bold = msoFalse
.Italic = msoFalse
.Underline = msoFalse
.Shadow = msoFalse
.Emboss = msoFalse
.BaselineOffset = 0
.AutoRotateNumbers = msoFalse
.Color.SchemeColor = ppTitle
End With
End With
ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Characters(Start:=10, Length:=8).Select
ActiveWindow.Selection.TextRange.Font.Size = 40
ActiveWindow.Selection.Unselect
Next k
newPres.Save
End Sub
赞……office用到这个程度才是真正的艺术……
我也是被“逼”的呵呵。
不过用了宏,如果是重复性工作真的可以很大的提高效率 :)
我仍然处于几乎不用Excel的程度-__-!!
说明你现在的工作状态还不错 ^_^,要天天对着电脑处理Excel也不是什么好事啊。。
学习中。。
office要用好真不简单。
你好,看到你对宏的运用,很是佩服你。
我最近遇到一个难题,是有关PPT文件中如何用宏,对不同页面插入不同的图片。
如果你懂的话,可以帮我吗?谢谢
我的联系方式:
[email protected]
82331350
你好,我觉得在PPT中插入图片的宏网上应该有现成的代码,你可以搜索下。
宏其实对我也是很头疼的事,比如在一个slide中插入图片数量和大小不一样时候的调整就够麻烦的,目前以我的水平也只能改改代码,所以只能建议你找一本参考书了。