业务场景:
日常工作中,我们可能会遇到需要批量导出excel表中的图片的情况,按照网友的做法,批量导出excel中的图片主要有几种方法: 解压缩方法:可以通过将excel文件转成rar压缩文件,解压后将图片复制出来;转htm方法:将excel文件另存为htm文件,将图片复制出来;VBA导出方法:通过将图片转成chart对象,利用chart对象导出方法将图片批量导出。这里主要记录一下使用VBA批量导出的方法。
例如:有如下一个工作表,需要将其中的图片批量导出
解决方案:
利用VBA遍历工作表中的所有shape对象,这里的shape对象包括了图片、图标、图表、艺术字、文本框、自定义形状等,由于shape对象没有提供export导出方法,所以通过新建chart对象,并将shape复制粘贴到chart对象中,借助chart对象提供的export方法将图片批量导出。具体参考代码如下:Sub ExportSheetPictures()Dim shp, my_sheetSet my_sheet = Sheets("Sheet1")' 循环获取工作表中的shape对象For Each shp In my_sheet.Shapesshp.Copy' 新建空白chart对象,将shape对象复制粘贴到chart对象中With my_sheet.ChartObjects.Add(0, 0, shp.Width, shp.Height + 5).Chart.ChartArea.Border.LineStyle = 0.ChartArea.Select.Paste.Export ThisWorkbook.Path & "\" & shp.Name & ".png".Parent.DeleteEnd WithNextSet my_sheet = NothingEnd Sub
通过VBA运行后,图片被批量导出,结果如下:
总结:
注意点:
这里一定要加上.ChartArea.Select
选中一下chart对象,再进行粘贴,否则可能出现导出图片为空白的情况。如果需要导出指定图片,比如指定类型或指定行列,可以使用shape对象的type属性、TopLeftCell属性进行筛选控制。