微信公众号:yhjbox(永恒君的百宝箱),获取最新文章、资源。

Excel VBA 实例(28) – 批量生成word报告

Excel VBA 实例 永恒君 4494℃ 0评论
之前介绍过如何批量提取word内容到excel的实例:实例(23) - 一键批量提取word表格内容
实例(26) – 一键批量提取word文字内容

今天这个实例就来说说如何将excel中的内容填充到word中,批量生成报告。

1

需求是这样的,这里有一张客户信息表,如下图

要根据现有的模板,对每一个客户生成一份word月度报告,模板如下:
图中的红框信息根据信息表的内容来填写。

最后实现的效果是每个客户一个word文件,里面存放的是月度报告信息,

2

这个需求总体上来说比较简单,操作思路一般是这样:
1、复制一份模板,改成客户的名字;

Newname = "月度收益报告-" & Range("a" & i) & ".docx"        '给新生成的表起个名称
FileCopy mypath & "模板.docx", mypath & Newname             '将模板复制并重命名

2、打开word,将excel客户信息表的内容,通过挨个“查找”关键词的方法,依次将要替换的内容粘贴进去即可。

With wApp
        .Visible = False
        .Documents.Open mypath & Newname                        '打开我们复制的新文件进行更改
        Do While .Selection.Find.Execute("客户")                '寻找客户这个关键词,将其用表格中的姓名来代替
           .Selection.Text = Range("A" & i).Text
           .Selection.HomeKey Unit:=6                            '移动光标至文档开始
        Loop
        If Range("B" & i) = "男" Then                           '将男改成先生,女改成女士
           XB = "先生"
           Else
           XB = "女士"
        End If
        Do While .Selection.Find.Execute("性别")
           .Selection.Text = XB
           .Selection.HomeKey Unit:=6
        Loop
        Do While .Selection.Find.Execute("报告日期")
           .Selection.Text = Range("F" & i).Text '替换字符串
           .Selection.HomeKey Unit:=6
        Loop
        Do While .Selection.Find.Execute("本金金额")
           .Selection.Text = Range("C" & i).Text '替换字符串
           .Selection.HomeKey Unit:=6
        Loop
        Do While .Selection.Find.Execute("收益金额")
           .Selection.Text = Range("D" & i).Text '替换字符串
           .Selection.HomeKey Unit:=6
        Loop
        Do While .Selection.Find.Execute("金额大写")
           .Selection.Text = Range("E" & i).Text '替换字符串
           .Selection.HomeKey Unit:=6
        Loop

    .Documents.Save
    .Quit

End With
3

实现的效果如下:

感兴趣的可以在公号内回复「word报告」自取试用。大家如果觉得实用,点个“在看”并分享给更多的朋友吧。

微信公众号:永恒君的百宝箱
个人博客:www.yhjbox.com

转载请注明:永恒君的百宝箱 » Excel VBA 实例(28) – 批量生成word报告

喜欢 (32)
发表我的评论
取消评论
表情
(1)个小伙伴在吐槽
  1. 很好。
    匿名2021-05-25 13:46 回复