ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用vba代码根据指定单元格变化内容动态修改图片引用区域?

如何用vba代码根据指定单元格变化内容动态修改图片引用区域?

作者:绿色风 分类: 时间:2022-08-17 浏览:124
楼主
kevinchengcw
Q: 如何用vba代码根据指定单元格变化内容动态修改图片引用区域?
A: 实现代码如下:
  1. Dim Arr  '定义公共变量(这里为了传递固定的图片位置,如果图片是变动的就不要用公共变量)

  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3. Dim Sh As Shape, N&, I&, Str$
  4. If Not IsArray(Arr) Then  '判断公共变量是否初始化,如果没有始化则进行初始化操作
  5.     For Each Sh In ActiveSheet.Shapes  '循环活动工作簿中的各个图片
  6.         If Sh.TopLeftCell.Column = 11 Then  '如果图片左上角单元格位于K列(如果有不同类型的shape对象,这里可以加上类型判断),则
  7.             If IsEmpty(Arr) Then ReDim Arr(1 To 1) Else ReDim Preserve Arr(1 To UBound(Arr) + 1)  '如果数组未初始化则初始化为1个项目的数组,否则保留即有项目情况下项目数加1
  8.             Arr(UBound(Arr)) = Sh.TopLeftCell.Address(0, 0) & ":" & Sh.BottomRightCell.Address(0, 0)  '向数组最后一项中写入对应图片的左上角到右下角位置字符串
  9.         End If
  10.     Next Sh
  11.     If IsArray(Arr) And UBound(Arr) > 1 Then  '如果公共变量Arr是数组,则项目数大于1,则进行排序操作
  12.         For N = LBound(Arr) To UBound(Arr) - 1  '冒泡排序,根据左上角行号大小从小到大排序
  13.             For I = N + 1 To UBound(Arr)
  14.                 If Range(Arr(N)).Row > Range(Arr(I)).Row Then
  15.                     Str = Arr(N)
  16.                     Arr(N) = Arr(I)
  17.                     Arr(I) = Str
  18.                 End If
  19.             Next I
  20.         Next N
  21.     End If
  22. End If
  23. If Not Intersect(Target, [a1]) Is Nothing Then  '如果A1单元格有变化,则
  24.     If IsArray(Arr) Then  '如果公共变量已初始化则
  25.         If [a1].Value > 0 And [a1].Value <= UBound(Arr) Then ActiveSheet.DrawingObjects("Image1").Formula = "=" & Arr([a1].Value)  '判断A1的值是否处于公共变量数组下标范围中,如果是则修改显示图片的公式引用为对应的图片区域地址
  26.     End If
  27. End If
  28. End Sub
由于excel各版本在图形类操作方面代码不尽相同,本例仅在10下测试,如有其他版本用户可进一步测试及修正。

详见附件及素材源帖。


Book1.rar
2楼
纵鹤擒龙水中月
学习了
3楼
King_Tree
学习了!谢谢
4楼
水星钓鱼
感谢分享
5楼
老糊涂
感谢分享
6楼
zhu918918
非常感谢

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap