ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 批量更新多个word中的所有域——解决邮件合并图片不能自动更新的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-5-24 23:16 | 显示全部楼层 |阅读模式
最近,手头上有一工作需要用到邮件合并功能,并且还要插入图片,插入图片用的是域includepicture加邮件合并的合并域来实现的,因为我需要每行数据保存为一个文件,而用word2007只能保存为一个文件,这不符合我想要的效果,好像word2003可以实现保存为不同的文件,但是我没有装2003word,所以只好用了wps,只是保存的时候选择的是doc文件。这样是能够把所有的图片的地址正确的弄进去,可是就是无法实现显示正确的图片,每个文档都显示的是主文档中显示的那张图片,并且在wps下,不管怎么按F9,或是SHIFT+F9都没有用,只有在word下打开,然后CTRL+A全选后,再按F9,才能显示出正确的图片,这很让人恼火,本来邮件合并就是为了省事,不想一个一个的打开文档处理。后来,就想能不能批量实现在word下把所有文件都进行更新域呢。记得以前拼凑过一个批量处理word文档的宏,又在网上搜到了更新域的宏,于是就凑合了一下,生成了下面这个宏。该宏能够实现对于邮件合并后,不能正确显示相应图片的文档进行处理。宏的内容如下,但是如果用的话,需要下载下面的这个文档
  1. Sub 批量更新多个word中的所有域()



  2. '以下是重复执行代码,也就是选择所有需要进行更新域的word文档

  3. Dim MyDialog As FileDialog, GetStr(1 To 1000) As String    '1000是工作时最多的文档数,可以修改
  4. On Error Resume Next
  5. Set MyDialog = Application.FileDialog(msoFileDialogFilePicker)
  6. With MyDialog
  7.     .Filters.Clear
  8.     .Filters.Add "所有WORD文件", "*.doc", 1
  9.     .AllowMultiSelect = True '允许多项选择
  10.     i = 1
  11.     If .Show = -1 Then
  12.         For Each stiSelectedItem In .SelectedItems
  13.             GetStr(i) = stiSelectedItem
  14.             i = i + 1
  15.         Next
  16.         i = i - 1
  17.     End If
  18.    
  19.     Application.ScreenUpdating = False
  20.     For j = 1 To i Step 1
  21.         Set Doc = Documents.Open(FileName:=GetStr(j), Visible:=True)
  22.         Windows(GetStr(j)).Activate

  23.         
  24.    '以下是在单个文件中运行的宏,也就是对一个文档进行更新域
  25.         
  26.    
  27. Dim b As Field
  28.     For Each b In ActiveDocument.Fields
  29.         b.Update
  30.     Next

  31.    
  32.     '以上是在单个文件中运行的宏
  33.    
  34. Selection.Find.Execute Replace:=wdReplaceAll

  35. Application.Run macroname:="NEWMACROS"
  36.         ActiveDocument.Save
  37.         ActiveWindow.Close
  38.     Next
  39.     Application.ScreenUpdating = True
  40. End With
  41.     MsgBox "修改完毕!请查看!!", vbInformation
  42.     End Sub



复制代码
最后说明一下,这个文档只能处理后缀名是doc的文件,也就是说邮件合并后得到的文件是word文档才行,测试用在wps上面没有用

TA的精华主题

TA的得分主题

发表于 2014-6-8 16:44 | 显示全部楼层
用上了,顶一个

TA的精华主题

TA的得分主题

发表于 2015-12-27 22:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
好的,正好用得上?

TA的精华主题

TA的得分主题

发表于 2017-7-18 16:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 宏1()
'
' 更新所有图片
'
'
For Each shp In ActiveDocument.Shapes
    shp.Select
    Selection.Fields.Update
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2021-9-22 23:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-9-23 00:38 | 显示全部楼层
用了一下,唯一的弊端是最后一个文件的还需要收到更新不知道是什么情况,就是比如10个文档,执行完毕会把最后一个文档打开展示给你,你会发现就是这个的图片没有更新,好奇怪,就是这个需要手动再更新下,不过已经很好了

TA的精华主题

TA的得分主题

发表于 2023-9-1 14:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习一下,正好可用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 03:17 , Processed in 0.044362 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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