使用VBA批量向Excel插入图片

本文介绍如何使用VBA在Excel中批量插入图片到指定单元格,并确保每张图片仅占用一个单元格。文章详细解释了如何避免使用链接路径,确保图片能够随Excel文件一同保存并正常显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好久之前学的VBA,今天终于派上点用处:

任务:向excel的列中插入700多张图片,并且每张图片只占一个单元格,幸运的是我的图片尺寸都一样。

首先使用宏:

Sub 宏1()
'
' 宏1 宏
    Range("E2").Select
    ActiveSheet.Pictures.Insert("E:\cc\QQPCMgr\11.0.16779.224\BeginnersGuide.png" _
        ).Select

End Sub

这个代码插入的是图片链接,也就是本地的图片必须保存在链接路径,一旦把excel复制给别人或者保存图片的链接修改,就无法准确显示;

第二,上面的方法显然不是我们想要的;

打开资源管理器,找到Shapes.AddPicture(Filename As String, LinkToFile As MsoTriState, SaveWithDocument As MsoTriState, Left As Single, Top As Single, Width As Single, Height As Single)

(1)filename: 要插入的图片路径;

(2)linkToFile: 是否要保持链接状态,肯定不需要对于我来说;

(3)SaveWithDocument:和文件一起保存,需要的;

(4)Left:距离excel左边距离;

(5)Top:距离excel上边框距离;

(6)Width:图片在excel文件中的宽度;

(7)Height:图片在excel中的高度。

最后注意一点:Addpicture后面的参数不能放在括号里,就是说不需要括号,用python的要改改习惯。

以前用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 批量插入图片可以通过自动化代码实现,根据单元格内容匹配对应的图片文件,并将其插入到指定位置。以下是一个完整的示例代码,展示了如何实现这一功能: ### 图片批量插入逻辑 1. 用户选择包含图片名称的单元格区域。 2. 程序读取单元格内容作为图片文件名。 3. 从指定路径加载对应图片文件。 4. 将图片插入到目标单元格中,并调整其大小以适应单元格。 ```vba Sub 批量插入图片() Dim imgPath As String Dim cell As Range Dim targetCell As Range Dim imgFile As String Dim imgExt As String Dim successCount As Long Dim failCount As Long ' 设置图片文件夹路径 imgPath = "C:\Users\VBAMatrix\Documents\IMGTest\" ' 修改为你的图片文件夹路径 ' 支持的图片格式 Dim supportedExts As Variant supportedExts = Array(".jpg", ".jpeg", ".bmp", ".png", ".gif") On Error Resume Next For Each cell In Selection If Not IsEmpty(cell) Then ' 构造图片文件名 imgFile = imgPath & cell.Value imgExt = LCase(Right(imgFile, Len(imgFile) - InStrRev(imgFile, "."))) ' 检查文件是否存在以及是否支持该格式 If Dir(imgFile) <> "" And IsInArray(imgExt, supportedExts) Then ' 计算目标单元格(例如:向右偏移1列) Set targetCell = cell.Offset(0, 1) ' 插入图片并调整大小 With targetCell.Parent.Pictures.Insert(imgFile) .ShapeRange.LockAspectRatio = msoFalse ' 解锁纵横比 .Width = targetCell.Width .Height = targetCell.Height .Top = targetCell.Top .Left = targetCell.Left End With successCount = successCount + 1 Else failCount = failCount + 1 End If End If Next cell MsgBox "成功插入图片: " & successCount & vbCrLf & "失败插入图片: " & failCount End Sub ' 辅助函数:检查元素是否存在于数组中 Function IsInArray(element As Variant, arr As Variant) As Boolean Dim i As Integer IsInArray = False For i = LBound(arr) To UBound(arr) If element = arr(i) Then IsInArray = True Exit Function End If Next i End Function ``` ### 使用说明 1. **图片路径设置**:将 `imgPath` 变量值修改为你自己的图片文件夹路径。 2. **支持的图片格式**:脚本默认支持 `.jpg`, `.jpeg`, `.bmp`, `.png`, 和 `.gif` 格式[^1]。 3. **插入位置**:当前代码将图片插入到选中单元格右侧一列(`cell.Offset(0, 1)`),可根据需要修改偏移方向和量级。 4. **锁定纵横比**:若需保持图片比例不变形,可以注释掉 `.ShapeRange.LockAspectRatio = msoFalse` 行。 ### 注意事项 - 确保图片文件名与单元格内容完全匹配(包括扩展名)。 - 如果图片无法找到或格式不支持,程序会自动跳过并在运行结束后提示成功和失败的数量。 - 代码通过 `On Error Resume Next` 避免错误中断执行流程,确保即使部分图片插入失败也不会影响整体操作[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值