专栏首页完美ExcelVBA专题06-6:利用Excel中的数据自动化构建Word文档—Excel与Word整合示例3

VBA专题06-6:利用Excel中的数据自动化构建Word文档—Excel与Word整合示例3

示例3:从Excel中提取数据生成不同的Word报表

从前面的学习中,我们已经学会了使用书签将Excel中提取的数据放置到文档中指定的位置。下面的示例演示如何运用这些技巧,使用Excel分析得来的数据来生成多个报表。

如下图12所示的工作表,左侧是数据区域,右侧使用数据透视表来分析这些数据。

图12:数据工作表

现在,要生成3份Word文档,分别报告Central、East、West这三个部门的业绩。为方便编写程序,工作表中使用了名称来代替单元格或单元格区域:定义了一个名为rngBookMarks的书签区域I20:J22,与Word模板中的书签相对应;将单元格J20命名为ptrDivName,在程序中更新该单元格的内容。并且,该单元格内容更新后,使用查询VLookup函数来更新单元格J21和J22中的内容。

创建一个名为SalaryReport.dotx的Word文档模板,如下图13所示,在3个位置分别定义了3个书签,与Excel工作表中的数据一致,并且段落开头的词与书签DivName链接。

图13:SalaryReport.dotx模板文档

在Excel工作簿中,打开VBE,插入标准模块,输入代码:

' 从Excel获取数据填充Word模板
' 来源于Professional ExcelDevelopment(2nd Edition)
Sub WordGenerateDivisionSummaries()
   Dim wrdApp As Word.Application
   Dim wrdDoc As Word.Document
   Dim wrdrngBM As Word.Range
   Dim piDiv As Excel.PivotItem
   Dim rngBookmark As Excel.Range
   Dim sPath As String
   Dim sBookmarkName As String
   On Error GoTo ErrorHandler
    '启动Word
   Set wrdApp = CreateObject("Word.Application")
    '获取路径
   sPath = ThisWorkbook.Path & "\"
    '基于模板创建新文档
   Set wrdDoc = wrdApp.Documents.Add(Template:=sPath &"SalaryReport.dotx")
    '遍历数据透视表中的每个部门
   For Each piDiv In wksData.PivotTables(1).PivotFields("Division").PivotItems
        '填充部门名称单元格
       wksData.Range("ptrDivName") = piDiv.Value
        '更新该部门相应的数据
       wksData.Calculate
        '使用工作表数据填充模板中的书签
       For Each rngBookmark In wksData.Range("rngBookmarks").Rows
            '获取书签名
            sBookmarkName =rngBookmark.Cells(1, 1).Value
            '获取书签相关的Word范围区域
            Set wrdrngBM =wrdDoc.Bookmarks(sBookmarkName).Range
            '设置该区域的文本(这将删除该书签)
            wrdrngBM.Text =rngBookmark.Cells(1, 2).Text
            '重新创建书签以便下次循环
            wrdDoc.Bookmarks.Add sBookmarkName,wrdrngBM
       Next rngBookmark
        '更新与这些书签链接的字段
       wrdDoc.Fields.Update
        '保存填充好的文档
       wrdDoc.SaveAs sPath & "SalaryResults - " & piDiv.Value& ".doc"
   Next piDiv
   MsgBox "部门薪酬汇总报表已成功生成."
ErrorExit:
   On Error Resume Next
    '关闭Word文档
   wrdDoc.Close
   Set wrdDoc = Nothing
    '退出Word程序
   wrdApp.Quit False
   Set wrdApp = Nothing
   Exit Sub
ErrorHandler:
    '显示错误号和错误描述
    '在标题栏备注程序
   MsgBox "错误 " &Err.Number & vbLf & Err.Description, _
          vbCritical, "程序:WordGenerateDivisionSummaries"
   Resume ErrorExit
End Sub

注意,代码使用了后期绑定。运行代码后,每基于Word模板生成一份文档,都会修改模板中相应书签位置的内容并更新链接处的内容,以生成具体的文档。代码运行成功后,会弹出如下图14所示的信息提示。

图14:代码运行成功提示

其中生成的一份文档内容如下图15所示,可以看出相应位置的文本已更新与报表内容一致。

图15

本文分享自微信公众号 - 完美Excel(excelperfect),作者:fanjy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Excel小技巧41:在Word中创建对Excel表的动态链接

    Office套件之间协作配合非常方便。例如,我们可以在Word中放置一个来自Excel的表,并且可以随着Excel中该表的数据变化而动态更新。这需要在Word中...

    fanjy
  • VBA专题06-1:利用Excel中的数据自动化构建Word文档—了解Word对象模型

    前言:将Excel与Word合理地整合交互,往往能够获得很好的效果,极大地提高办公自动化效率。例如,将数据存放在Excel工作表中,Word文档按需自动化提取其...

    fanjy
  • VBA专题06-3:利用Excel中的数据自动化构建Word文档—从Excel中访问Word文档

    要从Excel中访问Word文档,需要建立对Word的连接。建立连接有两种方法:后期绑定和前期绑定。前期绑定能够更容易地利用自动提示编写代码,更早发现编码错误,...

    fanjy
  • SEO×静态、动态、伪静态URL的特性

    1、静态页面 优点:相比其他两种页面,速度最快。不仅仅是秒杀秒客网加载速度最快,而且不需要从数据库里面提取数据,速度快的同时,也不会对服务器产生压力。 缺点:由...

    企鹅号小编
  • jieba分词器详解及python实战

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菲宇
  • PHP学习小知识点归纳

    Heredoc结构形式长字符串 首先使用定界符表示字符串(<<<),接着在“<<<“之后提供一个标识符GOD,然后是字符串,最后以提供的这个标识符结束字符串...

    Ewdager
  • 如何转行成为初级测试?

    今天来聊一聊如何成为一枚初级软件测试工程师?之前在贴吧和知乎经常收到小伙伴私信问如何转行到互联网行业,以及谈到自己半路转行没什么经验,也不是学的计算机相关专业,...

    八音弦
  • 数据类型判断

    typeof 操作符返回一个表示数据类型的字符串,它可以应付常规场景下的数据类型判断。对基本数据类型 undefined, boolean, string, n...

    Chor
  • 渗透某网站

    lonelyvaf
  • python pythonnic给py增加说明

    葫芦

扫码关注云+社区

领取腾讯云代金券