问:Excel擅长数据分析和处理,Word擅长制作漂亮的报表。如果把两者结合起来,在Word中获取Excel数据制作报表文档,一定很爽!通常我们先在Excel中对数据进行分析处理,然后将结果导出到Word中,通过排版制作出有价值、精美的文档。那么,如何使用VBA自动将Excel数据放置在Word文档中呢?
a:先说实现思路,然后用不同情况下的例子来说明。
技术路线图
1.创建一个Word模板,用作数据分析结果的发布平台。在Word模板中,在每个插入点定义一个书签。当然,对于仅导入一个或两个数据表,此步骤是可选的。
2.使用VBA,将Excel中的数据复制到Word文档中,从而形成报表文档。
示例1:自动将Excel数据区复制到Word文档。
如下图所示,工作表数据中单元格区域A1:E8的数据需要自动导出到Word文档中。
第一步:创建一个名为PasteTable.docx的Word文档,然后在要粘贴数据的位置插入一个名为DataTable的书签。关闭文档,并将其放在与Excel文档相同的目录中。
第二步:在Excel VBE中创建对微软Word对象库的引用。
选择“工具——引用”,在引用对话框中选择“微软Word .0对象库”。
第三步:输入以下代码。
子粘贴ExcelTableIntoWord()
声明一个变量。
将我的范围缩小为Excel。范围
将wd调成Word。应用
将wdDoc调成Word。文件
将WdRange调暗为Word。范围
“复制区域”
设置MyRange=Sheets(“数据”)。范围(“A1:E8”)
我的天使。复制
打开Word文档。
设置wd=新单词。应用
设置wdDoc=wd。文档。打开(此工作簿。路径" PasteTable.docx ")
wd。可见=真
将光标移动到书签位置。
设置WdRange=wdDoc。书签(“数据表”)。范围
删除旧表单并粘贴新表单。
出错时继续下一步
WdRange。表(1)。删除
WdRange。粘贴
调整列宽。
WdRange。表(1).Columns.SetWidth _
(MyRange。宽度/MyRange。列数),宽度调整
重新插入书签。
wdDoc。书签。添加“数据表”
内存清理。
设置wd=无
设置wdDoc=无
设置WdRange=无
末端接头
描述:
1.在代码中设置要复制的区域时使用硬编码,我们可以根据实际情况进行调整。
2.将Excel数据表复制到Word时,表格过宽,往往会导致格式问题,在代码中会调整表格的列宽。这是一个调整表格列宽度的技巧,即每列的宽度设置为表格总宽度除以表格列数。
3.将数据粘贴到书签位置时,书签将被覆盖。因此,代码会重新创建书签,以确保下次运行代码时书签仍然存在。
示例2:将多个Excel数据区域复制到一个Word文档中。
有时,需要将多个数据区域复制到一个Word文档中,这些数据区域的大小不同。例如,工作表数据中有两个大小不同的数据区域,应将其复制到同一Word文档中以形成报表文档。
第一步:创建一个名为PasteTable.docx的Word文档,在要粘贴数据的地方插入名为DataTable1和DataTable2的书签。关闭文档,并将其放在与Excel文档相同的目录中。
第二步:将单元格区域A1:E8命名为“rang1”,将单元格区域A11:F15命名为“rang2”。
第三步:在Excel VBE中创建对微软Word对象库的引用。
选择“工具——引用”,在引用对话框中选择“微软Word .0对象库”。
第四步:输入以下代码。
子粘贴ExcelTableIntoWord()
声明一个变量。
将我的范围缩小为Excel。范围
将wd调成Word。应用
将wdDoc调成Word。文件
将WdRange调暗为Word。范围
模糊如龙
打开Word文档。
设置wd=新单词。应用
设置wdDoc=wd。文档。打开(此工作簿。路径" PasteTable.docx ")
wd。可见=真
出错时继续下一步
对于i=1到2
设置MyRange=Names("rang" i)。参考范围
我的天使。复制
设置WdRange=wdDoc。书签(“DataTable”I)。范围
WdRange。表(1)。删除
WdRange。粘贴
WdRange。表(1).Columns.SetWidth _
(450/MyRange。列数),wdAdjustNone
wdDoc。书签。添加“数据表”I,WdRange
接下来我
清空记忆。'
Setwd=无
设置wdDoc=无
设置WdRange=无
末端接头
描述:
1.这种方法相当“愚蠢”。因为Excel中的表格很多,所以要命名尽可能多的区域,然后在Word中建立相应数量的书签。
2.因为表格的大小不同,如果粘贴到Word中时表格太宽,它们会突出到Word页面之外。因此,在设置表格大小时,使用固定的大小来划分表格的列数,以获得表格中每一列的宽度,并自动进行调整。
3.更改书签的文本信息后,书签将被删除。因此,为了使代码重复运行,粘贴数据表后,将重新插入书签。
示例3:将工作表中的数据复制到Word文档中。
前面两个例子中的数据仍然在使用,只是Word中没有使用书签,而是将Excel数据直接复制到Word文档的末尾。
代码如下:
Sub CopyTableToWordDocument()
将wdApp调暗为Word。应用
要复制的区域。
此工作簿。表格(“数据”)。范围(“A1:E8”)。复制
与Word建立连接。
设置wdApp=新单词。应用
使用wdApp
打开Word文档。
. Documents.OpenFilename:=此工作簿。路径" Table.docx "
和。选择
在文档末尾添加一个新段落。EndKey Unit:=wdStory。键入段落。粘贴
以…结尾
.活动文档.保存
退出Word。放弃
以…结尾
设置wdApp=无
末端接头
例4:用Excel数据填写Word的书签位置。
下图所示工作表,其中A2:B4命名为“rngBookmarkList”。
Word文档模板书签。点包含三个书签。
在Excel中运行代码后,书签位置的文本将被替换。
Excel VBE中的代码如下:
子弹出文档1()
作为单词变暗。应用
将wrdDoc调暗为Word。文件
作为字符串模糊空间
将变量标记为变量
暗淡无光标记为长
用工作表数据填充书签数组。
vaBookmarks=wksBookmarks。范围(“rngBookmarkList”)。价值
打开Word。
设置wrdApp=CreateObject("Word。应用程序”)
打开模板进行填充。
sPath=此工作簿。路径“”
设置wrdDoc=wrdApp。文档。添加(模板:=sPath“书签.点”)
用数组中的数据填充模板中的书签。
对于lBookmark=LBound(vabokmark,1)to bound(vabokmark,1)
wrdDoc。书签(瓦布克标记(lBookmark,LBound(瓦布克标记,2)))范围. Text=瓦布克标记(lBookmark,UBound(瓦布克标记,2))
然后
保存已填写的文档并关闭它。
wrdDoc。另存为sPath "Filled1.doc "
wrdDoc。关闭
设置wrdDoc=无
关闭Word。
wrdApp。退出虚假
设置wrdApp=无
末端接头
例5
:使用Excel中的数据分析结果生成不同的Word报表。
如下图所示,工作表中有大量数据,使用透视表对数据进行分析。现在,需要生成三个Word文档,并报告三个部门的性能,即中、东、西。
在工作表中,定义了一个名为rngBookMarks的书签区域I20:J22,它对应于Word模板中的书签。命名单元格J20 ptrDivName,并在程序中更新该单元格的内容。并且,在这个单元格的内容更新之后,使用VLookup函数来更新单元格J21和J22的内容。
创建一个Word模板,并在报告中要更改的三个位置定义三个书签。如下图所示,书签与Excel单元格中的内容一致。
代码运行后,每次基于Word模板生成文档时,都会修改模板中对应书签位置的内容,生成特定的文档。
代码如下:
子词生成概要()
作为单词变暗。应用
将wrdDoc调暗为Word。文件
将wrdrngBM调成Word。范围
将piDiv调成Excel。PivotItem
将笔记本标记为Excel。范围
作为字符串模糊空间
将书签名称设为字符串
出错时转到错误处理程序
打开Word。
设置wrdApp=CreateObject("Word。应用程序”)
sPath=此工作簿。路径""
'基于模板创建新的文档
设置wrdDoc=wrdApp .文档。添加(模板:=Spath”工资报告。点”)
'遍历数据透视表中的每个部门
对于每个piDiv InwksData .数据透视表(1)。数据透视字段("部门")。数据透视项目
'填充部门名单元格
周数据.Range("ptrDivName")=piDiv .价值
'重新计算工作表来更新部门的结果
周数据.计算
'从工作表中取数据填充模板中的书签
对于每个rngBookmark InwksData .范围(“rngBookmarks”).行
'获取书签名
sBookmarkName=rngBookmark .细胞(1,1)。价值
'获取书签跨越的单词区域
设置wrdrngBM=wrdDoc .书签。范围
'设置区域中的文本(这将删除书签)
wrdrngBM .文本=rngBookmark .单元格(1,2)。文本
'重新创建书签以便下次循环
wrdDoc .书签。添加书签名称
下一个rngBookmark
'更新可能与书签相链接的字段
wrdDoc .字段。更新
'保存填充的文档
wrdDoc .savas Spath“薪资结果”PiDiv .价值"。文件"
下一个piDiv
'关闭单词文档
wrdDoc .关闭
设置wrdDoc=无
'关闭单词
wrdApp .退出虚假
设置wrdApp=无
MsgBox "部门汇总生成任务"
出口接头
错误处理器:
'显示错误号和错误描述
'并且在标题栏中注明程序
MsgBox "错误"错误。编号vbLf Err .描述,_
vbCritical,“例程:字生成的视觉摘要”
末端接头
附:Word对象简介
应用
单词应用程序本身,通过该对象创建、打开和保存单词文档。
文件
单词文档对象
书签
书签,包含在文档、书签集合中。要在书签位置放置内容,只须指定其范围属性的文本内容。若更改了书签的文本内容,则删除该书签。
范围
文档中某段连续区域。