ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎样把表格中的照片和数据导入到另一份表中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-25 21:37 | 显示全部楼层 |阅读模式
各位大佬好  怎样把文件中照片和毕业生登记表中的数据和照片导入到毕业生花名册中,并且在毕业生花名册中分班级保存。 Desktop.zip (775.15 KB, 下载次数: 7)

TA的精华主题

TA的得分主题

发表于 2023-7-26 09:04 | 显示全部楼层
Sub test()
Application.ScreenUpdating = False
Dim ar As Variant
Dim d As Object, dc As Object
Set d = CreateObject("scripting.dictionary")
lj = ThisWorkbook.Path & "\照片\"
Set Sht = Sheets("模板")
With Sheets("信息表")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    If r < 7 Then MsgBox "信息表为空!": End
    ar = .Range("a1:g" & r)
End With
For i = 2 To UBound(ar)
    If Trim(ar(i, 1)) <> "" Then
        d(Trim(ar(i, 1))) = ""
    End If
Next i
For Each k In d.keys
    n = 0: w = w + 1
    ReDim br(1 To UBound(ar), 1 To UBound(ar, 2))
    For i = 2 To UBound(ar)
        If Trim(ar(i, 1)) = k Then
            n = n + 1
            For j = 1 To UBound(ar, 2)
                br(n, j) = ar(i, j)
            Next j
        End If
    Next i
    If n / 4 = Int(n / 4) Then
        gs = n / 4
    Else
        gs = Int(n / 4) + 1
    End If
    If w = 1 Then
        Sht.Copy
        Set wb = ActiveWorkbook
        With wb.Worksheets(1)
            .Name = k
            If n > 4 Then
                m = 11
                For s = 1 To gs - 1
                    .Rows("3:10").Copy .Cells(m, 1)
                    m = m + 10
                Next s
            End If
            m = 3
            For i = 1 To n Step 4
                y = 2
                For s = i To i + 3
                    If s <= r Then
                        .Cells(m, y) = br(s, 2)
                        .Cells(m + 1, y) = br(s, 3)
                        .Cells(m + 2, y) = br(s, 4)
                        .Cells(m + 3, y) = br(s, 5)
                        .Cells(m + 6, y + 1) = br(s, 6)
                        .Cells(m + 7, y + 1) = br(s, 7)
                        tp = Dir(lj & br(s, 2) & ".jpeg")
                        If tp <> "" Then
                            .Cells(m, y + 2).Resize(4, 1).Select
                            cellL = ActiveCell.Left + 3
                            cellT = ActiveCell.Top
                            Set shpPic = ActiveSheet.Shapes.AddPicture(lj & tp, msoFalse, msoTrue, cellL, cellT, 1, 1)
                            shpPic.Top = .Cells(m, y + 2).Resize(4, 1).Top + 1
                            shpPic.Left = .Cells(m, y + 2).Resize(4, 1).Left + 1
                            shpPic.Width = .Cells(m, y + 2).Resize(4, 1).Width - 1
                            shpPic.Height = .Cells(m, y + 2).Resize(4, 1).Height - 1
                            Set shpPic = Nothing
                        End If
                        y = y + 4
                    End If
                Next s
                m = m + 10
            Next i
        End With
    Else
        Sht.Copy after:=wb.Worksheets(wb.Worksheets.Count)
        With wb.Worksheets(wb.Worksheets.Count)
            .Name = k
            If n > 4 Then
                m = 11
                For s = 1 To gs - 1
                    .Rows("3:10").Copy .Cells(m, 1)
                    m = m + 10
                Next s
            End If
            m = 3
            For i = 1 To n Step 4
                y = 2
                For s = i To i + 3
                    If s <= r Then
                        .Cells(m, y) = br(s, 2)
                        .Cells(m + 1, y) = br(s, 3)
                        .Cells(m + 2, y) = br(s, 4)
                        .Cells(m + 3, y) = br(s, 5)
                        .Cells(m + 6, y + 1) = br(s, 6)
                        .Cells(m + 7, y + 1) = br(s, 7)
                        tp = Dir(lj & br(s, 2) & ".jpeg")
                        If tp <> "" Then
                            .Cells(m, y + 2).Resize(4, 1).Select
                            cellL = ActiveCell.Left + 3
                            cellT = ActiveCell.Top
                            Set shpPic = ActiveSheet.Shapes.AddPicture(lj & tp, msoFalse, msoTrue, cellL, cellT, 1, 1)
                            shpPic.Top = .Cells(m, y + 2).Resize(4, 1).Top + 1
                            shpPic.Left = .Cells(m, y + 2).Resize(4, 1).Left + 1
                            shpPic.Width = .Cells(m, y + 2).Resize(4, 1).Width - 1
                            shpPic.Height = .Cells(m, y + 2).Resize(4, 1).Height - 1
                            Set shpPic = Nothing
                        End If
                        y = y + 4
                    End If
                Next s
                m = m + 10
            Next i
        End With
    End If
Next k
wb.SaveAs Filename:=ThisWorkbook.Path & "\" & Format(Date, "yyyy年m月") & "毕业生花名册.xlsx"
wb.Close
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2023-7-26 09:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Desktop.rar (781.18 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-26 15:16 | 显示全部楼层

1690355457045.png 从第二行表开始姓名等全部往下两行。照片不知道为什么插不进去。

TA的精华主题

TA的得分主题

发表于 2023-7-26 21:54 | 显示全部楼层
798266086 发表于 2023-7-26 15:16
从第二行表开始姓名等全部往下两行。照片不知道为什么插不进去。

上传的附件数据太少,要得到完美解决就多上传你的数据呀

TA的精华主题

TA的得分主题

发表于 2023-8-17 11:17 | 显示全部楼层
798266086 发表于 2023-7-26 15:16
从第二行表开始姓名等全部往下两行。照片不知道为什么插不进去。


楼上代码稍稍修改下即可

如图所示:两种修改方案

  1, m = 11   修改为  m = 13 ,  每页前4个与后4个中间有两行空白,方便截剪。
  2,m = m + 10 修改为 m = m + 8,每页前4个与后4个中间无空白。

另外如需打印,模版需先排好版
微信图片_20230817110956.png

TA的精华主题

TA的得分主题

发表于 2023-8-17 11:26 | 显示全部楼层
本帖最后由 Lovertdos 于 2023-8-17 15:49 编辑

照片传不上的问题忘记说了,原代码只支持jpeg格式图片。
解决方法:将两处 tp = Dir(lj & br(s, 2) & ".jpeg") 
     修改为 tp = Dir(lj & br(s, 2) & ".*")
即可支持所有图片格式
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 18:50 , Processed in 0.040547 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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