Excel插入批量图片,套用这些代码就OK

大数据
咱们今天分享的内容是按指定名称和位置批量将图片插入到Excel工作表中……

以下文章来源于VBA编程学习与实践 ,作者EH看见星光

咱们今天分享的内容是按指定名称和位置批量将图片插入到Excel工作表中……

看个动画先:

 

Excel插入批量图片,套用这些代码就OK

代码如下

  1. Sub InsertPic() 
  2.     'ExcelHome VBA编程学习与实践 by:看见星光 
  3.     Dim Arr, i&, k&, n&, pd& 
  4.     Dim strPicName$, strPicPath$, strFdPath$, shp As Shape 
  5.     Dim Rng As Range, Cll As Range, Rg As Range, strWhere As String 
  6.     'On Error Resume Next 
  7.     '用户选择图片所在的文件夹 
  8.     With Application.FileDialog(msoFileDialogFolderPicker) 
  9.        If .Show Then strFdPath = .SelectedItems(1) Else: Exit Sub 
  10.     End With 
  11.     If Right(strFdPath, 1) <> "\" Then strFdPath = strFdPath & "\" 
  12.     Set Rng = Application.InputBox("请选择图片名称所在的单元格区域", Type:=8) 
  13.     '用户选择需要插入图片的名称所在单元格范围 
  14.     Set Rng = Intersect(Rng.Parent.UsedRange, Rng) 
  15.     'intersect语句避免用户选择整列单元格,造成无谓运算的情况 
  16.     If Rng Is Nothing Then MsgBox "选择的单元格范围不存在数据!": Exit Sub 
  17.     strWhere = InputBox("请输入图片偏移的位置,例如上1、下1、左1、右1", , "右1"
  18.     '用户输入图片相对单元格的偏移位置。 
  19.     If Len(strWhere) = 0 Then Exit Sub 
  20.     x = Left(strWhere, 1) 
  21.     '偏移的方向 
  22.     If InStr("上下左右", x) = 0 Then MsgBox "你未输入偏移方位。": Exit Sub 
  23.     y = Val(Mid(strWhere, 2)) 
  24.     '偏移的值 
  25.     Select Case x 
  26.         Case "上" 
  27.         Set Rg = Rng.Offset(-y, 0) 
  28.         Case "下" 
  29.         Set Rg = Rng.Offset(y, 0) 
  30.         Case "左" 
  31.         Set Rg = Rng.Offset(0, -y) 
  32.         Case "右" 
  33.         Set Rg = Rng.Offset(0, y) 
  34.     End Select 
  35.     Application.ScreenUpdating = False 
  36.     Rng.Parent.Select 
  37.     For Each shp In ActiveSheet.Shapes 
  38.     '如果旧图片存放在目标图片存放范围则删除 
  39.         If Not Intersect(Rg, shp.TopLeftCell) Is Nothing Then shp.Delete 
  40.     Next 
  41.     x = Rg.Row - Rng.Row 
  42.     y = Rg.Column - Rng.Column 
  43.     '偏移的坐标 
  44.     Arr = Array(".jpg"".jpeg"".bmp"".png"".gif"
  45.     '用数组变量记录五种文件格式 
  46.     For Each Cll In Rng 
  47.     '遍历选择区域的每一个单元格 
  48.         strPicName = Cll.Text 
  49.         '图片名称 
  50.         If Len(strPicName) Then 
  51.         '如果单元格存在值 
  52.             strPicPath = strFdPath & strPicName 
  53.             '图片路径 
  54.             pd = 0 
  55.             'pd变量标记是否找到相关图片 
  56.             For i = 0 To UBound(Arr) 
  57.             '由于不确定用户的图片格式,因此遍历图片格式 
  58.                 If Len(Dir(strPicPath & Arr(i))) Then 
  59.                 '如果存在相关文件 
  60.                     Set shp = ActiveSheet.Shapes.AddPicture( _ 
  61.                         strPicPath & Arr(i), FalseTrue, _ 
  62.                         Cll.Offset(x, y).Left + 5, _ 
  63.                         Cll.Offset(x, y).Top + 5, _ 
  64.                         20, 20) 
  65.                     shp.Select 
  66.                     With Selection 
  67.                         .ShapeRange.LockAspectRatio = msoFalse 
  68.                         '撤销锁定图片纵横比 
  69.                         .Height = Cll.Offset(x, y).Height - 10 '图片高度 
  70.                         .Width = Cll.Offset(x, y).Width - 10 '图片宽度 
  71.                     End With 
  72.                     pd = 1 '标记找到结果 
  73.                     n = n + 1 '累加找到结果的个数 
  74.                     [a1].Select: Exit For '找到结果后就可以退出文件格式循环 
  75.                 End If 
  76.             Next 
  77.             If pd = 0 Then k = k + 1 '如果没找到图片累加个数 
  78.         End If 
  79.     Next 
  80.     Application.ScreenUpdating = True 
  81.     MsgBox "共处理成功" & n & "个图片,另有" & k & "个非空单元格未找到对应的图片。" 
  82. End Sub 

 

Excel插入批量图片,套用这些代码就OK

代码已有注释说明,这儿就再说明一下运行过程。

首先,会让用户选择存放图片的文件夹。注意是选择文件夹,不是选择图片;选择文件夹后,看不到文件夹内的图片是正常现象。

 

Excel插入批量图片,套用这些代码就OK

然后,选择图片名称存放的单元格区域,可以选择整列、多列、整行或多行,比如示例动画中的B:D列,2:2行等。。

 

Excel插入批量图片,套用这些代码就OK

最后,设置图片相对于图片名称所在的单元格便宜的位置;比如图片名称在B列,图片放在C列,那就是向右偏移1列,即右1。上下左右代表了方向,数字代表偏移的量。

 

Excel插入批量图片,套用这些代码就OK

小贴士:

  1. 该段小代码支持一下图片格式:".jpg", ".jpeg", ".bmp", ".png", ".gif"
  2. 图片的纵横比是未锁定的,如需锁定,可以注释掉下句代码:.ShapeRange.LockAspectRatio = msoFalse
  3. 图片的行高和列宽是由放置图片的单元格行高和列宽决定的。当然,您也可以把代码稍微修改,设置固定的图片行高和列宽,并由图片的行高和列宽决定单元格的大小。
  4. 图片的名称必须和指定单元格范围内的名称一致,如果需要模糊匹配,使用DIR函数搭配通配符的方式即可。
  5. 代码采用非引用的方式插入图片,该方式会图片作为excel的资源打包到excel文件中,即便数据源的图片已被删除,表格中的图片也依然存在。

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2012-06-27 11:31:24

2022-09-21 14:17:58

Umi-OCR软件

2010-09-03 11:47:38

SQL删除

2010-09-01 16:26:11

SQL删除批量

2013-04-01 15:03:58

Android开发Android批量插入

2019-07-24 16:00:37

Python代码高清图片

2021-04-08 10:55:53

MySQL数据库代码

2013-09-22 10:25:23

MySQLSQL性能优化

2020-11-23 10:50:27

MySQLSQL数据库

2013-07-04 10:50:33

腾讯移动互联网大数据

2020-09-23 09:21:56

CPUCache缓存

2021-09-27 07:56:41

MyBatis Plu数据库批量插入

2021-02-01 00:04:13

Dictionary数据批量

2009-08-12 16:39:50

C#向Excel插入数

2011-08-04 18:00:47

SQLite数据库批量数据

2015-04-17 10:31:11

PHP下载美女图片实现代码

2022-09-29 10:06:56

SQLMySQL服务端

2015-10-10 10:10:20

2011-08-04 15:07:24

2021-10-18 07:58:33

MyBatis Plu数据库批量插入
点赞
收藏

51CTO技术栈公众号