VBA根据Excel内容快速创建PPT

13 篇文章 0 订阅
1 篇文章 0 订阅

示例需求:根据Excel中选中的单元格内容(3列)如下图所示,在已打卡的PowerPoint文件中创建页面。

新增PPT Slide页面使用第二个模板页面,其中包含两个文本占位符,和一个图片占位符。将Excel选中区域中前两列写入文字占位符,第3列图片粘贴至图片占位符。

示例代码如下。

Sub Excel2PPT()
    Dim xlDataRow As Range
    Dim pptApp As PowerPoint.Application
    Dim pptPres As PowerPoint.Presentation
    Dim pptSld As PowerPoint.Slide
    Dim objDic As Object
    Dim xlShp As Shape, i As Integer
    Dim sCellAddress As String
    Set pptApp = GetObject(, "PowerPoint.Application")
    Set pptPres = pptApp.ActivePresentation
    If TypeName(Selection) = "Range" Then
        Set objDic = CreateObject("scripting.dictionary")
        For i = 1 To ActiveSheet.Shapes.Count
            Set xlShp = ActiveSheet.Shapes(i)
            If Not Application.Intersect(xlShp.TopLeftCell, Selection) Is Nothing Then
                Set objDic(xlShp.TopLeftCell.Address) = xlShp
            End If
        Next
        For Each xlDataRow In Selection.Rows
            Set pptSld = pptPres.Slides.AddSlide(pptPres.Slides.Count + 1, pptPres.SlideMaster.CustomLayouts(2))
            pptSld.Select
            With pptSld.Shapes
                .Placeholders(1).TextFrame.TextRange.Text = xlDataRow.Cells(1, 1)
                .Placeholders(2).TextFrame.TextRange.Text = xlDataRow.Cells(1, 2)
                sCellAddress = xlDataRow.Cells(1, 3).Address
                If objDic.exists(sCellAddress) Then
                    objDic(sCellAddress).Copy
                    .Placeholders(3).Select
                    .PasteSpecial DataType:=ppPasteMetafilePicture
                End If
            End With
        Next xlDataRow
    End If
End Sub

【代码解析】
第9行代码获取PowerPoint应用程序。
第10行代码获取PowerPoint应用程序中活动Presentation对象。
第11行代码判断Excel中Selection是否为Range对象,如果选中了其他对象(例如Shape对象),后续代码会产生运行时错误。
第12行代码创建字典对象。
第13~18行代码循环遍历活动工作表中的Shape对象,将选中区域中的Shape对象保存在字典对象中。
第14行代码获取Shape对象。
第15行代码判断Shape对象的锚点单元格(即左上角单元格)是否在选中区域中。
如果满足条件,第16行代码将Shape对象保存在字典对象中,其中锚点单元格的引用地址作为字典的键(Key)。
第19~32行代码循环遍历选中区域的数据行。
第20行代码根据第2个模板页面创建一个新的Slide页面。
第21行代码选中新增的页面。
第23行代码将选中区域中第一列内容写入第一个占位符(Placeholder)中。
第24行代码将选中区域中第2列内容写入第2个占位符(Placeholder)中。
第25行代码获取第3列的单元格引用地址。
第26行代码判断第3列的单元格引用地址是否存在于字典的键中,如果不存在,说明该单元格中没有Shape对象。
如果存在,第24行代码拷贝该单元格中的Shape对象。
第28行代码选中图片占位符。
第29行代码粘贴图片。

运行代码效果如下图所示。

微软在线文档:

Shapes.PasteSpecial method (PowerPoint)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将 Excel 中的图表复制到 PowerPoint 中的 VBA 代码示例: ```vba Sub CopyChartToPPT() Dim pptApp As PowerPoint.Application Dim pptPres As PowerPoint.Presentation Dim pptSlide As PowerPoint.Slide Dim pptShape As PowerPoint.Shape Dim chartObj As ChartObject Dim chartDataRange As Range Dim chartRangeAddress As String '创建 PowerPoint 实例 Set pptApp = New PowerPoint.Application '打开 PowerPoint 文件或新建一个空白文档 Set pptPres = pptApp.Presentations.Open("C:\ppt.pptx") '新建一个幻灯片 Set pptSlide = pptPres.Slides.Add(1, ppLayoutBlank) '设置 Excel 工作簿和工作表 Set chartObj = ActiveSheet.ChartObjects("Chart 1") Set chartDataRange = chartObj.Chart.ChartData.Workbook.Worksheets(1).Range("A1:B10") chartRangeAddress = chartDataRange.Address '将图表复制到剪贴板 chartObj.Copy '在 PowerPoint 中粘贴图表 Set pptShape = pptSlide.Shapes.PasteSpecial(DataType:=ppPasteChart, Link:=msoFalse) '调整图表位置和大小 pptShape.Left = 100 pptShape.Top = 100 pptShape.Width = 400 pptShape.Height = 300 '保存 PowerPoint 文件并退出 pptPres.Save pptPres.Close pptApp.Quit '释放对象 Set pptShape = Nothing Set pptSlide = Nothing Set pptPres = Nothing Set pptApp = Nothing Set chartDataRange = Nothing Set chartObj = Nothing End Sub ``` 其中,需要设置 chartObj 变量为要复制的图表对象,chartDataRange 变量为图表数据的范围,chartRangeAddress 变量为图表数据范围的地址。在将图表粘贴到 PowerPoint 中后,可以根据需要调整图表的位置和大小。最后需要释放对象以释放内存。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值