ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 将word文档的选中部分拷为幻灯中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-5-31 23:14 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

Sub 拷为幻灯()

 '使用时要选中适量的文字或者图,能读懂同志的还要进一步根据需要进行调整

Dim PPTapp As Object, mySlide As Object
Dim x As Object
    On Error Resume Next
    Application.ScreenUpdating = False
    If Selection.Type <> wdSelectionNormal Then
        Application.StatusBar = "请先选择要导出的内容。仅支持嵌入式图形和文本"
        Application.ScreenUpdating = True
        Selection.CopyAsPicture 'Exit Sub
    End If

    oldPageWidth = Selection.PageSetup.PageWidth
    If oldPageWidth < 600 Then Selection.PageSetup.PageWidth = 600
    selwidth = oldPageWidth - Selection.PageSetup.RightMargin - Selection.PageSetup.LeftMargin
    mm = Selection.Paragraphs.LineSpacing
   
    parawidth = 0
    SelStart = Selection.Range.Start
    selend = Selection.Range.End
     
    For I = 1 To Selection.Range.ComputeStatistics(wdStatisticLines)
        lineStart = Selection.GoTo(What:=wdGoToLine, Which:=wdGoToNext, Count:=1).End
        Selection.MoveLeft
        If parawidth < Selection.Range.Information(wdHorizontalPositionRelativeToPage) Then
            parawidth = Selection.Range.Information(wdHorizontalPositionRelativeToPage)
        End If
        Selection.MoveRight
    Next
    ActiveDocument.Range(SelStart, selend).Select
    Selection.MoveLeft
    heightb = Selection.Range.Information(wdVerticalPositionRelativeToPage)
     ActiveDocument.Range(SelStart, selend).Select
    Selection.MoveDown
    heighte = Selection.Range.Information(wdVerticalPositionRelativeToPage)
    selheight = Abs(heighte - heightb)

    If selheight = 0 Then
        Application.StatusBar = "选择要导出的内太多或者其他问题不能继续进行处理"
        Application.ScreenUpdating = True
        Exit Sub
    End If
    '  PageHeight = CInt(Sqr(selwidth * selheight))
    '根据需要修改
    If parawidth > selwidth Then
        parawidth = selwidth
    End If
    newPageWidth = CInt(Sqr(parawidth * selheight) * 9 / 7) + Selection.PageSetup.RightMargin + Selection.PageSetup.LeftMargin
    'If selwidth < newpagewidth Then newpagewidth = selwidth
    '    If newPageWidth > parawidth * 9 / 5 Then
    '        newPageWidth = parawidth * 9 / 5
    '    End If
    ActiveDocument.Range(SelStart, selend).Select
    Selection.PageSetup.PageWidth = newPageWidth
    If Selection.Range.Start <> Selection.Range.End Then Selection.Copy
    err.Clear
    Set PPTapp = GetObject(, "PowerPoint.Application")
   
    If err.Number > 0 Then
        Set PPTapp = CreateObject("PowerPoint.Application")
        PPTapp.Visible = True
        PPTapp.Presentations.Add
        err.Clear
        If err.Number > 0 Then
            MsgBox "不能打开PPT文件!"
            Selection.PageSetup.PageWidth = oldPageWidth
            Application.ScreenUpdating = True
            Exit Sub
        End If
    End If
    If PPTapp.Presentations.Count = 0 Then PPTapp.Presentations.Add
    err.Clear
    Set mySlide = PPTapp.ActiveWindow.View.Slide
    If err.Number > 0 Or mySlide Is Nothing Then
        PPTapp.ActivePresentation.slides.Add 1, 12
        Set mySlide = PPTapp.ActiveWindow.View.Slide
    End If
    '     Set mySlide = PPTapp.ActivePresentation.Slides.Add(1, 12)
    With mySlide
        err.Clear
        Set x = .Shapes.PasteSpecial(10)
        If err.Number > 0 Or x Is Nothing Then
            Set x = .Shapes.Paste
        End If
        '        PPTapp.ActiveWindow.Selection.SlideRange.Layout = ppLayoutBlank
        pptwidth = PPTapp.ActivePresentation.PageSetup.SlideWidth
        x.Left = CInt((PPTapp.ActivePresentation.PageSetup.SlideWidth) / 16)   '根据需要修改
        x.Top = 150 '根据需要修改
        newwidth = x.Width
        newheight = x.Height
        x.Width = pptwidth - x.Left * 2
        x.Height = CInt(newheight * (x.Width / newwidth))
        If PPTapp.ActivePresentation.PageSetup.Slideheight - 70 < x.Height Then
            x.Height = PPTapp.ActivePresentation.PageSetup.Slideheight - 70
        End If
        x.Left = (pptwidth - x.Width) / 2
    End With
    '进一步修改位置为居中
    x.Top = (PPTapp.ActivePresentation.PageSetup.Slideheight + x.Top - x.Height - CInt((PPTapp.ActivePresentation.PageSetup.Slideheight) / 16)) / 2 '根据需要修改
    Selection.PageSetup.PageWidth = oldPageWidth
    '      PPTapp.Activate
    '      PPTapp.ActiveWindow.Selection.Copy
    PPTapp.Activate
    ' PPTapp.SetFocus
    Set x = Nothing
    Set mySlide = Nothing
    Set PPTapp = Nothing
   
    Application.Activate '注释掉就不回到word了
    '    Selection.Delete
    '    Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, Placement:=InLine, DisplayAsIcon:=False
    Application.ScreenUpdating = True

End Sub

[此贴子已经被作者于2007-6-1 10:44:46编辑过]

TA的精华主题

TA的得分主题

发表于 2007-5-31 23:33 | 显示全部楼层

有另外一个办法可达到目的:
①将选中内容复制。
②在PPT中插入——对象——Word文档,粘贴。
③调整对象框大小合适,双击对象框外面。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-5-31 23:41 | 显示全部楼层

程序是思路就是这样的(智能些罢了,处理的情况多些,花了一个晚上功夫),我前些天就是这样干的,现在我改用代码了!

楼上的朋友比较一下,两者的区别!

TA的精华主题

TA的得分主题

发表于 2007-6-1 00:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-7-20 11:13 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 无限圆满 于 2022-7-20 11:19 编辑

老师,幻灯片中的文本框可以设置成左靠上一定距离吗,不让它居中。可以随意调整页边距,如何设置呀。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 02:49 , Processed in 0.037051 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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