ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 10974|回复: 17

[求助] VBA如何自动更新PPT中的图表数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-22 12:44 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请教各位大神:

背景:我需要根据excel搭建好的计算模板,把里面的数据贴入到已有的PPT模板中(更新表格里面的数据)。但由于PPT页码太多了,所以想用VBA的方法,批量更新PPT中的图表信息。

附件是PPT和EXCEL的模板,我看了下别人的分享,我可以写成下面代码那样,把excel的值赋予给ppt中的图。但表格怎么弄呢?此外,选择窗格中,我是不是只能用chart("表格4")这样写法,有没有像序列号的写法?

大神能帮忙提供一个框架的代码吗?我模仿着来写。谢谢了。


    Set pchtws1 = pReport.Slides(n).Shapes("chart1").Chart.ChartData.Workbook.Worksheets(1) ''修改范围
    pchtws1.Range("B1:I1").Value = sh.Range("C7:J7").Value
    pchtws1.Range("A2:A14").Value = sh.Range("B8:B" & bb).Value
    pchtws1.Range("B2:I14").Value = sh.Range("C8:J" & bb).Value

例子.rar (53.38 KB, 下载次数: 151)
窗格.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-22 15:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-6-22 15:52 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-22 17:34 | 显示全部楼层
刚刚又尝试了一下,只实现了把图表里面的数据更新的功能。
PPT中的表格更新还是没能实现。查了资料,发现表格是Table,属于slides.shape的子集。但就是找不到对应的资料写这段码。。

求大神指导啊,我不是伸手拿资料的,真的查不到啊。。。5555

参考资料(点击进去)

  1. Sub 测试()
  2.     Dim pp As PowerPoint.Application
  3.     Dim pReport As PowerPoint.Presentation
  4.     Dim pchtws1 As Worksheet
  5.     Dim pchtws2 As Worksheet
  6.     Dim wb As Workbook
  7.     Dim sh As Worksheet
  8.    
  9.     Application.ScreenUpdating = False
  10.    
  11.    
  12.     '选定Excel页码
  13.     Set wb = ThisWorkbook
  14.     Set sh = Sheets("P1") 'sh选定P1页
  15.    

  16.     '打开演示文稿模板
  17.     Set pp = CreateObject("powerpoint.application")
  18.     Set pReport = pp.ActivePresentation
  19.    
  20.     '更新图表7数据
  21.     Set pchtws1 = pReport.Slides(1).Shapes("图表 7").Chart.ChartData.Workbook.Worksheets(1) ''修改范围
  22.     pchtws1.Range("A1:B4").Value = sh.Range("A1:B4").Value

  23.      '更新图表8数据
  24.     Set pchtws1 = pReport.Slides(1).Shapes("图表 8").Chart.ChartData.Workbook.Worksheets(1) ''修改范围
  25.     pchtws1.Range("D1:E4").Value = sh.Range("D1:E4").Value
  26.    
  27.    
  28.    
  29.     Application.ScreenUpdating = True
  30. End Sub

复制代码



TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-22 19:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-22 23:53 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-23 00:10 | 显示全部楼层
刚刚模仿了别人写的内容,写了下面这段内容,并且也成功把excel的内容copy到了PPT上。

但问题是,我想把数据copy到已有的表格中,而不是新建一个表格。。。(如下图。)

难道我的Select有问题?


'更新表格2数据

    sh.Range("A1:B4").Copy
    pReport.Slides(1).Shapes("表格 1").Select
    pReport.Slides(1).Shapes.PasteSpecial DataType:=ppPasteDefault

Error.JPG

--------------------------------------------------------------------------------------------------------------------------------------------------
此外,突然多了个问题。链接:https://zhidao.baidu.com/question/1366368314523863379.html

我怎么判断Shape是1,还是2,还是其他呢?从哪个位置可得出来呢?是从窗格的顺序看出来的吗?


对象.JPG

窗格.JPG







TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-23 09:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
问了同事之后,才发现数据是不能在原有的Table上修改的,只能通过复制Excel,再黏贴(可以选择性黏贴,具体区别可以在录制宏下尝试,再回看代码区别。)

由于VBA是初学,所以很多地方写的很粗糙,请大神们点一点优化的地方。并且就一页PPT,代码写的那么长,如果能有折叠功能就好。(其实可以通过设置多个Sub 第一页,Sub 第二页这种分开,以后就好找点 。)

其中查到感觉比较有用的资料,有兴趣的同学可以查看:

http://club.excelhome.net/thread-1425161-1-1.html

http://www.exceloffice.net/archives/1275

https://blog.csdn.net/olivesun88/article/details/50980698

http://www.exceloffice.net/archives/2091

等等,其他太多了。

不多说,先上代码和压缩测试包:

例子.rar (65.25 KB, 下载次数: 588)


  1. Sub 第一页()
  2.     Dim pp As PowerPoint.Application
  3.     Dim pReport As PowerPoint.Presentation
  4.     Dim pchtws1 As Worksheet
  5.     Dim pchtws2 As Worksheet
  6.     Dim wb As Workbook
  7.     Dim sh As Worksheet
  8.    
  9.     Application.ScreenUpdating = False
  10.    
  11.    
  12.     '选定Excel页码
  13.     Set wb = ThisWorkbook
  14.     Set sh = Sheets("P1") 'sh选定P1页
  15.    

  16.     '打开演示文稿模板
  17.     Set pp = CreateObject("powerpoint.application")
  18.     Set pReport = pp.ActivePresentation
  19.    
  20.     '更新图表7数据
  21.     Set pchtws1 = pReport.Slides(1).Shapes("图表 7").Chart.ChartData.Workbook.Worksheets(1) ''修改范围
  22.     pchtws1.Range("A1:B4").Value = sh.Range("A1:B4").Value

  23.      '更新图表8数据
  24.     Set pchtws1 = pReport.Slides(1).Shapes("图表 8").Chart.ChartData.Workbook.Worksheets(1) ''修改范围
  25.     pchtws1.Range("D1:E4").Value = sh.Range("D1:E4").Value
  26.    
  27.    
  28.     '更新表格1数据
  29.    
  30.    
  31.     sh.Range("A1:B4").Select
  32.    
  33.     Selection.Copy
  34.    
  35.     pReport.Slides(1).Shapes(1).Select
  36.     pReport.Slides(1).Shapes.PasteSpecial ppPasteDefault
  37.    
  38.      Dim h, w, l, t
  39.      
  40.      'cm制
  41.      
  42.      h = 3
  43.      w = 13
  44.      l = 3.1
  45.      t = 12.34
  46.      
  47. '    h = sh.Range("G1").Value
  48. '    w = sh.Range("G2").Value
  49. '    l = sh.Range("G3").Value
  50. '    t = sh.Range("G4").Value

  51.     With pp.ActiveWindow.Selection.ShapeRange
  52.    
  53.     'pt制,换算单位:pt = cm * 72 / 2.54
  54.    
  55.         .Height = h * 72 / 2.54
  56.         .Width = w * 72 / 2.54
  57.         .Left = l * 72 / 2.54
  58.         .Top = t * 72 / 2.54
  59.     End With
  60.    
  61.    
  62.     '更新表格2数据
  63.    
  64.    
  65.     sh.Range("D1:E4").Select
  66.    
  67.     Selection.Copy
  68.    
  69.     pReport.Slides(1).Shapes(1).Select
  70.     pReport.Slides(1).Shapes.PasteSpecial ppPasteDefault
  71.    
  72.      
  73.      'cm制
  74.      
  75.      'h = 0.03
  76.      'w = 0.03
  77.      l = 21.59
  78.      t = 12.34
  79.      
  80. '    h = sh.Range("G1").Value
  81. '    w = sh.Range("G2").Value
  82. '    l = sh.Range("G3").Value
  83. '    t = sh.Range("G4").Value

  84.     With pp.ActiveWindow.Selection.ShapeRange
  85.    
  86.     'pt制,换算单位:pt = cm * 72 / 2.54
  87.    
  88.         '.Height = h * 72 / 2.54
  89.         '.Width = w * 72 / 2.54
  90.         .Left = l * 72 / 2.54
  91.         .Top = t * 72 / 2.54
  92.     End With
  93.    
  94.     Application.ScreenUpdating = True
  95.    
  96.    
  97. End Sub
复制代码





TA的精华主题

TA的得分主题

发表于 2019-7-19 22:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-26 14:23 | 显示全部楼层
hsl992 发表于 2019-6-23 00:10
刚刚模仿了别人写的内容,写了下面这段内容,并且也成功把excel的内容copy到了PPT上。

但问题是,我想把 ...

楼主,ppt右边那部分有图表编号序列的部分怎么调出来的。。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 22:41 , Processed in 0.044802 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表