|
最近,手头上有一工作需要用到邮件合并功能,并且还要插入图片,插入图片用的是域includepicture加邮件合并的合并域来实现的,因为我需要每行数据保存为一个文件,而用word2007只能保存为一个文件,这不符合我想要的效果,好像word2003可以实现保存为不同的文件,但是我没有装2003word,所以只好用了wps,只是保存的时候选择的是doc文件。这样是能够把所有的图片的地址正确的弄进去,可是就是无法实现显示正确的图片,每个文档都显示的是主文档中显示的那张图片,并且在wps下,不管怎么按F9,或是SHIFT+F9都没有用,只有在word下打开,然后CTRL+A全选后,再按F9,才能显示出正确的图片,这很让人恼火,本来邮件合并就是为了省事,不想一个一个的打开文档处理。后来,就想能不能批量实现在word下把所有文件都进行更新域呢。记得以前拼凑过一个批量处理word文档的宏,又在网上搜到了更新域的宏,于是就凑合了一下,生成了下面这个宏。该宏能够实现对于邮件合并后,不能正确显示相应图片的文档进行处理。宏的内容如下,但是如果用的话,需要下载下面的这个文档- Sub 批量更新多个word中的所有域()
- '以下是重复执行代码,也就是选择所有需要进行更新域的word文档
- Dim MyDialog As FileDialog, GetStr(1 To 1000) As String '1000是工作时最多的文档数,可以修改
- On Error Resume Next
- Set MyDialog = Application.FileDialog(msoFileDialogFilePicker)
- With MyDialog
- .Filters.Clear
- .Filters.Add "所有WORD文件", "*.doc", 1
- .AllowMultiSelect = True '允许多项选择
- i = 1
- If .Show = -1 Then
- For Each stiSelectedItem In .SelectedItems
- GetStr(i) = stiSelectedItem
- i = i + 1
- Next
- i = i - 1
- End If
-
- Application.ScreenUpdating = False
- For j = 1 To i Step 1
- Set Doc = Documents.Open(FileName:=GetStr(j), Visible:=True)
- Windows(GetStr(j)).Activate
-
- '以下是在单个文件中运行的宏,也就是对一个文档进行更新域
-
-
- Dim b As Field
- For Each b In ActiveDocument.Fields
- b.Update
- Next
-
- '以上是在单个文件中运行的宏
-
- Selection.Find.Execute Replace:=wdReplaceAll
- Application.Run macroname:="NEWMACROS"
- ActiveDocument.Save
- ActiveWindow.Close
- Next
- Application.ScreenUpdating = True
- End With
- MsgBox "修改完毕!请查看!!", vbInformation
- End Sub
复制代码 最后说明一下,这个文档只能处理后缀名是doc的文件,也就是说邮件合并后得到的文件是word文档才行,测试用在wps上面没有用 |
|