1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] PPT VBA实现【多文件合并】代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-15 12:07 | 显示全部楼层 |阅读模式
PPT VBA:多文件合并

  1. Sub 合并PPT()
  2.     Dim t0 As Single: t0 = Timer
  3.     Dim fdlog As FileDialog
  4.     Dim prs As Presentation
  5.     Dim prs1 As Presentation
  6.     Dim sld As Slide
  7.     Dim file
  8.     Dim i As Integer
  9.    
  10.     Set prs = Presentations.Add
  11.     Set fdlog = Application.FileDialog(msoFileDialogFilePicker)
  12.     With fdlog
  13.         .AllowMultiSelect = True
  14.         With .Filters
  15.             .Clear
  16.             .Add "PPT文件", "*.ppt*;*.ppa*;*.pps*", 1
  17.             .Add "所有文件", "*.*", 2
  18.         End With
  19.         If .Show Then
  20.             i = 0
  21.             For Each file In .SelectedItems
  22.                 Set prs1 = Presentations.Open(CStr(file))
  23.                 For Each sld In prs1.Slides
  24.                     sld.Copy
  25.                     prs.Slides.Paste prs.Slides.Count + 1
  26.                 Next
  27.                 prs1.Close
  28.                 i = i + 1
  29.             Next
  30.         End If
  31.     End With
  32.    
  33.     Set fdlog = Nothing
  34.     Set prs = Nothing
  35.     Set prs1 = Nothing
  36.     If i > 0 Then
  37.         MsgBox Format(i, "完成,共合并了0个文件。") & Format(Timer - t0, "用时0.000秒。")
  38.     End If
  39. End Sub
复制代码


评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-2-20 19:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常好的代码,合并得非常流畅。
如果能跳过选择文件位置,而直接合并当前文件夹内的所有ppt,那就更好了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-20 19:40 | 显示全部楼层
zzpsx 发表于 2023-2-20 19:01
非常好的代码,合并得非常流畅。
如果能跳过选择文件位置,而直接合并当前文件夹内的所有ppt,那就更好了 ...

谢谢。因为选择多文件合并通用性更强,就没用文件夹合并。

TA的精华主题

TA的得分主题

发表于 2023-2-20 19:44 | 显示全部楼层
守候_CJ 发表于 2023-2-20 19:40
谢谢。因为选择多文件合并通用性更强,就没用文件夹合并。

可否上一个直接合并文件夹内所有ppt的代码?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-20 20:56 | 显示全部楼层
补充:选择文件夹,合并里面所有PPT文件(即所有后缀为.ppt*/.ppa*/.pps*的文件

  1. Sub 合并PPT_按文件夹()
  2.     Dim t0 As Single: t0 = Timer
  3.     Dim fdlog As FileDialog
  4.     Dim prs As Presentation
  5.     Dim prs1 As Presentation
  6.     Dim sld As Slide
  7.     Dim file
  8.     Dim i As Integer
  9.    
  10.     Set prs = Presentations.Add
  11.     Set fdlog = Application.FileDialog(msoFileDialogFolderPicker)
  12.     With fdlog
  13.         If .Show Then
  14.             i = 0
  15.             Dim fso As Object
  16.             Dim extentionname
  17.             
  18.             Set fso = CreateObject("Scripting.FileSystemObject")
  19.             file = Dir(CStr(.SelectedItems(1) & ""), vbNormal)
  20.             extentionname = fso.getextensionname(file)
  21.             Do While Not file = ""
  22.                 If extentionname Like "pp[tas]*" Then
  23.                     Set prs1 = Presentations.Open(.SelectedItems(1) & "" & CStr(file))
  24.                     For Each sld In prs1.Slides
  25.                         sld.Copy
  26.                         prs.Slides.Paste prs.Slides.Count + 1
  27.                     Next
  28.                     prs1.Close
  29.                     i = i + 1
  30.                 End If
  31.                 file = Dir
  32.             Loop
  33.         End If
  34.     End With
  35.    
  36.     Set fdlog = Nothing
  37.     Set prs = Nothing
  38.     Set prs1 = Nothing
  39.     Set fso = Nothing
  40.     If i > 0 Then
  41.         MsgBox Format(i, "完成,共合并了0个文件。") & Format(Timer - t0, "用时0.000秒。")
  42.     End If
  43. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-20 20:59 | 显示全部楼层
zzpsx 发表于 2023-2-20 19:44
可否上一个直接合并文件夹内所有ppt的代码?

可以看评论补充

TA的精华主题

TA的得分主题

发表于 2023-2-21 13:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
守候_CJ 发表于 2023-2-20 20:56
补充:选择文件夹,合并里面所有PPT文件(即所有后缀为.ppt*/.ppa*/.pps*的文件)

我的电脑上好像还是没有跳过 选择这一步。

TA的精华主题

TA的得分主题

发表于 2023-5-25 19:30 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-5-26 10:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-9-14 09:45 | 显示全部楼层
按文件夹合并代码,补充下,大家可以直接用。
双引号中间没加斜杠,找不到文件。
Sub 合并PPT_按文件夹()
    Dim t0 As Single: t0 = Timer
    Dim fdlog As FileDialog
    Dim prs As Presentation
    Dim prs1 As Presentation
    Dim sld As Slide
    Dim file
    Dim i As Integer
    Set prs = Presentations.Add
    Set fdlog = Application.FileDialog(msoFileDialogFolderPicker)
    With fdlog
        If .Show Then
            i = 0
            Dim fso As Object
            Dim extentionname
            Set fso = CreateObject("Scripting.FileSystemObject")
            file = Dir(CStr(.SelectedItems(1) & "\"), vbNormal)
            Debug.Print .SelectedItems(1)
            extentionname = fso.getextensionname(file)
            Do While Not file = ""
                If extentionname Like "pp[tas]*" Then
                    Set prs1 = Presentations.Open(.SelectedItems(1) & "\" & CStr(file))
                    For Each sld In prs1.Slides
                        sld.Copy
                        prs.Slides.Paste prs.Slides.Count + 1
                    Next
                    prs1.Close
                    i = i + 1
                End If
                file = Dir
            Loop
        End If
    End With
    Set fdlog = Nothing
    Set prs = Nothing
    Set prs1 = Nothing
    Set fso = Nothing
    If i > 0 Then
        MsgBox Format(i, "完成,共合并了0个文件。") & Format(Timer - t0, "用时0.000秒。")
    End If
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

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

GMT+8, 2025-4-23 16:41 , Processed in 0.028106 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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