ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助如何根据姓名提取文件夹内相同名字的相片到WORD文档指定位置。谢谢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-7-23 19:38 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 qinhuan66 于 2013-7-23 20:34 编辑

求助如何根据姓名提取文件夹内相同名字的相片到WORD文档指定位置。谢谢
求助.rar (140.71 KB, 下载次数: 51)

2013-07-23_193242.gif
2013-07-23_192431.gif
2013-07-23_193507.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-23 20:17 | 显示全部楼层
有什么好的方法,麻烦各位老师帮指点一下。不胜感谢。

TA的精华主题

TA的得分主题

发表于 2013-7-23 20:29 | 显示全部楼层
建议使用邮件合并功能      

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-23 20:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
dajiahaoxinku12 发表于 2013-7-23 20:29
建议使用邮件合并功能

可是我已以生成全部(差不多1000人)的准考到到一个WORD文档了,能否用宏来解决呢?谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-23 21:01 | 显示全部楼层
忘记说明一下了,我的准考证信息(姓名、身份证号码、报考岗位、考场地址等都是在EXCEL表格里用VBA写到WORD文档的,能否也一起把相片也到贴相片那里呢。谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-23 22:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 qinhuan66 于 2013-7-24 07:53 编辑


2013-07-23_215039.gif

代码好下:
Private Sub CommandButton4_Click()
Dim Word对象 As New Word.Application, 当前路径, 导出文件名, 导出路径文件名, 判断, i, j
   Dim Str1, Str2
   当前路径 = ThisWorkbook.Path & "\准考证发放包"
   最后行号 = Sheets("数据库").Range("B1002").End(xlUp).Row
      B = InputBox("请输入数据开始行,不能小于3行。", "提示")
  C = InputBox("请输入数据结束行,不能大于10000行。", "提示")


   判断 = 0
   导出文件名 = "准考证(参加本次考试全部人员).doc"
   导出路径文件名 = 当前路径 & "\" & 导出文件名
   FileCopy 当前路径 & "\准考证打印模板.doc", 导出路径文件名
   With Word对象
      .Documents.Open 导出路径文件名
      .Visible = False


      .ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument '设置位置在正文
      .Selection.WholeStory '全选
      .Selection.Copy '复制
      If 最后行号 > 3 Then
         For i = 3 To C - 1 '复制页
            .Selection.EndKey Unit:=wdStory '光标置于文件尾
            .Selection.InsertBreak Type:=wdPageBreak '分页
            .Selection.PasteAndFormat (wdPasteDefault) '粘贴
         Next i
      End If
      For i = B To C
        For j = 1 To 10 '填写文字数据
           Str1 = "数据" & Format(j, "000")
           Str2 = Sheets("数据库").Cells(i, j)
           .Selection.HomeKey Unit:=wdStory '光标置于文件首
           If .Selection.Find.Execute(Str1) Then '查找到指定字符串
              .Selection.Font.Color = wdColorAutomatic '字符为自动颜色
              .Selection.Text = Str2 '替换字符串
           End If
        Next j

      Next i
   End With
   Word对象.Documents.Save
   Word对象.quit
   Set Word对象 = Nothing
   If 判断 = 0 Then
      i = MsgBox("朋友你需要的准考证已生成完毕,现已保存到“" & 导出路径文件名 & "”!如需要帮助请QQ联系695360052", 0 + 48 + 256 + 0, "提示:"): Unload 登录操作界面
   End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-24 09:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
求助各位专家,是否有解决的方法。谢谢

TA的精华主题

TA的得分主题

发表于 2013-7-25 10:32 | 显示全部楼层
qinhuan66 发表于 2013-7-24 09:44
求助各位专家,是否有解决的方法。谢谢

提供一个代码仅供参考(只对本文档),文档中有多少人,要在相片里放多少张照片。
  1. Sub test()
  2.     Dim s As Shape, a As Shape, myrange As Range, i%
  3.     For Each s In ActiveDocument.Shapes
  4.         If s.Type = msoTextBox Then
  5.             i = i + 1
  6.             If i = 1 Then
  7.                 Set a = ActiveDocument.Shapes.AddPicture _
  8.                         (FileName:=ActiveDocument.Path & "\相片\姓名" & i & ".jpg")
  9.             Else
  10.                 Set myrange = ActiveDocument.GoTo(wdGoToPage, wdGoToAbsolute, i)
  11.                 Set a = ActiveDocument.Shapes.AddPicture _
  12.                         (FileName:=ActiveDocument.Path & "\相片\姓名" & i & ".jpg", Anchor:=myrange)
  13.             End If
  14.             a.Top = s.Top + 50
  15.             a.Left = s.Left + 2
  16.             a.Height = s.Height
  17.             a.Width = s.Width - 5
  18.         End If
  19.     Next
  20. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-7-25 11:45 | 显示全部楼层
wx486 发表于 2013-7-25 10:32
提供一个代码仅供参考(只对本文档),文档中有多少人,要在相片里放多少张照片。

如果相片的姓名1、姓名2换成真实姓名又如何呢。谢谢

TA的精华主题

TA的得分主题

发表于 2013-7-25 15:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wx486 于 2013-7-25 15:32 编辑
qinhuan66 发表于 2013-7-25 11:45
如果相片的姓名1、姓名2换成真实姓名又如何呢。谢谢


看在送花的份儿上,{:soso_e113:}又写了个代码,请测试。耐心点儿,代码运行有点慢。

  1. Sub test()
  2.     Dim s As Shape, a As Shape, myrange As Range, i%, j%, arr()
  3.     Dim reg As Object, matches, ma, subma
  4.     For Each s In ActiveDocument.Shapes
  5.         If s.Type = msoPicture Then s.Delete
  6.     Next
  7.     Set reg = CreateObject("vbscript.regexp")
  8.     With reg
  9.         .Global = True
  10.         .Pattern = "(姓      名:)(\S+)(\r)"
  11.         Set matches = .Execute(ActiveDocument.Content)
  12.     End With
  13.     ReDim arr(1 To matches.Count)
  14.     For Each ma In matches
  15.         i = i + 1
  16.         subma = ma.submatches(1)
  17.         arr(i) = subma
  18.     Next
  19.     For Each s In ActiveDocument.Shapes
  20.         If s.Type = msoTextBox Then
  21.             j = j + 1
  22.             If j = 1 Then
  23.                 Set a = ActiveDocument.Shapes.AddPicture _
  24.                         (FileName:=ActiveDocument.Path & "\相片" & arr(j) & ".jpg")
  25.             Else
  26.                 Set myrange = ActiveDocument.GoTo(wdGoToPage, wdGoToAbsolute, j)
  27.                 Set a = ActiveDocument.Shapes.AddPicture _
  28.                         (FileName:=ActiveDocument.Path & "\相片" & arr(j) & ".jpg", Anchor:=myrange)
  29.             End If
  30.             a.Top = s.Top + 50
  31.             a.Left = s.Left + 2
  32.             a.Height = s.Height
  33.             a.Width = s.Width - 5
  34.         End If
  35.     Next
  36.     MsgBox "ok"
  37. End Sub
复制代码


评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2025-1-13 15:54 , Processed in 0.028317 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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