ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

批量导出word内插图片代码,亲测可用

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-18 19:32 | 显示全部楼层 |阅读模式
本帖最后由 zzpsx 于 2023-2-19 08:31 编辑

Option Explicit
'批量导出单张图片
Sub ExtractPicture()
    Dim docFullName As String
    '1.存储当前文档的完整名称:方便之后重新打开
    docFullName = Word.ActiveDocument.FullName
    '2.在文档的同一目录下,以word文件名,新建一个文件夹,如“XXXX文档_图片”用于保存导出的照片及后面的一些临时文件
    Dim fileSavePath As String
    fileSavePath = ActiveDocument.path & "\" & Left(ActiveDocument.Name, InStrRev(ActiveDocument.Name, ".") - 1) & "_图片\"
    If Dir(fileSavePath, vbDirectory) = "" Then MkDir (fileSavePath) '如果文件夹不存在,就新建一个

    Word.Application.ScreenUpdating = False '关闭屏幕刷新
    '3.保存当前文档,然后另存一份来操作。
    ActiveDocument.Save   '保存当前文档
    Dim CopyFileFullName As String
    Dim saveAsFileName As String
    saveAsFileName = Format(Now, "yyyymmddhhmmss")
    Word.ActiveDocument.SaveAs2 fileName:=fileSavePath & saveAsFileName & ".docx"
    CopyFileFullName = fileSavePath & saveAsFileName & ".docx"   '将副本的文件完整路径临时存储,方便之后调用解压
    Word.ActiveDocument.Close '关闭另存为后的文档,打开源文档
    Word.Documents.Open docFullName
    '4.设置zip文件名,文档副本同名
    Dim zipFullName As Variant  '使用变体变量
    zipFullName = fileSavePath & saveAsFileName & ".zip"
    '5.把docx文件命名为zip文件
    Name CopyFileFullName As zipFullName

    '6.解压另存的zip文件
    Dim strDate As String, FileNameFolder As Variant
    '创建一个文件夹来装临时文件,方便后面一并删除
    FileNameFolder = fileSavePath & "导出图片\"
    '创建名为 FileNameFolder 的文件夹
    MkDir FileNameFolder
    '解压文件
    Dim oShell As Object
    Set oShell = VBA.CreateObject("shell.application")
    oShell.Namespace(FileNameFolder).CopyHere oShell.Namespace(zipFullName).items, 4 + 16   '解压缩文件到指定位置
    Word.Application.ScreenUpdating = True '恢复屏幕刷新
    '7.收拾收拾,把导出的图片移动出来,同时删除第6步建立的文件夹,删除zip文件
    Call moveFile(FileNameFolder & "\word\media\*.*", CStr(fileSavePath))
    Call delete_folder(FileNameFolder)
    Kill fileSavePath & saveAsFileName & ".zip"
    '8.打开图片文件所在目录
    Shell "explorer.exe " & fileSavePath, vbNormalFocus
End Sub
'把指定文件移动到新的文件夹中
'newFilePath无需添加"\",oldfile 可以使用通配符
Public Sub moveFile(oldFile As String, newFilePath As String)
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    oFso.moveFile oldFile, IIf(Right(newFilePath, 1) = "\", Left(newFilePath, Len(newFilePath) - 1), newFilePath)
End Sub
'删除文件夹及下面的所有文件和文件夹
Public Function delete_folder(sPath)
    sPath = IIf(Right(sPath, 1) = "\", Left(sPath, Len(sPath) - 1), sPath)
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    Dim oFolder As Object
    If Len(sPath) Then
        '强制删除,参数True表示不管是否只读的文件都删除
        oFso.DeleteFolder sPath, True
    End If
End Function



不足之处是,导出的图片命名是如下的,要是命名为图1,图2……这样就更好了。导出的图片如果能再清楚一点,更好。
image.jpg

TA的精华主题

TA的得分主题

发表于 2023-2-20 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 smiletwo 于 2023-2-20 11:03 编辑


批量提取word文件图片,根据word文件名顺序编号图片名称
image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-13 18:27 | 显示全部楼层
smiletwo 发表于 2023-2-20 09:32
批量提取word文件图片,根据word文件名顺序编号图片名称

大神,这个代码可否不发截图,发文本,谢谢了。

TA的精华主题

TA的得分主题

发表于 2024-4-14 12:48 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-15 19:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-16 10:56 | 显示全部楼层
代码它过虑掉了重复图片,下面附件中,共10道题,10张图片,只导出了9张,因为第7题的图片重复了第2的图片,被过虑掉了,如果带序号的话,就应该知道哪些图片是重复的了。

导出图片.zip

1.08 MB, 下载次数: 26

TA的精华主题

TA的得分主题

发表于 2024-4-16 16:16 | 显示全部楼层
经常来excelhome来看看,定能发现经典之作,感谢分享哈。

TA的精华主题

TA的得分主题

发表于 2024-11-19 15:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
导出的图片多时imge.bin,请问如何解?

TA的精华主题

TA的得分主题

发表于 2024-11-19 16:55 | 显示全部楼层
docx另存为压缩文件,解压缩后就有图片呀
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 20:15 , Processed in 0.033987 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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