如何使用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
相关产品推荐
相关产品推荐

