ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 批量从WORD中提取图片,遇到奇怪问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-10-9 16:28 | 显示全部楼层 |阅读模式
以下是代码,导出图片一般在30张左右,超过30张以后,如图片大就会停止,或导出的图片大小全为0,不知道什么原因,也没看出代码有什么问题。


dc.rar (92.17 KB, 下载次数: 15)


  1. Sub WORDTQ()
  2.     Dim Excel_Shape As Shape, MyFile, fpath
  3.     Dim i%, m%
  4.     Dim Word, Myword As Object
  5.     On Error Resume Next
  6.     If Dir(ThisWorkbook.Path & "\WORD中批量导出的图片", 16) = "" Then MkDir ThisWorkbook.Path & "\WORD中批量导出的图片"
  7.     Set Fld = CreateObject("shell.application").BrowseForFolder(0, "请选择文件夹", 0)
  8.     If Not Fld Is Nothing Then fpath = Fld.Self.Path & ""
  9.     On Error Resume Next                              '忽略错误
  10.     MyFile = Dir(fpath & "*.doc*")
  11.     Set Word = CreateObject("word.application")
  12.     Do While MyFile <> ""
  13.         Set Myword = Word.documents.Open(fpath & MyFile)
  14.         Word.Visible = flase
  15.         Application.DisplayAlerts = False
  16.         m = 0
  17.         If Myword.Shapes.Count > 0 Then
  18.             On Error Resume Next
  19.             For i = 1 To Myword.Shapes.Count
  20.                 Myword.Shapes(i).Select
  21.                 Word.Selection.Copy
  22.                 ActiveSheet.Cells(i, 1).Activate
  23.                 ActiveSheet.PasteSpecial Format:="图片(增强型图元文件)", Link:=False, DisplayAsIcon:=False
  24.                 Set Excel_Shape = ActiveSheet.Shapes(1)
  25.                 Excel_Shape.Copy
  26.                 With ActiveSheet.ChartObjects.Add(0, 0, Excel_Shape.Width, Excel_Shape.Height).Chart
  27.                     .Paste
  28.                     Application.CutCopyMode = False
  29.                     m = m + 1
  30.                     .Export ThisWorkbook.Path & "\WORD中批量导出的图片" & Split(MyFile, ".")(0) & m & "◆" & Excel_Shape.Name & ".png"
  31.                     .Parent.Delete
  32.                 End With
  33.                 Excel_Shape.Delete
  34.                 Excel_Shape = Nothing
  35.             Next i
  36.         End If
  37.         If Myword.InlineShapes.Count > 0 Then
  38.             On Error Resume Next
  39.             For i = 1 To Myword.InlineShapes.Count
  40.                 Myword.InlineShapes(i).Select
  41.                 Word.Selection.Copy
  42.                 ActiveSheet.Cells(i, 1).Activate
  43.                 ActiveSheet.PasteSpecial Format:="图片(增强型图元文件)", Link:=False, DisplayAsIcon:=False
  44.                 Set Excel_Shape = ActiveSheet.Shapes(1)
  45.                 Excel_Shape.Copy
  46.                 With ActiveSheet.ChartObjects.Add(0, 0, Excel_Shape.Width, Excel_Shape.Height).Chart
  47.                     .Paste
  48.                     Application.CutCopyMode = False
  49.                     m = m + 1
  50.                     .Export ThisWorkbook.Path & "\WORD中批量导出的图片" & Split(MyFile, ".")(0) & m & "★" & Excel_Shape.Name & ".png"
  51.                     .Parent.Delete
  52.                 End With
  53.                 Excel_Shape.Delete
  54.                 Excel_Shape = Nothing
  55.             Next i
  56.         End If
  57.         Myword.Close
  58.         MyFile = Dir
  59.     Loop
  60.     Set Myword = Nothing
  61.     Word.Quit
  62.     Set Word = Nothing
  63.     ActiveSheet.Buttons.Add(450, 3.75, 166, 40).Select
  64.     Selection.OnAction = "WORDTQ"
  65.     Selection.Characters.Text = "多个WORD中图片批量提取"
  66.     MsgBox "导出完毕"
  67.     [A1].Select
  68. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2022-10-9 19:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
.Parent.Select
在  .Paste 前面加一句代码
并没有出现楼主所说有情况
PPPPPP.png

TA的精华主题

TA的得分主题

发表于 2022-10-9 20:15 | 显示全部楼层
本帖最后由 aman1516 于 2022-10-9 20:16 编辑

WORD中直接导出不行吗、

  1. Sub PicOut()    'Word图片导出
  2.     Dim i, j, k
  3.     On Error Resume Next
  4.     If Dir(ActiveDocument.Path & "\WORD中批量导出的图片", 16) = "" Then MkDir ActiveDocument.Path & "\WORD中批量导出的图片"
  5.     Set ImageStream = CreateObject("ADODB.Stream")
  6.     With ImageStream
  7.         .Type = 1
  8.         .Open
  9.         For i = 1 To ActiveDocument.Shapes.Count
  10.             k = k + 1
  11.             ActiveDocument.Shapes(i).Select
  12.             .Write Selection.EnhMetaFileBits
  13.             .SaveToFile ActiveDocument.Path & "\WORD中批量导出的图片" & k & " .png"
  14.         Next
  15.         For j = 1 To ActiveDocument.InlineShapes.Count
  16.             k = k + 1
  17.             ActiveDocument.InlineShapes(j).Select
  18.             .Write Selection.EnhMetaFileBits
  19.             .SaveToFile ActiveDocument.Path & "\WORD中批量导出的图片" & k & " .png"
  20.         Next
  21.         .Close
  22.     End With
  23.     Set ImageStream = Nothing
  24.     MsgBox "ok"
  25. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2022-10-9 20:19 | 显示全部楼层
详见附件,
WORD图片批量导出.rar (82.38 KB, 下载次数: 51)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-9 20:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-9 20:51 | 显示全部楼层
aman1516 发表于 2022-10-9 19:38
.Parent.Select
在  .Paste 前面加一句代码
并没有出现楼主所说有情况

谢谢帮忙。小图片导出为0大小解决,可是如小图片换成大图片,基本在30处就结束,也就是说只能导出30张左右,后面的就导不出来

TA的精华主题

TA的得分主题

发表于 2022-10-9 20:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.jpg

TA的精华主题

TA的得分主题

发表于 2022-10-9 21:44 | 显示全部楼层
以前写的批量导出多个word文档中的图片代码,供参考:

  1. Sub smiletwo()
  2.     Dim Excel_Shape As Shape, MyFile, path
  3.     Dim i%, m%
  4.     Dim Word, Myword As Object
  5.     On Error Resume Next
  6.     path = ThisWorkbook.path & ""
  7.     MyFile = Dir(path & "*.doc*")
  8.     Set Word = CreateObject("word.application")
  9.     Do While MyFile <> ""
  10.         Set Myword = Word.documents.Open(path & MyFile)
  11.         Word.Visible = flase
  12.         Application.DisplayAlerts = False
  13.         m = 0
  14.         If Myword.Shapes.Count > 0 Then
  15.             For i = 1 To Myword.Shapes.Count
  16.                Myword.Shapes(i).Select
  17.                Word.Selection.Copy
  18.                ActiveSheet.Cells(i, 1).Activate
  19.                ActiveSheet.PasteSpecial Format:="图片(增强型图元文件)", Link:=False, DisplayAsIcon:=False
  20.                Set Excel_Shape = ActiveSheet.Shapes(1)
  21.                Excel_Shape.Copy
  22.                With ActiveSheet.ChartObjects.Add(0, 0, Excel_Shape.Width, Excel_Shape.Height).Chart
  23.                   .Paste
  24.                   m = m + 1
  25.                   .Export path & "pic" & Split(MyFile, ".")(0) & m & ".jpg"
  26.                   .Parent.Delete
  27.                End With
  28.                Excel_Shape.Delete
  29.             Next i
  30.         End If
  31.         If Myword.InlineShapes.Count > 0 Then
  32.             For i = 1 To Myword.InlineShapes.Count
  33.                Myword.InlineShapes(i).Select
  34.                Word.Selection.Copy
  35.                ActiveSheet.Cells(i, 1).Activate
  36.                ActiveSheet.PasteSpecial Format:="图片(增强型图元文件)", Link:=False, DisplayAsIcon:=False
  37.                Set Excel_Shape = ActiveSheet.Shapes(1)
  38.                Excel_Shape.Copy
  39.                With ActiveSheet.ChartObjects.Add(0, 0, Excel_Shape.Width, Excel_Shape.Height).Chart
  40.                   .Paste
  41.                   m = m + 1
  42.                   .Export path & "pic" & Split(MyFile, ".")(0) & m & ".png"
  43.                   .Parent.Delete
  44.                End With
  45.                Excel_Shape.Delete
  46.             Next i
  47.         End If
  48.         Myword.Close
  49.         MyFile = Dir
  50.     Loop
  51.     Set Myword = Nothing
  52.     Word.Quit
  53.     Set Word = Nothing
  54. End Sub
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-27 23:26 , Processed in 0.044437 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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