如何使用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
热门推荐
祖母绿的历史与知识
女子手相图解:从基本元素到综合分析
孩子长高要补赖氨酸吗?还不如每天吃一个…
欧阳明高:汽车行业将从企业竞争转向模式竞争
11种肩关节脱位复位方法,骨科医生收藏必备!
聚脲材料:性能优势与应用领域
多种气体传感器在综合管廊巡检机器人中的应用
金价突破历史新高!
可以用Windows系统当NAS吗?搭建指南与优劣分析
柔光版平板和标准版区别
巴巴多斯国家概况
气压983适合钓鱼吗
营养八宝粥的制作方法(健康生活从饮食开始)
如何通过统计性能提升数据分析的精准度?
男性出汗多?从饮食调理入手
公版VS非公版显卡:游戏玩家如何抉择?性能与个性化大比拼!
一个向左一个向右, OpenAI与DeepSeek 谁能主导AI竞争格局?
黑眼圈并非“魔性附体”,皮肤科医生教你恢复“凡人”本色
贵阳一市民家中水费半年暴涨5倍引质疑,水务:可免费测漏水
房子没人住却产生五千多水费,该如何避免高额水费?
锂电池组不一致会带来哪些危害和问题?
机械工程专业毕业生兴趣爱好的正确写法与常见误区
八代笔记本CPU性能全面分析(深入了解八代笔记本CPU的优势和劣势)
皮肤问题吃维生素C还是维生素B?
磷酸铁锂电池:优点与缺点全解析
盘点演坏人出名的12位演员:有的是国家一级演员,有的戏红人不红
柴油车不加尿素能开吗?
汽车尿素如何有效使用?使用汽车尿素的注意事项有哪些?
探访吴家将抗金遗迹仙人关前,金兀术“割须弃袍”
昨晚做的梦太无聊?别急,也许有办法让你实现梦境“共享”