ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创并分享]PPT 转 WORD

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-3-9 12:06 | 显示全部楼层
konggs 发表于 2005-9-11 11:01
顶,老大的,我相信肯定是好东东。只是平时很少用PPt,如果以后用的话,老大的这个是最好不过的了。见意:加 ...

谢谢楼主分享

TA的精华主题

TA的得分主题

发表于 2015-4-19 08:44 | 显示全部楼层
赞一个!先收藏需要时提出!

TA的精华主题

TA的得分主题

发表于 2017-4-18 10:37 | 显示全部楼层
整理一下,便于阅读和借用。
Option Explicit
Sub WritePptToWord()
Dim aSlide As Slide, MyDoc As New Word.Document, MyRange As Word.Range
Dim aTable As Table, aShape As Shape, TablesCount As Integer, ShapesCount As Integer
On Error Resume Next '忽略错误
With MyDoc
   .Application.Visible = False '隐藏WORD程序窗口
   .Application.ScreenUpdating = False '关闭WORD屏幕更新以加快运行
   For Each aSlide In ActivePresentation.Slides '遍历幻灯片
       For Each aShape In aSlide.Shapes '遍历图层对象
           Set MyRange = .Range(.Content.End - 1, .Content.End - 1)
           Select Case aShape.Type 'Case 图层类型 '自选图形,文本框等
              Case msoAutoShape, msoPlaceholder, msoTextBox
                  If aShape.TextFrame.HasText Then '如果文本框中包含文字
                     aShape.TextFrame.TextRange.Copy '将其中的文字区域复制
                     MyRange.Paste '粘贴
                  End If 'Case为图表对象\图片对象等时
              Case msoEmbeddedOLEObject, msoLinkedOLEObject, msoLinkedPicture, msoOLEControlObject, msoPicture
                  aShape.Copy '复制 '选择性粘贴为图片格式
                  MyRange.PasteSpecial DataType:=wdPasteMetafilePicture
                  ShapesCount = .Shapes.Count '取得文档中的图形数量
                  With .Shapes(ShapesCount)
                       .LockAspectRatio = msoFalse '不锁定纵横比
                       .Width = Word.CentimetersToPoints(14) '宽为14厘米
                       .Height = Word.CentimetersToPoints(6) '高为6厘米
                       .Left = wdShapeCenter '居中
                       .ConvertToInlineShape '转换为嵌入式图片对象,以利排版
                  End With
                  .Content.InsertAfter Chr(13) '插入一个段落标记
              Case msoTable 'Case表格时
                  aShape.Copy '复制
                  MyRange.Paste '粘贴
                  TablesCount = .Tables.Count '取得文档中的表格数量
                  With .Tables(TablesCount) '表格对象
                       .PreferredWidthType = wdPreferredWidthPercent '百分比
                       .PreferredWidth = 100 '100%页面宽度
                       .Range.Font.Size = 11 '字体大小
                  End With
                  .Content.InsertAfter Chr(13)
         End Select
      Next
   Next '替换白色字体为自动色(黑色)
        With .Content.Find
             .ClearFormatting '清除格式
             .Format = True '格式查找
             .Font.Color = wdColorWhite '白色字体
             .Replacement.Font.Color = wdColorAutomatic '自动色
             .Execute Replace:=wdReplaceAll '全部替换
        End With
   MsgBox "PPT转换为WORD文档已经结束,请校对和进一步编辑!", vbInformation + vbOKOnly, "ExcelHome/ShouRou"
   .Application.Visible = True '显示Word应用程序
   .Application.ScreenUpdating = True '恢复WORD的屏幕更新
End With
End Sub
'----------------------
Sub Auto_Open() '加载时在常用工具栏中添加一个命令
Dim MyControl As CommandBarControl
On Error Resume Next '忽略错误 '预防性删除
Application.CommandBars("Standard").Controls("PPTtoWord").Delete '在常用工具栏最前面添加一个按钮
Set MyControl = Application.CommandBars("Standard").Controls.Add(Before:=1)
With MyControl
.Caption = "PPTtoWord" '标题
.FaceId = 567 '图标
.Enabled = True '可用
.Visible = True '显示
.Width = 100 '宽度
.OnAction = "WriteToWord" '运行指定的过程
.Style = msoButtonIconAndCaption '显示的方式图标+标题
End With
End Sub
'----------------------
Sub Auto_Close() '卸载时删除此命令
On Error Resume Next
Application.CommandBars("Standard").Controls("PPTtoWord").Delete
End Sub
'----------------------

TA的精华主题

TA的得分主题

发表于 2017-4-18 10:55 | 显示全部楼层
守柔 发表于 2005-9-12 16:38
请HPW网友运行以下代码:
我不想对于一楼的贴子进行修改,因为它的适用性、通用性也许更好一些。
Opt ...

也进行重新排版,便于阅读、理解、调用。
谢谢守版的奉献。
Sub WriteToWord()
Dim aSlide As Slide, MyDoc As New Word.Document, MyRange As Word.Range
Dim aTable As Table, aShape As Shape, TablesCount As Integer, ShapesCount As Integer
Dim i As Word.Paragraph
On Error Resume Next '忽略错误
With MyDoc
     .Application.Visible = False '隐藏WORD程序窗口
     .Application.ScreenUpdating = False '关闭WORD屏幕更新以加快运行
     For Each aSlide In ActivePresentation.Slides '遍历幻灯片
         For Each aShape In aSlide.Shapes '遍历图层对象
             Set MyRange = .Range(.Content.End - 1, .Content.End - 1)
                 Select Case aShape.Type 'Case 图层类型 '自选图形,文本框等
                        Case msoAutoShape, msoPlaceholder, msoTextBox
                        If aShape.TextFrame.HasText Then '如果文本框中包含文字
                             aShape.TextFrame.TextRange.Copy '将其中的文字区域复制
                             MyRange.Paste '粘贴
                           With MyRange
                               .ParagraphFormat.Alignment = wdAlignParagraphLeft '居左
                                For Each i In MyRange.Paragraphs
                                    If i.Range.Font.Size >= 16 Then
                                       i.Range.Font.Size = 14 '设置为14号字体
                                    Else
                                       i.Range.Font.Size = 12 '设置为12号字体
                                    End If
                                Next
                          End With
                        End If
                        Case msoPicture '图片时
                                aShape.Copy '复制 '选择性粘贴为图片格式
                                MyRange.PasteSpecial DataType:=wdPasteMetafilePicture
                                ShapesCount = .Shapes.Count '取得文档中的图形数量
                             With .Shapes(ShapesCount)
                                  .LockAspectRatio = msoFalse '不锁定纵横比
                                  .Width = Word.CentimetersToPoints(14) '宽为14厘米
                                  .Height = Word.CentimetersToPoints(6) '高为6厘米
                                  .Left = wdShapeCenter '居中
                                  .ConvertToInlineShape '转换为嵌入式图片对象,以利排版
                            End With
                                  .Content.InsertAfter Chr(13) '插入一个段落标记
                       'Case为图表对象和嵌入式对象等时
                       Case msoEmbeddedOLEObject, msoLinkedOLEObject, msoLinkedPicture, msoOLEControlObject
                               aShape.Copy '复制
                               MyRange.PasteSpecial DataType:=wdPasteOLEObject
                               ShapesCount = .Shapes.Count '取得文档中的图形数量
                            With .Shapes(ShapesCount)
                                 .LockAspectRatio = msoFalse '不锁定纵横比
                                 .Width = Word.CentimetersToPoints(14) '宽为14厘米
                                 .Height = Word.CentimetersToPoints(6) '高为6厘米
                                 .Left = wdShapeCenter '居中
                                 .ConvertToInlineShape '转换为嵌入式图片对象,以利排版
                            End With
                                 .Content.InsertAfter Chr(13) '插入一个段落标记
                            Case msoTable 'Case表格时
                               aShape.Copy '复制 MyRange.Paste '粘贴
                               TablesCount = .Tables.Count '取得文档中的表格数量
                            With .Tables(TablesCount) '表格对象
                                 .PreferredWidthType = wdPreferredWidthPercent '百分比
                                 .PreferredWidth = 100 '100%页面宽度
                                 .Range.Font.Size = 11 '字体大小
                            End With
                            .Content.InsertAfter Chr(13) '插入空白段落
               End Select
        Next '如果不是最后一个幻灯片,是插入分节符
    If aSlide.SlideIndex < ActivePresentation.Slides.Count Then
       .Content.InsertAfter Chr(12)
       .UndoClear '清空撤消,以减少内存支出 Next '替换白色字体为自动色(黑色)
          With .Content.Find
               .ClearFormatting '清除格式
               .Format = True '格式查找
               .Font.Color = wdColorWhite '白色字体
               .Replacement.Font.Color = wdColorAutomatic '自动色
               .Execute Replace:=wdReplaceAll '全部替换
          End With
      MsgBox "PPT转换为WORD文档已经结束,请校对和进一步编辑!", vbInformation + vbOKOnly, "ExcelHome/ShouRou"
      .Application.Visible = True '显示Word应用程序
      .Application.ScreenUpdating = True '恢复WORD的屏幕更新
End With
End Sub '----------------------

TA的精华主题

TA的得分主题

发表于 2018-11-14 11:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢楼主分享

TA的精华主题

TA的得分主题

发表于 2020-1-8 16:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-1-17 17:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我是菜鸟的菜鸟,不会用

TA的精华主题

TA的得分主题

发表于 2020-1-22 15:53 | 显示全部楼层
weiyingde 发表于 2017-4-18 10:55
也进行重新排版,便于阅读、理解、调用。
谢谢守版的奉献。
Sub WriteToWord()

你的代码是否少了两行?我加上这两行运行结束后为什么没有出现Word文档呢?
Sub WriteToWord()
Dim aSlide As Slide, MyDoc As New Word.Document, MyRange As Word.Range
Dim aTable As Table, aShape As Shape, TablesCount As Integer, ShapesCount As Integer
Dim i As Word.Paragraph
On Error Resume Next '忽略错误
With MyDoc
     .Application.Visible = False '隐藏WORD程序窗口
     .Application.ScreenUpdating = False '关闭WORD屏幕更新以加快运行
     For Each aSlide In ActivePresentation.Slides '遍历幻灯片
         For Each aShape In aSlide.Shapes '遍历图层对象
             Set MyRange = .Range(.Content.End - 1, .Content.End - 1)
                 Select Case aShape.Type 'Case 图层类型 '自选图形,文本框等
                        Case msoAutoShape, msoPlaceholder, msoTextBox
                        If aShape.TextFrame.HasText Then '如果文本框中包含文字
                             aShape.TextFrame.TextRange.Copy '将其中的文字区域复制
                             MyRange.Paste '粘贴
                           With MyRange
                               .ParagraphFormat.Alignment = wdAlignParagraphLeft '居左
                                For Each i In MyRange.Paragraphs
                                    If i.Range.Font.Size >= 16 Then
                                       i.Range.Font.Size = 14 '设置为14号字体
                                    Else
                                       i.Range.Font.Size = 12 '设置为12号字体
                                    End If
                                Next
                          End With
                        End If
                        Case msoPicture '图片时
                                aShape.Copy '复制 '选择性粘贴为图片格式
                                MyRange.PasteSpecial DataType:=wdPasteMetafilePicture
                                ShapesCount = .Shapes.Count '取得文档中的图形数量
                             With .Shapes(ShapesCount)
                                  .LockAspectRatio = msoFalse '不锁定纵横比
                                  .Width = Word.CentimetersToPoints(14) '宽为14厘米
                                  .Height = Word.CentimetersToPoints(6) '高为6厘米
                                  .Left = wdShapeCenter '居中
                                  .ConvertToInlineShape '转换为嵌入式图片对象,以利排版
                            End With
                                  .Content.InsertAfter Chr(13) '插入一个段落标记
                       'Case为图表对象和嵌入式对象等时
                       Case msoEmbeddedOLEObject, msoLinkedOLEObject, msoLinkedPicture, msoOLEControlObject
                               aShape.Copy '复制
                               MyRange.PasteSpecial DataType:=wdPasteOLEObject
                               ShapesCount = .Shapes.Count '取得文档中的图形数量
                            With .Shapes(ShapesCount)
                                 .LockAspectRatio = msoFalse '不锁定纵横比
                                 .Width = Word.CentimetersToPoints(14) '宽为14厘米
                                 .Height = Word.CentimetersToPoints(6) '高为6厘米
                                 .Left = wdShapeCenter '居中
                                 .ConvertToInlineShape '转换为嵌入式图片对象,以利排版
                            End With
                                 .Content.InsertAfter Chr(13) '插入一个段落标记
                            Case msoTable 'Case表格时
                               aShape.Copy '复制 MyRange.Paste '粘贴
                               TablesCount = .Tables.Count '取得文档中的表格数量
                            With .Tables(TablesCount) '表格对象
                                 .PreferredWidthType = wdPreferredWidthPercent '百分比
                                 .PreferredWidth = 100 '100%页面宽度
                                 .Range.Font.Size = 11 '字体大小
                            End With
                            .Content.InsertAfter Chr(13) '插入空白段落
               End Select
            Next
        Next '如果不是最后一个幻灯片,是插入分节符
    If aSlide.SlideIndex < ActivePresentation.Slides.Count Then
       .Content.InsertAfter Chr(12)
       .UndoClear '清空撤消,以减少内存支出 Next '替换白色字体为自动色(黑色)
          With .Content.Find
               .ClearFormatting '清除格式
               .Format = True '格式查找
               .Font.Color = wdColorWhite '白色字体
               .Replacement.Font.Color = wdColorAutomatic '自动色
               .Execute Replace:=wdReplaceAll '全部替换
          End With
     End If
      MsgBox "PPT转换为WORD文档已经结束,请校对和进一步编辑!", vbInformation + vbOKOnly, "ExcelHome/ShouRou"
      .Application.Visible = True '显示Word应用程序
      .Application.ScreenUpdating = True '恢复WORD的屏幕更新
End With
End Sub

TA的精华主题

TA的得分主题

发表于 2020-6-3 14:17 | 显示全部楼层
看着很酷炫,但我不会用,哈哈哈

TA的精华主题

TA的得分主题

发表于 2020-9-16 16:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
找了好几个小时怎么激活PPT加载宏的方法,终于找到了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 04:54 , Processed in 0.033468 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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