Word VBA:批量导出Visio对象为图片

目录

一、思路

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 Document
    Dim fd As Field
    Dim aDos As Object
    Dim k As Long
    Dim fDia As FileDialog
    Dim saveFolder As String
    'Dim fileType As String
    Dim fileName As String
    Dim t0 As Single
    
    t0 = Timer
    Set aDoc = ActiveDocument
    Set aDos = CreateObject("ADODB.STREAM")
    Set fDia = Application.FileDialog(msoFileDialogFolderPicker)
    
    With fDia
        .Title = "选择图片存储位置(文件夹):"
        If .Show Then
            saveFolder = .SelectedItems(1)
            'fileType = Trim(InputBox("请输入支持的图片格式后缀(如png、jpeg、jpg、gif等):", "图片格式", "jpg"))
            For Each fd In aDoc.Fields
                If fd.Code Like "*EMBED Visio.Drawing.*" Then
                    k = k + 1
                    fileName = saveFolder & "\" & k & ".emf"
                    With aDos
                        .Open
                        .Type = 1
                        .write fd.InlineShape.Range.EnhMetaFileBits
                        .savetofile fileName
                        .Close
                    End With
                    Debug.Print Format(k, "第0个Visio图片存储完成!")
                End If
            Next
        End If
    End With
    
    Set aDoc = Nothing
    Set aDos = Nothing
    Set fDia = Nothing
    
    MsgBox 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函数处理。此处没有进行转换。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VBA-守候

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值