ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助一个VBA代码(提取指定文件夹内的图片和文字,列表组合并生成新文件)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-23 09:34 | 显示全部楼层 |阅读模式
本帖最后由 liuwenjietz 于 2020-1-23 09:37 编辑

将 faces文件夹与PersonInfo信息匹配填到安全教育上岗证模板上,数量根据PersonInfo自动计算,达到效果.jpg的效果 可以直接A4打印。 image.png 加wx酬谢

打印.zip

331.34 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2020-1-23 12:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
先做个记号,再看看呗

TA的精华主题

TA的得分主题

发表于 2020-1-23 13:27 | 显示全部楼层
Sub 生成证件()
Application.ScreenUpdating = False
Set Sh = ThisWorkbook.Worksheets("上岗证")
f = Dir(ThisWorkbook.Path & "\PersonInfo.csv")
If f = "" Then MsgBox "数据源文件不存在": Exit Sub
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & f, 0)
With wb.Worksheets("PersonInfo")
    rs = .Cells(Rows.Count, 1).End(xlUp).Row
    ar = .Range("a14:m" & rs)
End With
wb.Close False
ws = Sh.Cells(Rows.Count, 2).End(xlUp).Row + 10
  For Each a In Sh.Shapes
    a.Delete
Next
Sh.Rows("9:" & ws).Delete
Sh.Range("d2:d8,i2:i8") = Empty
m = 9
If (UBound(ar) - 1) / 2 = Int((UBound(ar) - 1) / 2) Then
    k = Int((UBound(ar) - 1) / 2)
Else
    k = Int((UBound(ar) - 1) / 2) + 1
End If
For i = 2 To k
    Sh.Rows("1:8").Copy Sh.Cells(m, 1)
    m = m + 8
Next i
ws = Sh.Cells(Rows.Count, 2).End(xlUp).Row
m = 2
For i = 2 To UBound(ar) Step 2
    Sh.Cells(m, 4) = ar(i, 1)
    Sh.Cells(m + 1, 4) = ar(i, 9)
    Sh.Cells(m + 2, 3) = ar(i, 10)
    Sh.Cells(m + 3, 3) = ar(i, 12)
    Sh.Cells(m + 4, 4) = ar(i, 13)
    Sh.Cells(m + 5, 4) = ar(i, 5)
    Sh.Cells(m + 6, 4) = ar(i, 11)
    fs1 = ThisWorkbook.Path & "\faces\" & Trim(ar(i, 1)) & "_" & Mid(ar(i, 5), 2, Len(ar(i, 5)) - 1) & ".jpg"
    If Dir(fs1) <> "" Then
        Sh.Select
           Sh.Range("e" & m & ":e" & m + 6).Select
           ActiveSheet.Pictures.Insert(fs1).Select
       With Selection.ShapeRange
         Selection.ShapeRange.LockAspectRatio = msoFalse
            .Top = Sh.Range("e" & m & ":e" & m + 6).Top + 1
            .Left = Sh.Range("e" & m & ":e" & m + 6).Left + 1
            .Width = Sh.Range("e" & m & ":e" & m + 6).Width
            .Height = Sh.Range("e" & m & ":e" & m + 6).Height
        End With
    End If
   
    If i = UBound(ar) Then GoTo 10
    Sh.Cells(m, 9) = ar(i + 1, 1)
    Sh.Cells(m + 1, 9) = ar(i + 1, 9)
    Sh.Cells(m + 2, 8) = ar(i + 1, 10)
    Sh.Cells(m + 3, 8) = ar(i + 1, 12)
    Sh.Cells(m + 4, 9) = ar(i + 1, 13)
    Sh.Cells(m + 5, 9) = ar(i + 1, 5)
    Sh.Cells(m + 6, 9) = ar(i + 1, 11)
    fs1 = ThisWorkbook.Path & "\faces\" & Trim(ar(i + 1, 1)) & "_" & Mid(ar(i + 1, 5), 2, Len(ar(i + 1, 5)) - 1) & ".jpg"
    If Dir(fs1) <> "" Then
        Sh.Select
           Sh.Range("j" & m & ":j" & m + 6).Select
           ActiveSheet.Pictures.Insert(fs1).Select
       With Selection.ShapeRange
         Selection.ShapeRange.LockAspectRatio = msoFalse
            .Top = Sh.Range("j" & m & ":j" & m + 6).Top + 1
            .Left = Sh.Range("j" & m & ":j" & m + 6).Left + 1
            .Width = Sh.Range("j" & m & ":j" & m + 6).Width
            .Height = Sh.Range("j" & m & ":j" & m + 6).Height
        End With
    End If
    m = m + 8
10:
Next i
Application.ScreenUpdating = True
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2020-1-23 13:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
打印.zip (550.89 KB, 下载次数: 44)

TA的精华主题

TA的得分主题

发表于 2020-1-23 15:59 | 显示全部楼层
Sub lkyy()
Dim i%, n%, r模板 As Range, c复制%, r%, L As Byte, Pic As Shape, t$
Dim Mp$, Mf, ar文(1 To 1000)
Mp = ThisWorkbook.Path & "\faces\"
Mf = Dir(Mp & "*.jpg")
Do While Mf <> ""
    m = m + 1
    ar文(m) = Mf
Mf = Dir()
Loop

With Workbooks.Open(ThisWorkbook.Path & "\PersonInfo.csv")
    ar = .Sheets("PersonInfo").Range("a15:M100")
    .Close 0
End With
ReDim br(1 To UBound(ar), 1 To 7)
For i = 1 To UBound(ar)
    If ar(i, 1) <> "" Then
        n = n + 1
        br(n, 1) = ar(i, 1)
        br(n, 2) = ar(i, 9)
        br(n, 3) = ar(i, 10)
        br(n, 4) = ar(i, 12)
        br(n, 5) = ar(i, 13)
        br(n, 6) = ar(i, 5)
        br(n, 7) = ar(i, 11)
    End If
Next
Rows("2:2000").Delete
For Each Pic In ActiveSheet.Shapes
    If Pic.Left < Range("k1").Left Then Pic.Delete
Next
c复制 = Int(n / 2 + 0.5)
Set r模板 = Sheet2.Rows("1:8")
For i = 1 To c复制
    r模板.Copy Cells(i * 8 - 7, 1)
Next
For i = 1 To n
    r = Int((i + 1) / 2) * 8 - 6
    L = 3 + ((i + 1) Mod 2) * 5
    For j = 0 To 6
        Cells(r + j, L) = br(i, 1 + j)
    Next
    t = ""
    For j = 1 To m
        If InStr(ar文(j), br(i, 1)) Then t = Mp & ar文(j): Exit For
    Next
    If t <> "" Then '判断是否存在这个相片
        Set p = Sheet1.Pictures.Insert(t)
        With p
            .ShapeRange.LockAspectRatio = msoFalse
            .Top = Cells(r, L + 2).Top
            .Left = Cells(r, L + 2).Left
            .Height = 106.5
            .Width = 81.75
        End With
    End If
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2020-1-23 16:00 | 显示全部楼层
请看看附件……

打印.rar

340.99 KB, 下载次数: 141

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 20:00 , Processed in 0.036905 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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