ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 一键批量插入图片的2个疑难问题(已解决,方案上传供分享)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-8-3 14:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
AVEL 发表于 2014-8-2 16:15
For Each rng In picTemp

你不会改的那句  改成这样就好了。

TA的精华主题

TA的得分主题

发表于 2014-8-3 15:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 zjdh 于 2014-8-3 15:41 编辑

那就这样吧
Private Sub CommandButton1_Click()
    On Error Resume Next
    Dim rngTemp As Range, k As Range, shpPic As Picture
    filepath = ThisWorkbook.Path & "\"
    Set rngTemp = Application.InputBox("图片插入区域:", "选择单元格", Type:=8)
    For Each k In rngTemp
        With k
            Filename = Dir(filepath & .Value & "*.jpg")
            Set shpPic = ActiveSheet.Shapes.AddPicture(filepath & Filename, False, True, .Left + 1, .Top + 1, .Width, .Height)
            If Dir(filepath & .Value & ".jpg") <> "" Then
                .ClearComments
                .AddComment
                .Comment.Shape.Fill.UserPicture filepath & "\" & Trim(k) & ".jpg"
                .Comment.Shape.Height = 240
                .Comment.Shape.Width = 320
            End If
        End With
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 18:00 | 显示全部楼层
zjdh 发表于 2014-8-3 13:43
不会啊,我这很正常啊。

老师,我是2013版Office,跟版本有关系的

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 18:13 | 显示全部楼层
本帖最后由 lk710618 于 2014-8-3 18:17 编辑
zjdh 发表于 2014-8-3 15:30
那就这样吧
Private Sub CommandButton1_Click()
    On Error Resume Next

老师,这个代码插入图片会出错,且空白单元格也会贴上了图片,但这样插入的图片,确实可以保存到表格,不是链接
3.jpg
2.jpg
1.jpg

TA的精华主题

TA的得分主题

发表于 2014-8-3 19:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zjdh 于 2014-8-3 19:11 编辑

你再试试
Private Sub CommandButton1_Click()
    On Error Resume Next
    Dim rngTemp As Range, k As Range, shpPic As Picture
    filepath = ThisWorkbook.Path & "\"
    Set rngTemp = Application.InputBox("图片插入区域:", "选择单元格", Type:=8)
    For Each k In rngTemp
        With k
            Filename = Dir(filepath & .Value & "*.jpg")
            If k <> "" Then ActiveSheet.Shapes.AddPicture filepath & Filename, False, True, .Left, .Top, .Width, .Height
            If Dir(filepath & .Value & ".jpg") <> "" Then
                .ClearComments
                .AddComment
                .Comment.Shape.Fill.UserPicture filepath & "\" & .Value & ".jpg"
                .Comment.Shape.Height = 240
                .Comment.Shape.Width = 320
            End If
        End With
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 19:10 | 显示全部楼层
AVEL 发表于 2014-8-3 14:30
你不会改的那句  改成这样就好了。

老师,改成后是这样的:

Private Sub CommandButton1_Click()
On Error Resume Next                                                        '设置错误处理
Application.ScreenUpdating = False                                          '关闭屏幕刷新
Dim rngTemp As Range, k As Range, picPath$, picTemp As Picture              '设定图片名称所在单元格区域
Set rngTemp = Application.InputBox("图片插入区域:", "选择单元格", Type:=8)
For Each k In rngTemp                                                       '循环插入图片
k.Offset(0, 0).Select                                                       '选择插入图片的位置(ActiveSheet.Pictures(k & k.Row).Delete '删除单元格中原来的图片)
picPath = ThisWorkbook.Path & "\" & Trim(k) & ".jpg"                        '定义插入图片的地址
Set picTemp = ActiveSheet.Pictures.Insert(picPath)                          '插入图片
picTemp.Name = k & k.Row                                                    '设定所插入图片的名称
picTemp.Placement = xlMoveAndSize                                           '设置图片可以随单元格的变动而改变大小和位置
With picTemp.ShapeRange
  .LockAspectRatio = msoFalse                                               '取消图片纵横比锁定
  .Height = Selection.Height                                                '设置所插入图片的高度与单元格的高度相等
  .Width = Selection.Width                                                  '设置所插入图片的宽度与单元格的宽度相等
End With
Set picTemp = Nothing                                                       '重置图片对象
Next
Application.ScreenUpdating = True                                           '打开屏幕刷新
filepath = ThisWorkbook.Path                                                '(标注中插入图片)
For Each rng In picTemp
    If rng.Comment Is Nothing And Dir(filepath & "\" & rng.Value & ".jpg") <> "" Then
        rng.AddComment
        rng.Comment.Shape.Fill.UserPicture filepath & "\" & rng.Value & ".jpg"
        rng.Comment.Shape.Height = 240
        rng.Comment.Shape.Width = 320
    End If
    Next
End Sub

可是,这样既不能解决图片的链接问题,也不能解决插入批注选择区域的问题,根本就不插入批注了

TA的精华主题

TA的得分主题

发表于 2014-8-3 19:22 | 显示全部楼层
lk710618 发表于 2014-8-3 19:10
老师,改成后是这样的:

Private Sub CommandButton1_Click()

插入单元格的图片,不是真正的图片,好像只是一个链接,一旦表格发给别人,就看不到图片了(图片很多,不适合发给别人),请问,如何修改VBA可以实现直接将图片插入单元格内,而不是链接?

这个还未 解决 , 我研究过 在2010里 用ActiveSheet.Pictures.Insert 这个模式 是以链接形式产生的  

换一下  ActiveSheet.shapes.addpicture(图片名称 ,true,true,图片左边的位置,图片的顶点,图片的高度,图片的宽度)


TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 19:22 | 显示全部楼层
zjdh 发表于 2014-8-3 19:08
你再试试
Private Sub CommandButton1_Click()
    On Error Resume Next

非常感谢您,老师!不会出现错插图片的情况了,但是,每有一个非空单元格,一旦找不到图片,就会出现一次报错(如上图2),如何取消这样的报错呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-3 19:33 | 显示全部楼层
闻启学 发表于 2014-8-3 19:22
插入单元格的图片,不是真正的图片,好像只是一个链接,一旦表格发给别人,就看不到图片了(图片很多,不适 ...

zjdh老师的VBA已经实现保存图片了,现在就是还有查不到图片的会报错待解决了

TA的精华主题

TA的得分主题

发表于 2014-8-3 20:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
难道2010版容错语句不生效?
On Error Resume Next
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-26 13:37 , Processed in 0.046168 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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