很多公司都没有专门的系统来管理商品的图片,所以做商品管理和分析的朋友都习惯把商品图片导入到 Excel 中进行管理,或者用于配合 Excel 做报表展示。
虽然 Excel 可以批量导入图片,但导入后图片不会自动对齐单元格,各图片尺寸不一,靠纯手工去调整,耗时耗力,管理起来超级不方便!
这时候 VBA 就是最佳的工具了,打开 Excel 就能用,虽然它很老,但是有些场景它真的真的很好用 ~ 不会写 VBA 代码的朋友不用担心,因为代码我都已经写好了,你只要会用代码,会做一些简单修改就行,试试看,这肯定难不到你的!
从文件夹导入单元格
我们的商品图片一般是存放在电脑上,然后在 Excel 中一般是通过商品名称(图片文件名)来导入:
这时就可以使用以下代码:
Public Sub GetImagesFromFolder()
'作用: 根据图片名称,插入图片到 Excel 单元格,图片位置在名称右侧的单元格中
'代码运行中,若想要中断执行,可以在 VBA 界面按键盘快捷键[Ctrl] + [Pause Break]
Dim folder As String, picExtention As String
Dim picNames As Range, picName As Range, counter As Long, picPath As String
folder = "C:\Users\Administrator\Downloads\Excel 导入导出图片\图片" '文件夹路径
picExtention = "jpg" '图片扩展名,如果有多种格式,建议先用其他工具统一调整
Set picNames = ActiveSheet.Range("A2:A9") '图片名称所在的单元格区域
If Right$(folder, 1) <> "\" Then folder = folder & "\"
If Left(picExtention, 1) <> "." Then picExtention = "." & picExtention
On Error Resume Next '忽略错误,如找不到文件、空单元格等
Application.ScreenUpdating = False
For Each picName In picNames
With picName.Offset(, 1) '图片存放于右侧的单元格中,1 表示偏移 1 列
picPath = folder & picName.Value & picExtention '组合获取图片文件全路径
ActiveSheet.Shapes.AddPicture(picPath, 1, 1, .Left, .Top, _
.Width, .Height).Placement = xlMoveAndSize
If Err.Number = 0 Then '记录反馈, 不需要的话可以删除
.Offset(, 1).Value = "成功"
counter = counter + 1
Else
.Offset(, 1).Value = Err.Description
Err.Clear
End If
End With
Next
Application.ScreenUpdating = True
MsgBox "图片链接共 " & picNames.Count & " 个,已成功获取 " & counter & " 个!", _
vbOKOnly Or vbInformation, "温馨提示"
End Sub 代码中我都加了注释,大家根据自己的实际情况,修改文件夹路径、扩展名、图片名称所在的单元格区域等,即可实现自动导入图片:
从文件夹导入为图片批注
有时我们不想图片占用单元格区域,就可以导入为图片批注。对的,平时我们做的大多是文本批注,但其实图片也可以用作批注!
当你移动光标到单元格上方,或者选中单元格,批量就会自动显示出来。
我觉得图片批注的好处是排版方便,毕竟不同的商品尺寸不一,如果统一放在单元格区域内,你可能还要调整成不同的行高,这样其实报表的观感也比较一般 ~
插入图片作为批注,可以使用以下的代码:
Public Sub GetImagesFromFolderToComment()
'作用: 根据图片名称,插入图片到 Excel 单元格的【批注】中,批注默认创建在名称所在的单元格
'代码运行中,若想要中断执行,可以在 VBA 界面按键盘快捷键[Ctrl] + [Pause Break]
Dim folder As String, picExtention As String, picPath As String
Dim picNames As Range, picName As Range, counter As Long, scaleValue As Integer
folder = "C:\Users\Administrator\Downloads\Excel 导入导出图片\图片" '文件夹路径
picExtention = "jpg" '图片扩展名,如果有多种格式,建议先用其他工具统一调整
scaleValue = 2.5 '设置图片的缩放倍数, 1 表示按默认尺寸显示
Set picNames = ActiveSheet.Range("A2:A9") '图片名称所在的单元格区域
If Right$(folder, 1) <> "\" Then folder = folder & "\"
If Left(picExtention, 1) <> "." Then picExtention = "." & picExtention
'On Error Resume Next '忽略错误,如找不到文件、空单元格等
Application.ScreenUpdating = False
For Each picName In picNames
With picName '图片存放于右侧的单元格中
Debug.Print .Value
picPath = folder & picName.Value & picExtention '组合获取图片文件全路径
.ClearComments '清空原有的批注
With .AddComment.Shape '新建批注
.Parent.Text ("") '清空默认批注内容
.Parent.Visible = False '确保批注默认是隐藏的
.Fill.UserPicture (picPath) '插入图片批注
.LockAspectRatio = True '锁定长宽比
.Width = scaleValue * .Width '设置图片的缩放倍数
End With
'记录反馈
If Err.Number = 0 Then
.Offset(, 2).Value = "成功"
counter = counter + 1
Else
.Offset(, 2).Value = Err.Description
Err.Clear
End If
End With
Next
'输出反馈
Application.ScreenUpdating = True
MsgBox "图片名称共 " & picNames.Count & " 个,已成功设置批注 " & counter & " 个!", _
vbOKOnly Or vbInformation, "温馨提示"
End Sub
这里需要修改的地方包括:文件夹路径、图片扩展名、缩放倍数、图片名称所在单元格区域等,适当修改就能让你批量地生成图片批注,超级方便!
从图片链接导入Excel
还有些有做电商平台店铺的朋友,图片都上传到网店上了,需要根据图片链接获取图片到 Excel 工作表中:
这时可以使用以下的代码:
Public Sub GetImagesFromLinks()
'作用: 根据图片链接地址,插入图片到 Excel 中,图片位置在链接单元格右侧的单元格中
'代码运行中,若想要中断执行,可以在 VBA 界面按键盘快捷键[Ctrl] + [Pause Break]
Dim link As Range, Links As Range, counter As Long
Set Links = ActiveSheet.Range("A2:A9") '链接所在的单元格区域
On Error Resume Next '忽略错误,如链接错误、网络问题、空单元格等
Application.ScreenUpdating = False
For Each link In Links
With link.Offset(, 1) '图片存放于右侧的单元格中
'插入图片
ActiveSheet.Shapes.AddPicture(link.Value, 1, 1, .Left, .Top, _
.Width, .Height).Placement = xlMoveAndSize
If Err.Number = 0 Then '记录反馈
.Offset(, 1).Value = "成功"
counter = counter + 1
Else
.Offset(, 1).Value = Err.Description
Err.Clear
End If
End With
Next
Application.ScreenUpdating = True
MsgBox "图片链接共 " & Links.Count & " 个,已成功获取 " & counter & " 个!", _
vbOKOnly Or vbInformation, "温馨提示"
End Sub
这个代码需要修改的地方比较少,主要就是设置链接所在的单元格区域,然后就可以正常使用了!导入来的图片自动会对齐单元格边框,并且随单元格的变化而变化,方便调整行高与列宽以适合不同的图片比例。
批量删除选中区域内的图片
Sub DelPicByRng()
'删除指定单元格区域内的图片
Dim i As Integer, shps
Set rng = ActiveSheet.Range(Selection.Address)
Set shps = rng.Worksheet.Shapes
For i = shps.Count To 1 Step -1 '倒序循环图片
If Not Intersect(shps(i).TopLeftCell, rng) Is Nothing Then '检测到图片位置与本区域重叠 则删除
shps(i).Delete
End If
Next i
End Sub
最后
在 Excel 里管理图片,如果靠手工确实是很麻烦的,掌握一些 VBA 知识会让你效率起飞!初学不用担心难度,因为你并不需要自己写 VBA ,只要会使用别人写好的代码,就能让你的工作效率大大提升,这才是最实用的!好,希望文中的内容对你有帮助。