导语:使用VBA,我们可以在Office应用软件之间相互访问,这样就能够实现许多工作的自动化,例如数据整合、报表创建等。本文展示了一个将Excel工作簿自动转换成Word总结报告的示例。
示例工作簿的工作表Sheet1中的内容如下图1所示。我们可以看到,在该工作表中有一系列简单的数据,以及根据这些数据创建的两个图表。
图1
下面,我们将根据这些数据和图表使用VBA自动创建一份简洁的Word报告。
按Alt F11组合键,打开VBE,插入一个标准模块。由于我们要与Word交互,因此要使用相应的Word对象,可以使用前期绑定,即单击VBE菜单中的“工具——引用”,在弹出的“引用”对话框中找到并选取“MicrosoftWord XX.0 Object Library”库,如下图2所示。
图2
也可以使用后期绑定,即在代码中使用CreateObject函数来创建应用程序对象实例。本例中使用后期绑定。
在标准模块中输入下面的代码:
代码语言:javascript复制Sub BuildWord() Dim i As Integer Dim strDocTitle As String Dim strDocBody As String Dim strSubBody(1 To 2) As String '文档标题 strDocTitle = "商品年度销售量分析" '文档内容 strDocBody = "下面的内容是上一年度的商品销售量分析," & _ "分别是4个季度的销售量。" & _ "使用了两个图表,一个是柱状图,一个是饼图," & _ "分别从不同的角度开展分析。" '介绍图表的内容 strSubBody(1) = "这是销售量分析的第1个图表。" & _ "可以看出四季度销量最高,一季度销量最低。" strSubBody(2) = "这是销售量分析的第2个图表。" & _ "可以看出二季度和四季度占据了大部分面积。" '生成Word文档 Dim oWordApp As Object Dim oWordDoc As Object Set oWordApp =CreateObject("Word.Application") Set oWordDoc = oWordApp.Documents.Add '在Word文档中输入标题和内容 With oWordApp .Selection.Style =.ActiveDocument.Styles("标题 1") .Selection.TypeText strDocTitle .Selection.TypeParagraph .Selection.TypeText strDocBody End WithEnd Sub
运行后,将生成如下图3所示的Word文档。
图3
可以看到,代码在Word中插入了2段内容:第1段是标题并应用了相应的标题样式,第2段是一个普通的段落。
接着,我们添加图表及相应的介绍,可以使用下面的代码:
'在Word文档中插入图表并输入相应的文本
For i = 1 To 2
Worksheets("Sheet1").ChartObjects(i).Activate
Worksheets("Sheet1").ChartObjects(i).Copy
With oWordApp
.Selection.TypeParagraph
.Selection.Style = .ActiveDocument.Styles("标题 2")
.Selection.TypeText ActiveChart.ChartTitle.Text
.Selection.TypeParagraph
.Selection.TypeText strSubBody(i)
.Selection.TypeParagraph
.Selection.Paste
End With
Next i
代码遍历了工作表中的两个图表,将其复制到Word文档中并添加相应的段落和文本。
完整的代码如下:
代码语言:javascript复制Sub BuildWord() Dim i As Integer Dim strDocTitle As String Dim strDocBody As String Dim strSubBody(1 To 2) As String '文档标题 strDocTitle = "商品年度销售量分析" '文档内容 strDocBody = "下面的内容是上一年度的商品销售量分析," & _ "分别是4个季度的销售量。" & _ "使用了两个图表,一个是柱状图,一个是饼图," & _ "分别从不同的角度开展分析。" '介绍图表的内容 strSubBody(1) = "这是销售量分析的第1个图表。" & _ "可以看出四季度销量最高,一季度销量最低。" strSubBody(2) = "这是销售量分析的第2个图表。" & _ "可以看出二季度和四季度占据了大部分面积。" '生成Word文档 Dim oWordApp As Object Dim oWordDoc As Object Set oWordApp =CreateObject("Word.Application") Set oWordDoc = oWordApp.Documents.Add '在Word文档中输入标题和内容 With oWordApp .Selection.Style =.ActiveDocument.Styles("标题 1") .Selection.TypeText strDocTitle .Selection.TypeParagraph .Selection.TypeText strDocBody End With '在Word文档中插入图表并输入相应的文本 For i = 1 To 2 Worksheets("Sheet1").ChartObjects(i).Activate Worksheets("Sheet1").ChartObjects(i).Copy With oWordApp .Selection.TypeParagraph .Selection.Style =.ActiveDocument.Styles("标题 2") .Selection.TypeText ActiveChart.ChartTitle.Text .Selection.TypeParagraph .Selection.TypeText strSubBody(i) .Selection.TypeParagraph .Selection.Paste End With Next i '使Word文档可见 oWordApp.Visible = True '保存文档 oWordDoc.SaveAs ThisWorkbook.Path &"testdoc.docx" '退出Word 'oWordApp.Quit '释放对象变量 Set oWordDoc = Nothing Set oWordApp = NothingEnd Sub
运行代码后,生成的Word报告文档如下图4所示。
图4
这里介绍的实现自动生成Word报告的代码很清晰,比较容易理解,也容易结合实际工作表稍作修改实现相应的报告。强烈建议你动手实践上述示例代码,以更好地加深理解,促进更灵活地运用到自已的实际中。