Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4994|回复: 12

[已解决]通过单元格的值动态的显示图片

[复制链接]
发表于 2013-4-13 15:18 | 显示全部楼层 |阅读模式
我有两个存放图片的文件夹:分别是“图片前”和“图片后”,这个两个文件夹内有四个存放不同年份的图片,每个年份图片文件夹内一定会有相同名称的图片名称,如“图片前--2010文件夹内有花这张图片;同样图片后--2010文件夹内也有花这张图片”,我现在想通过“B3”单元格来控制图片文件内的年份,通过“F3”单元格来控制相同年份里相同名称的图片,选择这两个条件后,动态的显示图片,求高手帮忙解决一下 图片文件.zip (809.33 KB, 下载次数: 29)
发表于 2013-4-13 16:03 | 显示全部楼层
根据两个条件,确定某个图片,是吗?

让图片的文件名含有条件,只判断文件名不是方便些吗?
回复

使用道具 举报

 楼主| 发表于 2013-4-13 16:14 | 显示全部楼层
爱疯 发表于 2013-4-13 16:03
根据两个条件,确定某个图片,是吗?

让图片的文件名含有条件,只判断文件名不是方便些吗?


对,就是根据年份和图片名称来显示图片,因为不同年份的图片它会相同名称的,只有同年份的图片的名称是唯一值
回复

使用道具 举报

发表于 2013-4-13 22:02 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address = "$B$3" Or Target.Address = "$F$3" Then
  3.         Dim rng As Range, p$, f$, y%, n$, A(), i%

  4.         ActiveSheet.Pictures.Delete
  5.         p = ThisWorkbook.Path
  6.         y = [b3]
  7.         n = [f3]
  8.         A = Array("图片前", "图片后", "A6", "H6")

  9.         '加载图片
  10.         For i = 0 To 1
  11.             Set rng = Range(A(i + 2))
  12.             rng.ClearContents
  13.             f = p & "" & A(i) & "" & y & "" & n & ".jpg"
  14.             If Dir(f) <> "" Then
  15.                 ActiveSheet.Shapes.AddPicture Filename:=f, _
  16.                                               LinkToFile:=True, SaveWithDocument:=True, _
  17.                                               Left:=rng.Left, Top:=rng.Top, _
  18.                                               Width:=324, Height:=244
  19.             Else
  20.                 rng = "指定文件不存在"
  21.             End If
  22.         Next i

  23.     End If
  24. End Sub
复制代码
图片文件2.rar (794.75 KB, 下载次数: 30)
回复

使用道具 举报

 楼主| 发表于 2013-4-13 22:54 | 显示全部楼层
爱疯 发表于 2013-4-13 22:02
根据实际情况再看吧

朋友,当我选定年份时,后面的图片名称能不能只显示该年份的图片名称,如当我选择“2010”时,F3单元格数据有效性内只有“树河,花”这两个选择,现在里面有很多选项,不好找,麻烦朋友帮我改进一下,谢谢啦
回复

使用道具 举报

发表于 2013-4-13 22:59 | 显示全部楼层
本帖最后由 爱疯 于 2013-4-13 23:08 编辑
yty773436272 发表于 2013-4-13 22:54
朋友,当我选定年份时,后面的图片名称能不能只显示该年份的图片名称,如当我选择“2010”时,F3单元格数 ...


可不可能,所有图片放到一个文件夹?

每个图片名包括3个部分:  前或后 + 年份 + 名称

如前-2011-花.jpg、后-2012-11.jpg等等
回复

使用道具 举报

 楼主| 发表于 2013-4-13 23:13 | 显示全部楼层
爱疯 发表于 2013-4-13 22:59
可不可能,所有图片放到一个文件夹?

每个图片名包括3个部分:  前或后 + 年份 + 名称

那至少也要两个文件夹,图片前和图片后,然后在图片前和图片后内加年份和图片名称,能确定其唯一值,这样也可以,但是当我选择2010时,图片名称单元格只显示2010图片的名称
回复

使用道具 举报

发表于 2013-4-13 23:21 | 显示全部楼层
yty773436272 发表于 2013-4-13 23:13
那至少也要两个文件夹,图片前和图片后,然后在图片前和图片后内加年份和图片名称,能确定其唯一值,这样 ...

如果按5楼,
图片前路径里有11.jpg
图片后路径里无11.jpg

那F3的菜单里,有没有11.jpg
回复

使用道具 举报

 楼主| 发表于 2013-4-13 23:24 | 显示全部楼层
爱疯 发表于 2013-4-13 23:21
如果按5楼,
图片前路径里有11.jpg
图片后路径里无11.jpg

有,随便哪个文件夹内有的,另外一个没有也要显示出来,如图片前2010文件夹内有“树河”,图片后内没有,只要选择2010,都显示出来,
回复

使用道具 举报

发表于 2013-4-14 00:01 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)

  2.     Dim d As Object
  3.     Dim rng As Range
  4.     Dim p$, f$, y%, n$, A(), i%


  5.     p = ThisWorkbook.Path
  6.     y = [b3]    '选择年份
  7.     n = [f3]    '选择名称
  8.     A = Array("图片前", "图片后", "A6", "H6")


  9.     '可能一:重建数据有效性
  10.     If Target.Address = "$B$3" Then
  11.         Dim k, t, str$

  12.         '收集
  13.         Set d = CreateObject("scripting.dictionary")
  14.         For i = 0 To 1
  15.             f = Dir(p & "" & A(i) & "" & y & "")
  16.             Do While f <> ""
  17.                 Debug.Print f
  18.                 d(f) = d(f) + 1
  19.                 f = Dir
  20.             Loop
  21.         Next i
  22.         k = d.keys: t = d.items

  23.         '验证
  24.         For i = 0 To UBound(t)
  25.             If t(i) < 2 Then d.Remove k(i)
  26.         Next i
  27.         str = Join(d.keys, ",")

  28.         '加载
  29.         With Range("F3").Validation
  30.             .Delete
  31.             Application.EnableEvents = False
  32.             If str <> "" Then
  33.                 .Add Type:=xlValidateList, Formula1:=str
  34.                 Range("F3") = "..."
  35.             Else
  36.                 Range("F3") = "无图片"
  37.             End If
  38.             Application.EnableEvents = True
  39.         End With

  40.     End If


  41.     '可能二:加载图片
  42.     f = ""
  43.     If Target.Address = "$F$3" Then
  44.         ActiveSheet.Pictures.Delete
  45.         For i = 0 To 1
  46.             Set rng = Range(A(i + 2))
  47.             f = p & "" & A(i) & "" & y & "" & n
  48.             ActiveSheet.Shapes.AddPicture Filename:=f, _
  49.                                           LinkToFile:=True, SaveWithDocument:=True, _
  50.                                           Left:=rng.Left, Top:=rng.Top, _
  51.                                           Width:=324, Height:=244


  52.         Next i
  53.     End If
  54. End Sub
复制代码
图片文件3.rar (795.87 KB, 下载次数: 20)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 12:46 , Processed in 0.435193 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表