Excel VBA-批量导出图片.vba

'r,c 图片所在单元格的偏移量,用来做图片的名字
Sub exportPic()
r = 0
c = -2
    For i = 1 To ActiveSheet.Shapes.Count
        ActiveSheet.Shapes(i).Select
        Name = Range(ActiveSheet.Shapes(i).TopLeftCell.Address).Offset(r, c)
        H = Selection.Height
        W = Selection.Width
        Selection.ShapeRange.ScaleHeight 1#, msoFalse, msoScaleFromTopLeft
        Selection.ShapeRange.ScaleWidth 1#, msoFalse, msoScaleFromTopLeft
        Selection.CopyPicture
       
        Set myChart = ActiveSheet.ChartObjects.Add(0, 0, Selection.Width - 2, Selection.Height - 2).Chart
        myChart.Paste
        ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Line.Visible = msoFalse '去掉Chart边框
        ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Fill.Visible = msoFalse '去掉Chart填充
        myChart.Export ThisWorkbook.Path & "\" & Name & ".png"
        myChart.Parent.Delete
    
        ActiveSheet.Shapes(i).Select
        Selection.Height = H
        Selection.Width = W
    Next
End Sub

以前用Excel2003做了些宏,在网上还有不少粉丝,因一些功能在Excel2010中无法使用,故重新整理,欢迎指正; 本Excel中的宏在Excel2010中测试表现出色; 运行宏前,要保证EXCEL没有禁用宏。 Michael Ho QQ: 9900060 -----------------------Excel有以下功能: 插入图片1 1.点击执行后,会出现文件夹选择窗,请选择你JPG图片所在文件夹(选择“文件夹”而不是选择文件); 2.宏会自动复制Sheet2到新工作簿,并插入你所选文件夹中的全部JPG图片到B列,对应的图片名自动填到C列; 3.图片的大小会自动适应Sheet2的B3单元格,因此可以在点击执行前调整Sheet2的B3单元格的大小来控制插入图片的大小。 -------- 插入图片2 1.点击执行后,会出现文件夹选择窗,请选择你JPG图片所在文件夹(选择“文件夹”而不是选择文件); 2.宏会自动复制Sheet3到新工作簿,并插入你所选文件夹中的全部JPG图片制作图册,对应的图片名自动填到图片下方; -------- 插入图片3 如果用户自己的Excel文件中有一列是型号,该宏可以插入指定文件夹里以型号命名的JPG图片到另一列; 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.在你的文件中按Ctrl+I (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏InsertPic3); 4.然后会出现文件夹选择窗,请选择你JPG图片所在文件夹(选择“文件夹”而不是选择文件); 5.在弹出的对话框中指定型号在第几列,图片要插入到第几列,以及从哪一行开始; 6.图片的大小会自动适应你设定的第一行要插入图片的单元格,因此提前调整那个单元格的大小可以控制插入图片的大小。 ------------- 删除活动工作表中所有图片 Ctrl+d 删除活动工作表里所有的JPG图片,(不一定是本工作簿中的工作表); 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.在你的文件中按Ctrl+d (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏DelPic); ------------- 导出活动工作表中被选中的一张JPG图片 Ctrl+e 导出活动工作表中被选中的一张JPG图片,(不一定是本工作簿中的工作表); 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.请选中一张要导出图片; 4.在你的文件中按Ctrl+e (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏OutputOnePic); 5.在弹出的对话框中指定图片要保存的名字; 1.不管图片Excel中是否被缩放过,导出图片是按图片的原始尺寸进行保存。 2.在桌面上会自动新建一个"OutputPic"的文件夹,导出图片将会存在那个文夹里; 3.如果文件夹中已有相同名字的文件,则后面导出的文件会自动加上(v1), (v2), (v3)... ------------- 导出活动工作表中所有JPG图片 Ctrl+f 导出活动工作表中所有JPG图片,并且图片名自动使用指定列中的图片名; 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.在你的文件中按Ctrl+f (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏OutputAllPic); 4.在弹出的对话框中指定图片所在列,图片名所在的列; 1.不管图片Excel中是否被缩放过,导出图片是按图片的原始尺寸进行保存; 2.在桌面上会自动新建一个"OutputPic"的文件夹,所有导出图片将会存在那个文夹里; 3.如果文件夹中已有相同名字的文件,则后面导出的文件会自动加上(v1), (v2), (v3)... ---------------- 对指定文件夹中的JPG图片进行重命名 Ctrl+r 利用活动工作表中的所有图片的旧名与新名的对照,对指定文件夹中JPG图片进行重命名; 1.打开本Excel文件,不要关闭; 2.再另外打开你自己需要操作的另一个Excel文件,并保持你要操作的工作表做为当前活动工作表; 3.在你的文件中按Ctrl+r (或在你的文件中手动执行宏,然后选择本EXCEL文件中的宏RenamePic); 4.在弹出的对话框中指定图片旧名所在列和图片新名所在的列; 1.可以结合插入图片的宏,将所有图片的旧名输入到Excel中,再在另一列中填上新图片名,然后使用该宏。 2.如果顺利运行,会在原来那个文件夹下面新建一个叫“New”的子文件夹,所有重命好名的图片会自动放入子文件夹里; 3.如果文件夹中已有相同名字的文件,则后面的文件会覆盖原来的文件。
Excel VBA中,你可以通过以下步骤来批量导出A列图片名称对应的B列图片到指定文件夹: ```vba Sub ExportImages() Dim rng As Range, i As Long, picPath As String, filename As String ' 设置图片保存的路径 picPath = "C:\YourSaveFolder\" ' 将 "C:\YourSaveFolder\" 替换为你想要保存图片的实际路径 ' 遍历A列和B列 Set rng = Range("A1:B" & Cells(Rows.Count, 1).End(xlUp).Row) ' 获取A列到最后一行的数据范围 For i = 1 To rng.Rows.Count ' 获取图片名称和路径 filename = rng.Cells(i, 1).Value ' 图片名 If Not IsEmpty(rng.Cells(i, 2)) Then ' 检查图片是否为空 ' 创建完整的图片路径 picPath = picPath & filename & ".jpg" ' 这里假设所有图片都是.jpg格式,可根据需要调整 ' 尝试复制图片到指定路径 On Error Resume Next ActiveSheet.Pictures控件(rng.Cells(i, 2)).CopyPicture Appearance:=xlScreen, Format:=xlBitmap On Error GoTo 0 ' 如果复制成功则粘贴到目标路径 If Err.Number = 0 Then Application.DisplayAlerts = False Pictures.Paste Picture:=picPath Application.DisplayAlerts = True Kill picPath ' 删除临时复制的图片防止空间占用过多 End If End If Next i End Sub ``` 这个VBA宏首先设置了一个保存路径,然后遍历A列和B列。对于每一行,它会检查B列是否有图片,如果有,则将图片复制并粘贴到指定路径,同时删除原图以节省磁盘空间。 执行此宏之前,请确保已经启用VBA,并且修改`picPath`变量指向你需要保存图片的实际位置。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

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

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

打赏作者

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

抵扣说明:

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

余额充值