You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用VBA将剪贴板中的图片保存为PNG或JPG格式

VBA 剪贴板图片保存为PNG/JPG解决方案

原代码报错原因

  • VBA中对象变量赋值必须使用Set关键字,原代码image = Clipboard.GetImage缺少Set,是触发「缺少对象」报错的直接原因。
  • VBA原生没有内置Clipboard.GetImage方法,也没有支持直接导出为PNG/JPG的图片对象,仅靠原代码的逻辑无法实现图片保存功能。

可直接运行的实现代码(适配Word VBA场景)

以下代码使用Windows自带的WIA组件实现,采用晚绑定无需手动添加引用,兼容绝大多数Windows系统:

Sub SaveInlineShapeAsImage()
    ' 变量i可根据你的实际业务逻辑修改取值规则,示例默认取1
    Dim i As Integer: i = 1
    ' 此处补充你自己的singleline对象赋值逻辑,示例取当前选中区域
    Dim singleline As Range: Set singleline = Selection.Range
    
    If singleline.InlineShapes.Count > 0 Then
        Dim shp4 As InlineShape
        Set shp4 = singleline.InlineShapes(1)
        shp4.Select
        Selection.Copy
        
        ' 读取剪贴板内容
        Dim objData As Object
        Set objData = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        objData.GetFromClipboard
        
        ' 判断剪贴板是否为位图格式
        If objData.GetFormat(2) Then
            Dim img As Object, ip As Object
            Set img = CreateObject("WIA.ImageFile")
            img.LoadFile objData.GetFiles(1)
            
            ' 配置图片转换规则
            Set ip = CreateObject("WIA.ImageProcess")
            ip.Filters.Add ip.FilterInfos("Convert").FilterID
            ' 保存为PNG使用GUID:{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}
            ' 保存为JPG替换为GUID:{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}
            ip.Filters(ip.Filters.Count).Properties("FormatID") = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
            Set img = ip.Apply(img)
            
            ' 保存到指定路径,运行前请确保c:\here\文件夹已存在
            img.Save "c:\here\" & CStr(i) & ".png"
        End If
    End If
End Sub

注意事项

  • 运行代码前需要提前创建你指定的保存目录,示例中为c:\here\,否则会触发路径不存在报错。
  • 若需要保存为JPG格式,只需要把代码中对应的格式GUID替换为注释里标注的JPG格式GUID即可。

内容的提问来源于stack exchange,提问作者Gajendran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:15:04