ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

如何用vba把excel转换成ppt ppt中每页7行,字体尽量最大化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-23 09:00 | 显示全部楼层 |阅读模式
如何用vba把excel转换成ppt

ppt中每页7行表格,字体尽量最大化,
用vba把excel转换成ppt.7z (8.83 KB, 下载次数: 13)

TA的精华主题

TA的得分主题

发表于 2024-9-23 10:07 | 显示全部楼层
e........

用vba把excel转换成ppt.zip

18.22 KB, 下载次数: 8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-23 10:23 | 显示全部楼层
本帖最后由 zzpsx 于 2024-9-23 10:41 编辑

谢谢高手,不过原excel中有4列表格,转换好的ppt上好像只有两列,还缺2列。
还有,上面的slide 1不要,尽量让表格撑满整个ppt页面。

TA的精华主题

TA的得分主题

发表于 2024-9-23 10:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zzpsx 发表于 2024-9-23 10:23
谢谢高手,不过原excel中有三列表格,转换好的ppt上好像只有两列,还缺一列。
还有,上面的slide 1不要, ...

随手一改就行,除非你啥也不会

用vba把excel转换成ppt.zip

19.28 KB, 下载次数: 11

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-23 13:43 | 显示全部楼层
谢谢高手,我修改到以下效果了,代码在图下面。如何继续修改代码,删除ppt中的标题文本框,让正文文本框最大化适应ppt页面,并让ppt中的表格按照文字长短自动调整列宽,

image.png


Const ppLayoutTitle = 1
Const ppLayoutText = 2

Sub ExcelToPPT()
    Dim data_array As Variant
    Dim lstRow As Integer
    Dim slides_count As Integer
    Dim objPPT As Object
    Dim objPresentation As Object
    Dim pptSlide As Object
    Dim objTbl As Object
    Dim lRow As Byte
    Dim lCol As Byte
    Dim i As Integer

    With Sheet1
        lstRow = .Range("D1048576").End(xlUp).Row ' 假设数据直到列D
        data_array = .Range("A1").Resize(lstRow, 4).Value ' 读取A、B、C、D四列数据
    End With

    slides_count = Application.Ceiling(lstRow / 7, 1)
    Set objPPT = CreateObject("PowerPoint.Application")
    objPPT.Visible = True
    Set objPresentation = objPPT.Presentations.Add

    With objPresentation
        .Slides.Add Index:=1, Layout:=ppLayoutTitle
        For i = 1 To slides_count
            Set pptSlide = .Slides.Add(i, ppLayoutText)
            Set tbl = pptSlide.Shapes.AddTable(7, 4, 65, 145, 830, 310) ' 创建4列的表格
            Set objTbl = pptSlide.Shapes(3).Table
            With objTbl
                For lRow = 1 To 7
                    startRow = (i - 1) * 7 + lRow
                    If startRow <= lstRow Then
                        For lCol = 1 To 4 ' 遍历4列
                            With .cell(lRow, lCol).Shape.TextFrame.TextRange
                                .Font.Name = "Tahoma(Body)"
                                .Font.Size = 32
                                .Font.Color = RGB(64, 65, 70)
                                .Text = data_array(startRow, lCol)
                            End With
                        Next
                    End If
                Next
            End With
        Next i
        .SaveAs ThisWorkbook.Path & "\Sample.pptx"
    End With
End Sub



TA的精华主题

TA的得分主题

发表于 2024-9-23 15:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zzpsx 发表于 2024-9-23 13:43
谢谢高手,我修改到以下效果了,代码在图下面。如何继续修改代码,删除ppt中的标题文本框,让正文文本框最 ...

不支持自适应列宽,只能单独设置了

用vba把excel转换成ppt.zip

19.99 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2024-9-23 17:27 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2024-9-23 18:42 编辑
zzpsx 发表于 2024-9-23 13:43
谢谢高手,我修改到以下效果了,代码在图下面。如何继续修改代码,删除ppt中的标题文本框,让正文文本框最 ...


'表格使用复制粘贴比较合理

Sub exceltoppt()
    Dim rng As Range, ppt As Object
    Dim pre As Object, sld As Object
    Dim x%, y%, i%, j%, s$, k&, t As Date
   
    Set rng = Sheet1.UsedRange
    r = rng.Rows.Count '行数
    c = rng.Columns.Count '列数
    y = r Mod 7 '余数
    If y Then k = 1 Else k = 0
    x = r \ 7 + k '页数
   
    Set ppt = CreateObject("PowerPoint.Application")
    ppt.Activate '激活
    Set pre = ppt.Presentations.Add '新建
    t = Timer '延时
    While Timer < t + 1: DoEvents: Wend
    ppt.Windows(1).View.Zoom = 60 '缩放
    ppt.ActiveWindow.Panes(1).Activate
   
    For i = x To 1 Step -1 '倒循环
        Set sld = pre.slides.Add(1, 12) '空白页
        If i < x Or y = 0 Then k = 7 Else k = y
        j = (i - 1) * 7
        Application.CutCopyMode = False '剪贴板
        Range(Cells(j + 1, 1), Cells(j + k, c)).Copy '复制表
        With sld.Shapes '设置表
            .PasteSpecial ppPasteDefault '粘贴表
            .Range.Left = 0 '左边距
            .Range.Top = 0 '上边距
            .Range.Table.ScaleProportionally 3.25 '缩放比
        End With
    Next

    t = Timer '延时等待
    While Timer < t + 1: DoEvents: Wend
    pre.SaveAs ThisWorkbook.Path & "\words2.pptx" '保存文件
    Set sld = Nothing '释放对象
    Set pre = Nothing
    Set ppt = Nothing
    Set rng = Nothing

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-23 18:38 | 显示全部楼层
lss001 发表于 2024-9-23 17:27
'表格使用复制粘贴比较合理

Sub exceltoppt()

image.png

TA的精华主题

TA的得分主题

发表于 2024-9-23 18:40 来自手机 | 显示全部楼层
zzpsx 发表于 2024-9-23 18:38

变一下改一下
Dim pre As Object, sld As Object
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 02:48 , Processed in 0.045785 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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