如何使用VBA识别Excel中的"单元格中的图片"
创作时间:
作者:
@小白创作中心
如何使用VBA识别Excel中的"单元格中的图片"
引用
CSDN
1.
https://m.blog.csdn.net/taller_2000/article/details/143284386
Excel 365升级了新功能,支持两种不同的插入图片方式:
- 放置在单元格中(Place in cell),新功能,此操作插入的图片下文中简称为单元格中的图片。
- 放置在单元格上(Place over cell),悬浮图片,Excel以前版本一直支持的功能。
两种方式在Excel中的展示效果如下图所示。
如果希望使用VBA操作单元格中的图片,非常遗憾的是对象模型中并未提供相应的对象,并且该对象不隶属与Shapes或者Pictures对象集合。这就带来的一个棘手的问题,如何使用VBA代码判断一个单元格中是否包含单元格中的图片。
示例代码如下:
Function HasPicInCell(rCell As Range) As Boolean
Dim ShpCnt As Long, Sht As Worksheet
Set Sht = rCell.Parent
ShpCnt = Sht.Shapes.Count
rCell.PlacePictureOverCells
If Sht.Shapes.Count = 0 Then
HasPicInCell = False
Else
HasPicInCell = (ShpCnt < Sht.Shapes.Count)
Dim Shp: Set Shp = Sht.Shapes(Sht.Shapes.Count)
ActiveCell.Select
Shp.Select
Shp.PlacePictureInCell
End If
End Function
【代码解析】
第3行代码获取单元格所在工作表对象。
第4行代码获取Shapes对象个数。
第5行代码将单元格中的图片转换为单元格上的图片(Shape对象),如果不存在单元格中的图片,此行代码并不产生运行时错误,因此无法使用错误捕获方式来实现此功能。
第6行代码判断工作表的Shapes对象个数是否为零,如果满足条件,第7行代码返回False,即不存在单元格中的图片。
否则,第9行代码设置返回值,如果第5行代码执行后,Shapes对象个数增加,说明存在单元格中的图片。
第10行代码获取最后一个Shape对象,即被转换单元格中的图片。
第11行代码看到多余,笔者使用Excel 365 [Version 2411 (Build 18210.20000)],如果不增加此行代码,将导致Excel崩溃,估计是Excel的Bug。
第12行代码选中Shape对象。
第13行代码将Shaped对象转换为单元格中的图片。
使用如下代码核查A1单元格是否存在单元格中的图片。
Sub Demo()
Dim c As Range
Set c = Range("A1")
Debug.Print IIf(HasPicInCell(c), "", "不") & "存在单元格中的图片"
End Sub
热门推荐
铁路退票手续费新规定:法律与实践的深度解析
桂花树适合在哪个纬度生长
用纯度75%的医用酒精消毒时蚂蚁庄园答案
95度酒精能否有效消毒?全面解析酒精浓度与消毒效果
如何设定具体、可测量、可达成、相关、时限性的目标以提高目标管理
职场人和领导之间的5次重要谈话,应该怎么聊?
武功山夜爬攻略
吕叔湘先生关于教育、教师、教学和语文学习的名言
实测:胶片与数码相机的宽容度究竟有多大差距?
DeepSeek技术社区:生成式人工智能的机遇、挑战与未来展望
消化道出血可能出现哪些并发症
Git命令删除GitHub仓库中的指定文件/文件夹
风险项目怎么管理好业务
糖尿病友运动能降血糖,这几种有氧运动效果最佳!
小白如何进入人工智能领域
西兰花的冷冻保存方法(如何冷冻保存新鲜的西兰花)
从膳食中寻找“抗炎”的力量
识别中风的初始症状是什么
【科普】得了面瘫不用慌,及时就医最重要
定制橱柜表面有油渍怎么清洗?定制橱柜怎么保养?
到底有多少人想让“米游”和二次元分家?
过门石高度有什么讲究?家庭装修中的细节决定品质
人才特质测评主要测哪些内容?
大枕大池的后果是什么
什么是大枕大池?解剖位置、功能及临床意义全解析
痛经吃止痛药会有危害吗?美国试管专家:远比你知道的还要可怕!
保险与高端人才的“双向奔赴”
美术老师需要哪些能力?如何培养?是真的吗?怎样提升?
岸本在鸣人与佐助的最后一战中选择逃避忍术决斗:比粉丝们认为的更合适的结局
八旗的真相:用一生的自由换取微薄的三餐