ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

请问如何批量插入图片呢?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-8-7 11:33 | 显示全部楼层 |阅读模式
就是怎么样才能要把几十张图片插入同一列或同一行,图片的尺寸要保持一致,且正好填满一个单元格?麻烦各位解答,谢谢了!

TA的精华主题

TA的得分主题

发表于 2010-8-7 14:56 | 显示全部楼层

使用vba批量导入同一文件夹下的图片,并按列排序放置,大小对准单元格。

Sub 单元格自动插入图片()
    '选定起始单元格后,按一定行数(1-n)自动往返插入各种格式的图片,
    '并在单元格中写入插入图片的名称。

    Pf = "ai,"
    Pf = Pf & "bmp,bmz"
    Pf = Pf & "cdr,cgm,"
    Pf = Pf & "dib,dwg,dxf,"
    Pf = Pf & "emf,emz,eps,exf,exif,"
    Pf = Pf & "fpx,"
    Pf = Pf & "gfa,gif,"
    Pf = Pf & "hdr,"
    Pf = Pf & "ico,"
    Pf = Pf & "jfif,jpe,jpeg,jpg,"
    Pf = Pf & "pcd,pct,pcx,pcz,pict,png,psd,"
    Pf = Pf & "raw,rle,"
    Pf = Pf & "svg,"
    Pf = Pf & "tga,tif,tiff,"
    Pf = Pf & "ufo,"
    Pf = Pf & "wdp,wmf,wmz,"
   
    K = InputBox("插入行数,1=按列挿入", "插入行数", 1)
    If K = "" Then Exit Sub
    Dim Rng  As Range: Set Rng = ActiveCell
   
    OpenFile = Application.GetOpenFilename("Picture Files(*.*),*.*", , "打开目标文件夹后选择任一图片即可指定文件夹。或按取消则会将当前文件所在文件夹认作指定文件夹。")
    If OpenFile = False Then
        myDir = ThisWorkbook.Path & "\"
    Else
        myDir = Left(OpenFile, InStrRev(OpenFile, "\"))
    End If
    Filename = Dir(myDir)
   
    Application.ScreenUpdating = False
   
    Do While Filename <> ""
        If InStr(Pf, LCase(Right(Filename, Len(Filename) - InStrRev(Filename, ".")))) > 0 Then
            Rng.Cells(1 + n \ K, n Mod K + 1).Select
            ActiveCell = Left(Filename, InStrRev(Filename, ".") - 1)
            
            ActiveSheet.Pictures.Insert(myDir & Filename).Select
            With Selection
                .Placement = xlMoveAndSize
                .ShapeRange.LockAspectRatio = msoFalse
                .Top = ActiveCell.Top
                .Left = ActiveCell.Left
                .Height = ActiveCell.Height
                .Width = ActiveCell.Width
            End With
            n = n + 1
        End If
        Filename = Dir
    Loop
   
    Application.ScreenUpdating = True
    Rng.Select
End Sub

[ 本帖最后由 香川群子 于 2010-9-9 19:39 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-8-7 19:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-9-8 11:15 | 显示全部楼层

再请教个问题

试验了一下,确实很好用,高手。。。。。但我还有个要求,比如说有两行,第一行是姓名,第二行能不能将按第一行的姓名插入照片(照片以姓名命名),对号入座。谢谢~!

TA的精华主题

TA的得分主题

发表于 2010-9-8 15:21 | 显示全部楼层

这样试试看

原帖由 5465465465 于 2010-9-8 11:15 发表
试验了一下,确实很好用,高手。。。。。但我还有个要求,比如说有两行,第一行是姓名,第二行能不能将按第一行的姓名插入照片(照片以姓名命名),对号入座。谢谢~!


Sub 选择范围后按姓名插入照片()
    Dim Rng As Range
    Set Rng = Selection
   
    k = MsgBox("Yes=按姓名行下插入,No=按姓名列右挿入,Cancel=直接覆盖插入", vbYesNoCancel)
    If k = vbYes Then
        r = 1: c = 0
    ElseIf k = vbNo Then
        r = 0: c = 1
    Else
        r = 0: c = 0
    End If
   
   
    Pf = "ai,"
    Pf = Pf & "bmp,bmz"
    Pf = Pf & "cdr,cgm,"
    Pf = Pf & "dib,dwg,dxf,"
    Pf = Pf & "emf,emz,eps,exf,exif,"
    Pf = Pf & "fpx,"
    Pf = Pf & "gfa,gif,"
    Pf = Pf & "hdr,"
    Pf = Pf & "ico,"
    Pf = Pf & "jfif,jpe,jpeg,jpg,"
    Pf = Pf & "pcd,pct,pcx,pcz,pict,png,psd,"
    Pf = Pf & "raw,rle,"
    Pf = Pf & "svg,"
    Pf = Pf & "tga,tif,tiff,"
    Pf = Pf & "ufo,"
    Picformat = Pf & "wdp,wmf,wmz,"
   
    OpenFile = Application.GetOpenFilename("Picture Files(*.*),*.*", , "打开目标文件夹后选择任一图片即可指定文件夹。或按取消则会将当前文件所在文件夹认作指定文件夹。")
    If OpenFile = False Then
        myDir = ThisWorkbook.Path & "\"
    Else
        myDir = Left(OpenFile, InStrRev(OpenFile, "\"))
    End If
   
    Application.ScreenUpdating = False
   
    Filename = Dir(myDir)
     
    Do While Filename <> ""
        If InStr(Picformat, LCase(Right(Filename, Len(Filename) - InStrRev(Filename, ".")))) > 0 Then
            PicName = Left(Filename, InStrRev(Filename, ".") - 1)
            Rng.Select
            On Error Resume Next
            Selection.Find(What:=PicName, After:=ActiveCell,LookAt:=xlWhole).Activate
   
            If Err.Number <> 0 Then
                Err.Clear
            Else
                ActiveSheet.Pictures.Insert(myDir & Filename).Select
                With Selection
                    .Placement = xlMoveAndSize
                    .ShapeRange.LockAspectRatio = msoFalse
                    .Top = ActiveCell.Offset(r, c).Top
                    .Left = ActiveCell.Offset(r, c).Left
                    .Height = ActiveCell.Offset(r, c).Height
                    .Width = ActiveCell.Offset(r, c).Width
                End With
            End If

        End If
        Filename = Dir
    Loop
    Rng.Select
   
End Sub

[ 本帖最后由 香川群子 于 2010-9-9 18:28 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-9-9 16:37 | 显示全部楼层

感谢

本想没人回贴呢,太激动了。。。|
我的问题是这样的:我有100个人,第一行是姓名,第二行要从指定文件夹中插入相应的图片。就是做个判断,某人对应插入其照片。

TA的精华主题

TA的得分主题

发表于 2010-9-9 16:49 | 显示全部楼层

再请教个问题

我录制了一个宏,为什么出现错误呢?万分感谢了

复件 新建文件夹.rar

96.9 KB, 下载次数: 139

TA的精华主题

TA的得分主题

发表于 2010-9-9 19:33 | 显示全部楼层
原帖由 5465465465 于 2010-9-9 16:49 发表
我录制了一个宏,为什么出现错误呢?万分感谢了


因为我原来的宏代码,没有考虑到插入图片后的图片序号增加,因此反复使用时会出错。
现在已经改为直接选择刚插入的图片,进行处理。所以问题已经解决了。

实际上5楼代码就是专为你的要求设计的。


请看附件。

[ 本帖最后由 香川群子 于 2010-9-9 19:35 编辑 ]

插入图片.rar

23.37 KB, 下载次数: 515

TA的精华主题

TA的得分主题

发表于 2010-9-9 22:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

终极提问

非常感谢香川群子对我无私的帮助,谢谢了!
    其实这项工作困扰我很长时间了, 只因水平太低,想弄,却一直弄不好。现在合盘提出,希望您在百忙之中给予指点迷津。

职工登记.rar

192.18 KB, 下载次数: 248

TA的精华主题

TA的得分主题

发表于 2010-9-10 11:26 | 显示全部楼层

说明

中国-龙就是我,昨晚回家,用户名和密码忘了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 07:38 , Processed in 0.039633 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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