Excel简单搞定怎么按名称查询图片

wufei123 2024-05-24 阅读:11 评论:0
本篇文章给大家带来了关于excel的相关知识,其中主要整理了怎么按名称查询图片的相关问题,包括了如何将图片从一张工作表插入到另外一张工作表、根据数据表的a列的图片名称,将照片表的照片批量插入到数据表的b列中等等内容,下面一起来看一下,希望对...

本篇文章给大家带来了关于excel的相关知识,其中主要整理了怎么按名称查询图片的相关问题,包括了如何将图片从一张工作表插入到另外一张工作表、根据数据表的a列的图片名称,将照片表的照片批量插入到数据表的b列中等等内容,下面一起来看一下,希望对大家有帮助。

Excel简单搞定怎么按名称查询图片

相关学习推荐:excel教程

如何将图片从一张工作表插入到另外一张工作表呢?举个例子。

如下图:

06.jpg

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

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

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

示例动画如下:

07.gif

……

实现这样的功能,其实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) '如果有找到对应的姓名,则将照片复制粘贴到目标位置 Next End 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) '如果有找到对应的姓名,则将照片复制粘贴到目标位置 Next End Sub

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

二不过……

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

比如说……

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

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

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

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

代码修改如下:

Sub InsertPicFromSheet2() &#39;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 &#39;On Error Resume Next Set rngData = Application.InputBox("请选择应插入图片名称的单元格区域", Type:=8) &#39;用户选择需要插入图片的名称所在单元格范围 Set rngData = Intersect(rngData.Parent.UsedRange, rngData) &#39;intersect语句避免用户选择整列单元格,造成无谓运算的情况 If rngData Is Nothing Then MsgBox "选择的单元格范围不存在数据!": Exit Sub strWhere = InputBox("请输入放置图片偏移的位置,例如上1、下1、左1、右1", , "右1") &#39;用户输入图片相对单元格的偏移位置 If Len(strWhere) = 0 Then Exit Sub x = Left(strWhere, 1) &#39;偏移的方向 If InStr("上下左右", x) = 0 Then MsgBox "你未输入偏移方位。": Exit Sub y = Val(Mid(strWhere, 2)) &#39;偏移的值 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 &#39;如果旧图片存放在目标图片存放范围则删除 If Not Intersect(rngWhere, shp.TopLeftCell) Is Nothing Then shp.Delete Next x = rngWhere.Row - rngData.Row y = rngWhere.Column - rngData.Column &#39;偏移的纵横坐标 For Each cll In rngData &#39;遍历选择区域的每一个单元格 strPicName = cll.Text &#39;图片名称 If Len(strPicName) Then &#39;如果单元格存在值 Set rngPicName = Sheets(strPicShtName).Cells.Find(cll.Value, , , xlWhole) &#39;使用Find方法在照片表完整匹配姓名 If Not rngPicName Is Nothing Then Set rngPicPaste = cll.Offset(x, y) &#39;粘贴图片的单元格 Set rngPic = rngPicName.Offset(0, 1) &#39;保存图片的单元格 lngYesCount = lngYesCount + 1 &#39;累加找到结果的个数 If lngYesCount = 1 Then &#39;设置放置图片单元格的行高和列宽,以适应图片的大小 rngPicPaste.RowHeight = rngPic.RowHeight rngPicPaste.ColumnWidth = rngPic.ColumnWidth End If rngPicName.Offset(0, 1).Copy rngPicPaste &#39;如果有找到对应的姓名,则将照片复制粘贴到目标位置 Else lngNoCount = lngNoCount + 1 &#39;累加未找到结果的个数 End If End If Next Application.ScreenUpdating = True MsgBox "共处理成功" & lngYesCount & "个对象,另有" & lngNoCount & "个非空单元格未找到对应的图片名称。" End Sub

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

然……三不过……

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

比如说……

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

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

相关学习推荐:excel教程

以上就是Excel简单搞定怎么按名称查询图片的详细内容,更多请关注知识资源分享宝库其它相关文章!

版权声明

本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com

分享:

扫一扫在手机阅读、分享本文

发表评论
热门文章
  • 华为 Mate 70 性能重回第一梯队 iPhone 16 最后一块遮羞布被掀

    华为 Mate 70 性能重回第一梯队 iPhone 16 最后一块遮羞布被掀
    华为 mate 70 或将首发麒麟新款处理器,并将此前有博主爆料其性能跑分将突破110万,这意味着 mate 70 性能将重新夺回第一梯队。也因此,苹果 iphone 16 唯一能有一战之力的性能,也要被 mate 70 拉近不少了。 据悉,华为 Mate 70 性能会大幅提升,并且销量相比 Mate 60 预计增长40% - 50%,且备货充足。如果 iPhone 16 发售日期与 Mate 70 重合,销量很可能被瞬间抢购。 不过,iPhone 16 还有一个阵地暂时难...
  • 酷凛 ID-COOLING 推出霜界 240/360 一体水冷散热器,239/279 元

    酷凛 ID-COOLING 推出霜界 240/360 一体水冷散热器,239/279 元
    本站 5 月 16 日消息,酷凛 id-cooling 近日推出霜界 240/360 一体式水冷散热器,采用黑色无光低调设计,分别定价 239/279 元。 本站整理霜界 240/360 散热器规格如下: 酷凛宣称这两款水冷散热器搭载“自研新 V7 水泵”,采用三相六极马达和改进的铜底方案,缩短了水流路径,相较上代水泵进一步提升解热能力。 霜界 240/360 散热器的水泵为定速 2800 RPM 设计,噪声 28db (A)。 两款一体式水冷散热器采用 27mm 厚冷排,...
  • 惠普新款战 99 笔记本 5 月 20 日开售:酷睿 Ultra / 锐龙 8040,4999 元起

    惠普新款战 99 笔记本 5 月 20 日开售:酷睿 Ultra / 锐龙 8040,4999 元起
    本站 5 月 14 日消息,继上线官网后,新款惠普战 99 商用笔记本现已上架,搭载酷睿 ultra / 锐龙 8040处理器,最高可选英伟达rtx 3000 ada 独立显卡,售价 4999 元起。 战 99 锐龙版 R7-8845HS / 16GB / 1TB:4999 元 R7-8845HS / 32GB / 1TB:5299 元 R7-8845HS / RTX 4050 / 32GB / 1TB:7299 元 R7 Pro-8845HS / RTX 2000 Ada...
  • python中def什么意思

    python中def什么意思
    python 中,def 关键字用于定义函数,这些函数是代码块,执行特定任务。函数语法为 def (参数列表)。函数可以通过其名字和圆括号调用。函数可以接受参数作为输入,并在函数体中使用参数名访问。函数可以使用 return 语句返回一个值,它将成为函数调用的结果。 Python 中 def 关键字 在 Python 中,def 关键字用于定义函数。函数是代码块,旨在执行特定任务。 语法 def 函数定义的语法如下: def (参数列表): # 函数体 示例 定义...
  • python中int函数的用法

    python中int函数的用法
    int() 函数将值转换为整数,支持多种类型(字符串、字节、浮点数),默认进制为 10。可以指定进制数范围在 2-36。int() 返回 int 类型的转换结果,丢弃小数点。例如,将字符串 "42" 转换为整数为 42,将浮点数 3.14 转换为整数为 3。 Python 中的 int() 函数 int() 函数用于将各种类型的值转换为整数。它接受任何可以解释为整数的值作为输入,包括字符串、字节、浮点数和十六进制表示。 用法 int(object, base=10) 其中...