ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 777|回复: 7

[求助] VBA获取单元格中的图片

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-14 12:17 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

之前写的VBA程序,可以获取相应单元格的值,若想获取相应单元里贴的图片,如何修改?
获取单元格值的语句如下:

TargetSheet.Range("BN35").Value = SourceSheet.Cells(RowIndex, "K").Value

TA的精华主题

TA的得分主题

发表于 2024-3-14 13:58 | 显示全部楼层
首先,我非高手,对这方面的了解我也只算是皮毛,
既然(暂时)没人发表意见,那我来发表一下我的个人看法,不一定正确,如有误,望指正。

第一点,关于楼主所说的“单元格中的图片”这一词并不准确,
单元格是包含有值、以及各种种样的格式设置,但并不包含图片,
也就是说,我们看到的图片,并不属于某个单元格,图片是浮动在单元格之上的,
我们平常要确定(找到)一个图片,要么在插入图片时给它人为地命名,
例如“图片001”、“图片ABC”,当需要“用”它时,就用名字找它,
如果不知道它的名字,那就只能从位置找它,
例如遍历工作表中的所有图片,找出左边界在B3单元格的左边界之右、上边界在B3单元格顶边界之下……的那张图,
就是用单元格的边界和图片边界之间的关系来找到自己想找的那张图。

第二点,楼主原问题中的“获取”二字有问题,
图片找到以后,下一步呢?图片是无法获取的,
我们一般找到该图片后,有多种处理方法,
常用的有:把该图片保存为不同格式的图像文件、改变尺寸、旋转图片、把图片移动到别的位置、删除掉等等,
因为不能理解楼主所说的“获取”具体是何意,所以很难提供相应的代码。

最后,对于这类问题,最好由楼主提供实例文件,
然后告诉我们,找到某某图片后,具体要如何操作,
这样的话,解答起来就方便很多。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-14 16:05 | 显示全部楼层
vitrel 发表于 2024-3-14 13:58
首先,我非高手,对这方面的了解我也只算是皮毛,
既然(暂时)没人发表意见,那我来发表一下我的个人看法 ...

我的意思是:
我希望把一个表单一维表的数据分别写在不同的SHEET中,目前我已经会把值写到我要求的表单单元格中,但假如不是值,而是图片,那么应该怎么写?
可以把图片命名好,放在某个文件夹,按名称获取后,填入指定的一个单元格中,比如将:/文件夹/T1.JPG 填入A1单元格里。

最好在此语句中修改:
argetSheet.Range("BN35").Value = SourceSheet.Cells(RowIndex, "K").Value

TA的精华主题

TA的得分主题

发表于 2024-3-14 20:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-3-14 20:10 | 显示全部楼层
写了一个自定义函数,可以获取某一单元格内的图片名称,并形成一个一维数组。。。
Function hasPic(Rng As Range) As String()
    Dim shp As Shape, ar$(), r&
    For Each shp In Rng.Parent.Shapes
        If shp.Type = msoPicture Then
            If Abs((shp.Left + shp.Width / 2) - (Rng.Left + Rng.Width / 2)) < (shp.Width + Rng.Width) / 2 And _
               Abs((shp.Top + shp.Height / 2) - (Rng.Top + Rng.Height / 2)) < (shp.Height + Rng.Height) / 2 Then
               r = r + 1
               ReDim Preserve ar(1 To r)
               ar(r) = shp.Name
            End If
        End If
    Next
    hasPic = ar
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-15 08:00 | 显示全部楼层
小NN 发表于 2024-3-14 16:05
我的意思是:
我希望把一个表单一维表的数据分别写在不同的SHEET中,目前我已经会把值写到我要求的表单 ...

楼主,既然你无法提供实例的话,
我只能提供基础的代码,内有详细说明:
  1. argetSheet.Range("BN35").Select  '先选定一个单元格,作为插入图片的位置依据
  2. ActiveSheet.Shapes.AddPicture "D:\文件夹\T1.JPG", False, True, Selection.Left, Selection.Top, -1, -1
  3. '参数说明:
  4. '   1、必需。图片的路径和文件名
  5. '   2、必需。True则将图片链接到创建对像的文件;False则将图片作为该文件的独立副本
  6. '   3、必需。是否将链接的图片与工作簿一起保存
  7. '   4、必需。Left     图片左边界相对于文档左边界的位置(水平位置),以磅为单位
  8. '   5、必需。Top      图片上边界相对于文档上边界的位置(垂直位置),以磅为单位
  9. '   6、可选。Width    图片的宽度,以磅为单位。-1 表示按原尺寸。
  10. '   7、可选。Height   图片的高度,以磅为单位。-1 表示按原尺寸。
复制代码

补充一句,插入的图片并不属于某个单元格,单元格Cell、Range是没有“图片”这一个属性的,
因此,在用上述代码插入图片后,整张图片是浮在工作表之上,还需使用其它代码,
要么将改变单元格大小以适应图片,要么改变图片大小以适应单元格,有时候还需上下居中、水平居中等,
最终目的就是让插入的图片好像是在单元格内,因为这样才符合我们的使用习惯。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-15 08:16 | 显示全部楼层
新版本的Excel有嵌入到单元格功能,可以绑定图片和单元格,进行引用。      如果不是嵌入而是浮动在单元格上方的图片,想引用图片需要遍历图片找到哪个图片在单元格上方

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-15 10:19 | 显示全部楼层
micch 发表于 2024-3-15 08:16
新版本的Excel有嵌入到单元格功能,可以绑定图片和单元格,进行引用。      如果不是嵌入而是浮动在单元格 ...

多谢提醒。
为了与单位的电脑兼容,我现在用的还是Office 2019,
Excel 2019上暂未发现您所提到的功能,
按您所说,可能要在Excel 2021或以上的版本才能有这个功能了,
如能实现您所说的功能,那确实能方便很多,我也很期待,
再次感谢您的提醒,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 05:56 , Processed in 0.044400 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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