目录

一、思路

1.遍历文档中的域fd

2.判断每一个域fd

3.二进制存储

二、示例代码

1.代码

2.运行效果

(1)示例文件

(2)复制代码-运行

(3)选择存储位置

(4)存储完成

(5)查看文件

三、注意


一、思路

因为Word中的Visio对象也是Word中的域,所以在遍历的时候既可以遍历文档中的域(fields),也可以遍历 文档中的图片(inlineshapes)。本文是用遍历域的方法:

1.遍历文档中的域fd

2.判断每一个域fd

如果域代码中包含【EMBED Visio.Drawing.】,则说明是Visio对象,可以进行后续处理。

3.二进制存储

对于这个域的图片的二进制内容【fd.InlineShape.Range.EnhMetaFileBits】,使用【ADODB.STREAM】对象进行如下操作:

(1)以二进制方式打开【ADODB.STREAM】对象

(2)将这个域的图片的二进制内容【fd.InlineShape.Range.EnhMetaFileBits】写入(write)【ADODB.STREAM】对象

(3)将写入的内容存储为文件【savetofile】

(4)关闭【ADODB.STREAM】对象

二、示例代码

1.代码

Sub 批量导出Visio图()Dim aDoc As DocumentDim fd As FieldDim aDos As ObjectDim k As LongDim fDia As FileDialogDim saveFolder As String'Dim fileType As StringDim fileName As StringDim t0 As Singlet0 = TimerSet aDoc = ActiveDocumentSet aDos = CreateObject("ADODB.STREAM")Set fDia = Application.FileDialog(msoFileDialogFolderPicker)With fDia.Title = "选择图片存储位置(文件夹):"If .Show ThensaveFolder = .SelectedItems(1)'fileType = Trim(InputBox("请输入支持的图片格式后缀(如png、jpeg、jpg、gif等):", "图片格式", "jpg"))For Each fd In aDoc.FieldsIf fd.Code Like "*EMBED Visio.Drawing.*" Thenk = k + 1fileName = saveFolder & "\" & k & ".emf"With aDos.Open.Type = 1.write fd.InlineShape.Range.EnhMetaFileBits.savetofile fileName.CloseEnd WithDebug.Print Format(k, "第0个Visio图片存储完成!")End IfNextEnd IfEnd WithSet aDoc = NothingSet aDos = NothingSet fDia = NothingMsgBox Format(k, "完成 共处理了0个Visio图片  用时:") & Timer - t0 & "秒"
End Sub

2.运行效果

(1)示例文件

示例文档有2幅Visio图片

(2)复制代码-运行

创建模块-运行

(3)选择存储位置

选择存储位置-确定

(4)存储完成

完成

(5)查看文件

存储文件夹

图片1

图片2

三、注意

Word VBA中通过【ADODB.STREAM】对象存储图片只支持【.emf】格式,需要【.jpg】格式需要借助其他API函数处理。此处没有进行转换。

可以将这些图片通过其他批处理方式,转换一下格式即可。

Word VBA:批量导出Visio对象为图片相关推荐

  1. Visio录制宏代码——重复批量导出600dpi的tiff图片

    Visio录制宏,重复批量导出600dpi的tiff图片 因为论文修改需要,需要对3×3×4=363\times3\times4=363×3×4=36张图片反复修改调整,然后将图片依次导出为600dp ...

  2. 解决word中插入visio对象的图片大小修改问题

    在论文中直接插入visio导出的png或其他格式的图片会很不清晰,我们可以在word中直接插入visio对象. 在"插入"栏目中选择"对象",下拉依旧选择&qu ...

  3. Word VBA批量格式转换:docx转pdf、doc、rtf、txt以及反向转换

    有时候需要把大量的docx文件另存为其它格式,比如pdf.doc.rtf.txt,或者反向转换,可以用VBA批量处理.启动word,按下Alt+F11,打开Microsoft Visual Basic ...

  4. 去除Word中插入的Visio对象的空白

    办法: 在Word中双击插入的Visio对象,即在Word中进入Visio的编辑模式 点击Visio对象,确定该对象被选中 按住ctrl键,把鼠标移到Visio页面边缘,会看到有图标显示边缘可以移动 ...

  5. 使用ImageMagick将eps批量导出为透明png图片

    一.前言 后文的解释比较啰嗦,这里先上总结论:下载magick软件,在命令行使用下述两行代码: mogrify -density 120 -format png *.eps mogrify -tran ...

  6. 多个word vba批量替换文字(一个文件夹)

    多个word批量替换word文字! Sub 替换N个word文档()Dim Dm As DocumentDim MyPath As StringDim MyName As StringDim N As ...

  7. Word VBA(批量复制Excel表格和Word表格到Word中)

    Function Test()  '使用双字典          SearchPath = FolderDialog("请选择文件夹")     If SearchPath = & ...

  8. VBA应用笔记 -- 批量导出excel工作表中的图片

    业务场景: 日常工作中,我们可能会遇到需要批量导出excel表中的图片的情况,按照网友的做法,批量导出excel中的图片主要有几种方法: 解压缩方法:可以通过将excel文件转成rar压缩文件,解压后 ...

  9. Word2019中Visio对象图片插入题注时自动删除标签与编号前的空格,编号后添加空格

    问题引入 撰写论文时为了修改方便,通常以插入题注和交叉引用的方式来给图片标号,这样修改图片和图号后可以方便.自动地更新. 然而,Word在插入题注上从03到13一直没有针对中国用户优化. 插入题注的标 ...

最新文章

  1. Ceres入门——Ceres的基本使用方法
  2. C++ 函数参数 值传递与引用传递
  3. Swift3.0语言教程比较、判断字符串
  4. MySQL存储引擎和外键学习
  5. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---32
  6. 8.1 文件查找local;find使用
  7. 倍增LCA code[vs]1036商务旅行
  8. 哲学到编程:思想的实例化
  9. python调用接口获取文件_python接口文件使用说明
  10. 喜庆红色C4D立体电商首焦模板|PSD分层格式,设计师大呼真香!
  11. 一个域名能申请多少个ssl_必须要有域名才能申请SSL证书吗?
  12. Linux替代Windows系统软件比拼
  13. java+创建metaq生产者_微服务架构【技术点4】windows下rocketMQ配置及java端生产者消费者配置-Go语言中文社区...
  14. 企业应该了解的ISO27001体系建设指导
  15. 蓝宝石vega56刷64bios及降压超频全过程
  16. LoRaWAN节点和网关接入阿里LinkWAN
  17. SCardTransmit 返回 SCARD_W_RESET_CARD
  18. VMware16 安装Mac 10.14系统/苹果系统
  19. 【python篇】python基础之--基本问题记录
  20. 网上学python靠谱吗?

热门文章

  1. SAP 总帐科目的批量传输
  2. 浏览器兼容性测试学习01
  3. Android Okhttp3基本使用
  4. 利用matlab软件求数列的中值,matlab求两个数列的方差
  5. 新浪微博新动作 以网络安全之名联合安全联盟
  6. 用脉冲星的脉冲周期测量宇宙的年龄
  7. 小学计算机社团活动展示,德州学院附属小学信息技术社团活动计划
  8. java操作图片为啥改了图片以后底片是红色的
  9. 用Python一键搭建Http服务器
  10. 【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知Advice注解(已附源码)