您的位置: 首页 > EXCEL技巧 > ExcelVBA >

用VBA根据单元格值动态改变图片

时间:2014-10-12 整理:docExcel.net

在Excel中通过改变单元格的值来更换图片,通常需要把图片插入到工作簿中,再用公式来更换。该方法在图片较多时有些不便,这时可用VBA代码来进行图片更换,而无需插入这些图片。步骤如下:

1.将所有图片放在一个文件夹中,在下面的示例代码中,图片所在文件夹名称为“图片文件夹”,并将该文件夹与工作簿放置在一起。

将图片文件夹与工作簿放置在一起

2.在工作表中插入一个图片,设置其位置和大小,然后选择该图片,在Excel界面右上角的名称框中输入一个名称后按回车键。在下面的示例代码中,将图片名称设置为“图片 1”。

设置图片名称

3.在工作表中选择某个单元格,如下面的示例代码中的“J4”单元格。用设置数据有效性的方法制作一个下拉列表,这样就可以通过下拉列表选择来某个图片名称。

设置下拉列表来选择图片名称

4.按Alt+F11,打开VBA编辑器,在代码窗口中粘贴下面的代码。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$J$4" Then
Dim Pic As Object, PicPathAndName As String, PicFolder As String
Dim PicT As Integer, PicL As Integer, PicH As Integer, PicW As Integer

'图片文件夹名称
PicFolder = "图片文件夹"
'所选图片路径
PicPathAndName = ThisWorkbook.Path & "\" & PicFolder & "\" & Range("J4") & ".jpg"

Set Pic = ActiveSheet.Shapes("图片 1")
'原图片的位置和大小
With Pic
   PicT = .Top
   PicL = .Left
   PicH = .Height
   PicW = .Width
End With
'删除原图片
Pic.Delete

'插入所选图片
Set Pic = ActiveSheet.Shapes.AddPicture(Filename:=PicPathAndName, LinkToFile:=msoFalse, _
     SaveWithDocument:=msoTrue, Left:=PicL, Top:=PicT, Width:=PicW, Height:=PicH)
'设置图片名称
Pic.Name = "图片 1"
End If

Set Pic = Nothing
End Sub

这样,当在J4单元格中选择不同的图片名称后,工作表中的图片会自动调用图片文件夹中图片进行更换。示例文件下载:http://www.excel123.cn/Soft/vbaxg/201212/42.html

用数组公式获取一列中的第一个非空单元格值 问题:用数组公式获取一列中的第一个非空单元格值
回答:可以用多种方法获取一列或一行中的第一个非空单元格值,例如下面的几个数组公式: 获取一列中第一个非空单元格值,假设数据在A1:A10区域中: =INDEX(A1:A10,MATCH(TRUE,LEN(A1:A10)<>0,0),1) =INDEX(A1:A10,MATCH(,0/(A1:A10<> ),)) =INDEX...
用数组公式从一列中提取非空单元格值 问题:用数组公式从一列中提取非空单元格值
回答:...数组中的空值,最后用INDEX函数返回一列连续的非空单元格值。本例由于A2:A20区域
Excel从多列各取一个单元格值进行组合一例 问题:Excel从多列各取一个单元格值进行组合一例
回答:...工作中遇到一个问题,需要在Excel中从多列各取一个单元格值进行组合,得到全部的组合数据。如图所示,要得到“颜色”、“领型”和“尺码”的全部组合,放到以E2为左上角的区域中。经过一番摸索后总结了几种方法,分别...
在Excel工作表单元格中自动输入数据 问题:在Excel工作表单元格中自动输入数据
回答:...完成键入的项,可以封锁此选项。 如何打开或封锁单位格值的自动完乐成能 1、单击“Microsoft Office 按钮”,然后单击“Excel 选项”。 2、单击“高级”,然后在“编辑选项”下,排除或选中“为单位格值启用影象式键入”...
重点显示出Excel2013某数字范围的单元格 问题:重点显示出Excel2013某数字范围的单元格
回答:...选择第二种:只为包含以下内容的单元格设置格式,单元格值介于200到600之间。 ③下面进行单元格的设置,在填充选项卡中,选择一种颜色,确定。 ④这样就突出某数值区间的单元格,如果大家要突出大于指定值的单元格...
类似自定义筛选包含功能的数组公式 问题:类似自定义筛选包含功能的数组公式
回答:...后用SMALL和OFFSET函数按先后顺序返回包含指定文本的单元格值,对于不包含指定文本的单元格,公式会在D列的后面返回A65536这个几乎用不到的空单元格值。 例如要查找A列包含“12”的数据,在D1中输入“12”即可。 由于用到了S...
相关知识:

下面内容对您也许有用

      话题:excel中如何用VBA使单元格值变化的同时单元格颜色改变
      问:A列单元格的值和B列同行单元格值比较,如果B列单元格的值大于A列同行单元格,该B
      答:选中B列,格式-条件格式,设置条件为大于A1(注意默认$A$1改为A1),格式为红色 excel中使用vba实现单元格计算的 excel vba应用—如何让单元格
      话题:VBA 单元格值改变事件
      指定单元格值改变时调用下面过程 指定单位格为 Worksheets("sheets1").Range("R2")Sub Myfsyyyy().End Sub 那个触发的程序这么些 好像没有直接的单元格事件,只能用SHEET的事件再判断 我有一个
      话题:如何用VBA比较单元格日期值大小
      问:单元格日期格式为 2010-1-31,如何取出这个值,并判断=这个值怎么写?
      答:日期可以直接使用,比如,A1的值为 2010-1-31,:a=date’将当前日期赋值给 a if a=range("a1").value then… VBA编程中对range单元格赋值日期 excel vba 怎么把当前日期复制给
      话题:用VBA对单元格值进行多条件判断?知道
      问:例如:对单元格A1的值,进行判断,如果不包含这些字符A、B、C、D、E、F、G、H、J
      答:有很多算法的啦,我写个一种简单的,应该是A1中有许多字符,比如"lihanru8321"这样的,然后看里面有没有h、a、n,最后提示有没有的意思吧 Sub temp()Dim cell As 重赏—使用vba判断excel中的单元 vBA如何判断一个单元格是否为
      话题:在EXCEl中,用VBA实现单元格颜色改变
      问:具体要求是这样的,A列=B列+C列。已经在A列输入公式。现在想实现这个功能:当A的
      答:这儿就能搞定了 不需要VBA 提问者评价 谢谢,已经搞定啦! excel中如何用VBA使单元格值变化 如何用vba程序改变excel单元格
      话题:excel如何动态取得其他单元格的最大值?要公式不要VBA。谢谢。
      问:比如:A B C D 1 2 3?C单元格是A+B的和,A、B、C单元格的数字是动态可变的,现在
      答:1,用VBA编写的相对简单 2的变化和想法:如被放置在C1 C2 A1,B1,第二次在A2,B2,相应的总和值的变化值,然后在d1=MAX(C:C)我不知道是否能满足您的需求, excel vba 求50个随机数字的最大 excel如何用VBA将一个单元格
      话题:excel中使用vba如何获得单元格的值
      答:获取第一个工作表(表名为AA)中A1的值赋值给X x=sheets(1).[a1]或者 x=sheets(“AA”).[a1]x=sheets(1).cells(1,1)x=sheets(“AA”).cells(1,1)
      话题:用VBA记录单元格里修改时的时间。知道
      问:Public Sub Worksheet_Change(ByVal Target As Range)Dim rng As Range If
      答:请再结合用 Private Sub Worksheet_SelectionChange(ByVal Target As Range)End Sub 这个来捕捉单元格内容的修改。要判断内容是否改变,需要在选中单元格时保存 excel单元格记录修改时间 ps:vba 用vba修改单元格内容
      话题:用VBA动态复制单元格区域
      可以根据自己的需要自行修改数量 Sheets(I).Select Sheets(I).Range("C1:F1").Select Selection.Copy Windows("2.xls").Activate '()括号内改为表2的文件名 Sheets(1).Cells(I,3).Select
      话题:如何用vba程序改变excel单元格内文字的颜色
      如何用vba程序改变excel单元格内文字的颜色 用vba程序改变excel单元格填充颜色的命令是:Cells(1,1).Interior.ColorIndex=RGB(100,100,100),我想改变单元格内文字的颜色该怎么写呢?
最新评论