几句代码,批量将图片从一张表格插入到另外一张表格……

之后有朋友提问,那如何将图片从一张工作表插入到另外一张工作表呢?

打个响指,举个例子。

如下图:

一份工作簿有两张工作表。

存放照片的工作表名为【照片】,需要插入图片的工作表名为【数据】。

现在需要根据【数据】表的A列的图片名称,将【照片】表的照片批量插入到【数据】表的B列中去……

示例动画如下:

……

……

实现这样的功能,其实3句代码就够了。

代码如下:
Sub InsertPicFromSheet()    Dim rngData As Range, rngPicName As Range    For Each rngData In Range('a2', Cells(Rows.Count, 1).End(3))        Set rngPicName = Sheets('照片').Cells.Find(rngData.Value, , , xlWhole)        '使用Find方法在照片表完整匹配姓名        If Not rngPicName Is Nothing Then rngPicName.Offset(0, 1).Copy rngData.Offset(0, 1)        '如果有找到对应的姓名,则将照片复制粘贴到目标位置    NextEnd Sub

不过……

以上代码最大的问题在于,没有删除数据表原本就有旧图片,如果重复运行程序,会造成图片累积,为了解决这个问题,我们需要再加上两句代码。

代码修改如下:
Sub InsertPicFromSheet()    Dim shp As Shape, rngData As Range, rngPicName As Range    For Each shp In ActiveSheet.Shapes    '删除活动工作表原有照片        If shp.Type = 13 Then shp.Delete    Next    For Each rngData In Range('a2', Cells(Rows.Count, 1).End(3))        Set rngPicName = Sheets('照片').Cells.Find(rngData.Value, , , xlWhole)        '使用Find方法在照片表的完整匹配姓名        If Not rngPicName Is Nothing Then rngPicName.Offset(0, 1).Copy rngData.Offset(0, 1)        '如果有找到对应的姓名,则将照片复制粘贴到目标位置    NextEnd Sub

以上代码使用一刀切的方式删除了旧有的图片。

二不过……

尽管这段代码对于VBA基础良好的朋友来说,稍微修改下,已经足够应对大部分的问题,但是,对于小白而言,显然不够友好……

比如说……

1,照片的姓名固定在数据表的A列,实际情况,很可能不是A列,我说的对。

2,放置照片的位置固定于姓名列向右移动1列的单元格,实际情况,当然也很可能不是这样,我说的还是对。

3,代码中将储存照片的工作表固定设置为sheets('照片'),实际情况,肯定很可能不是这样,我英明……

4,代码未设置单元格的大小以适应图片的大小,我……

代码修改如下:
Sub InsertPicFromSheet2()    'ExcelHome VBA编程学习与实践 by:看见星光    Dim rngData As Range, rngWhere As Range, cll As Range    Dim rngPicName As Range, rngPic As Range, rngPicPaste As Range    Dim shp As Shape, sht As Worksheet, bln As Boolean    Dim strWhere As String, strPicName As String, strPicShtName As String    Dim x, y As Long, lngYesCount As Long, lngNoCount As Long    'On Error Resume Next    Set rngData = Application.InputBox('请选择应插入图片名称的单元格区域', Type:=8)    '用户选择需要插入图片的名称所在单元格范围    Set rngData = Intersect(rngData.Parent.UsedRange, rngData)    'intersect语句避免用户选择整列单元格,造成无谓运算的情况    If rngData Is Nothing Then MsgBox '选择的单元格范围不存在数据!': Exit Sub    strWhere = InputBox('请输入放置图片偏移的位置,例如上1、下1、左1、右1', , '右1')    '用户输入图片相对单元格的偏移位置    If Len(strWhere) = 0 Then Exit Sub    x = Left(strWhere, 1)    '偏移的方向    If InStr('上下左右', x) = 0 Then MsgBox '你未输入偏移方位。': Exit Sub    y = Val(Mid(strWhere, 2))    '偏移的值    Select Case x        Case '上'        Set rngWhere = rngData.Offset(-y, 0)        Case '下'        Set rngWhere = rngData.Offset(y, 0)        Case '左'        Set rngWhere = rngData.Offset(0, -y)        Case '右'        Set rngWhere = rngData.Offset(0, y)    End Select    strPicShtName = InputBox('请输入存放图片的工作表名称', , '照片')    For Each sht In Worksheets        If sht.Name = strPicShtName Then bln = True    Next    If bln <> True Then MsgBox '未找到保存图片的工作表:' & strPicShtName & vbCrLf & '程序退出。': Exit Sub    Application.ScreenUpdating = False    rngData.Parent.Select    For Each shp In ActiveSheet.Shapes    '如果旧图片存放在目标图片存放范围则删除        If Not Intersect(rngWhere, shp.TopLeftCell) Is Nothing Then shp.Delete    Next    x = rngWhere.Row - rngData.Row    y = rngWhere.Column - rngData.Column    '偏移的纵横坐标    For Each cll In rngData    '遍历选择区域的每一个单元格        strPicName = cll.Text        '图片名称        If Len(strPicName) Then        '如果单元格存在值            Set rngPicName = Sheets(strPicShtName).Cells.Find(cll.Value, , , xlWhole)            '使用Find方法在照片表完整匹配姓名            If Not rngPicName Is Nothing Then                Set rngPicPaste = cll.Offset(x, y)                '粘贴图片的单元格                Set rngPic = rngPicName.Offset(0, 1)                '保存图片的单元格                lngYesCount = lngYesCount + 1                '累加找到结果的个数                If lngYesCount = 1 Then                '设置放置图片单元格的行高和列宽,以适应图片的大小                    rngPicPaste.RowHeight = rngPic.RowHeight                    rngPicPaste.ColumnWidth = rngPic.ColumnWidth                End If                rngPicName.Offset(0, 1).Copy rngPicPaste                '如果有找到对应的姓名,则将照片复制粘贴到目标位置            Else                lngNoCount = lngNoCount + 1                '累加未找到结果的个数            End If        End If    Next    Application.ScreenUpdating = True    MsgBox '共处理成功' & lngYesCount & '个对象,另有' & lngNoCount & '个非空单元格未找到对应的图片名称。'End Sub

以上代码解决了我们前面说的常见的三点问题……

然……三不过……

还是有一些实际应用中可能出现的问题未解决……

比如说……

1,如何解决图片和数据源的联动性?当数据源图片更改的时候,数据表的图片也自动更改?嗯,除了重新运行程序,也可以使用工作表的激活事件,或者是使用activesheet.chartobjects.add……

2,如何设置图片的大小适应单元格,而不是调整单元格的大小适应图片?

……

尽管还有这样那样的问题,然而伟大领袖——施耐庵老师说过,好汉不过碗岗,所以咱们今就到这里吧,有关图片处理的代码,我们后期再继续分享,请记得持续关注本公众号哦……

(0)

相关推荐

  • Excel VBA 7.79如何快速的将其他文件中的图片复制过来?我们要高效的做事

    如何快速的将其他文件中的图片复制过来?我们要高效的做事 点击上方"Excel和VBA",选择"置顶公众号" 致力于原创分享Excel的相关知识,源码,源文件打包 ...

  • 如何将图片链接地址批量转换为图片展示

    如图1,单元格内是图片链接地址,有些一个单元格内多个链接地址分行展示,怎样把这些链接地址转换为图片呢? 图1 首先,我们把这些单元格内有多个链接地址的变为多个单元格,使得一个单元格一个链接地址,方法如 ...

  • Excel VBA 7.76插入图片,你还在复制粘贴?然后修改大小?正常办公VBA太重要

    插入图片,你还在复制粘贴?然后修改大小?正常办公VBA太重要 一起学习,一起进步~~ 今天我们来学习下Excel和图片之间的一些操作,Excel的强大之处就在于他能够存储很多的东西,不管是控件,数据还 ...

  • 【Excel函数技巧】使用Match和Offset可以查找图片

    一直以来,我们使用Vlookup,Match/Index等函数查找的都是单元格中的内容,包括文本,数值,日期等等.今天我们介绍一个技巧,可以查找图片. 先来看效果: 在表格上方,我们记录了一些图标名称 ...

  • 在工作表中批量插入图片,只需动动你的手指

    你好,我是刘卓.欢迎来到我的公号,excel函数解析.在工作中,有时需要在工作表中插入很多图片,如果手工操作的话,非常麻烦,费时费力.今天就来分享一段简单的代码,只需点一下,就能批量插入图片. -01 ...

  • EXCEL批量导出图片

    EXCEL的优势在于数据处理和分析,对于图形的处理往往不如PPT和WORD这两个兄弟.前面也讲过例如图形的布尔运算,EXCEL就没有这个功能,反而PPT和WORD 这两个软件都做的很好.今天就讲一下E ...

  • 来了来了别催了~~~【购物车】驾到!

    购物车功能其实在去年就有朋友想让我做,但是因为一直很忙所以就一直没有做.今年又有几个朋友想要,那么正好抽出一点时间,把这个给做了,下面是视频,看效果. 点击挑选之后,挑选框自动打勾,金额自动累积,再次 ...

  • 几句代码,批量将A表图片插入B表

    批量将图片插入到表格中?So Easy! 之后有朋友提问,那如何将图片从一张工作表插入到另外一张工作表呢? 打个响指,举个例子. 如下图: 一份工作簿有两张工作表. 存放照片的工作表名为[照片],需要 ...

  • 按名称查询图片,几句代码就搞定

    之后有朋友提问,那如何将图片从一张工作表插入到另外一张工作表呢? 打个响指,举个例子. 如下图: 一份工作簿有两张工作表. 存放照片的工作表名为[照片],需要插入图片的工作表名为[数据]. 现在需要根 ...

  • VBA代码、批量导入图片

    这段代码实现了批量导入图片到你指定位置,还可以修改它的大小,图片的名称也跟着导入进来了. 运行的时候它会弹出这么一个选择图片的对话框,你可以根据想要的图片加选打开,然后就导入到你的指定位置了. 下面是 ...

  • 菜鸟记585-今日推荐一个可批量裁剪图片的网站

    万一您身边的朋友用得着呢? 各位朋友早上好,小菜继续和您分享经验之谈,截止今日小菜已分享500+篇经验之谈,可以文章编号或关键词进行搜索. 微信推送规则发生改变,如果您想看到小菜每个工作日的经验之谈, ...

  • 用代码制作的图片交替显现

    代码:<table height="600" cellpadding="0" width="900" background=" ...

  • 一句代码合并Excel表

    原文链接:https://www.jianshu.com/p/0b2b9c08f7f 两个Excel中都有相同的一列,怎样依赖这列数据将两个Excel合并到一起?使用Python合并表格只要一句代码! ...

  • 按名称批量将图片插入到表格中?So Easy!

    小代码支持跨工作簿处理图片,另外模版下载即可使用.只需要下载并打开模版,点击运行按钮,按照系统提示选择存放图片的文件夹,保存图片的工作表区域即可. 还是简单说明一下代码运行过程. ▎单击工作表中硕大的 ...