在日常办公中,经常需要将 Excel 中的表格数据导出到 Word 文档进行汇报或打印。本文介绍一种 VBA 方法,可以批量将 Excel 数据导出到 Word。
实例需求:Excel数据表包含三列:箱号、数量、型号。

根据数据创建Word文档
- 设置文档字体(微软雅黑)、字号(40)及水平居中格式
- 每页第一行为空行
- 每组数据分页显示
- 如果第3列有多个型号(逗号分隔),那么拆分为单个型号
Word文档如下图所示。

示例代码如下:
vb
Sub ExportToWord_2()
Const wdAlignParagraphCenter As Long = 1
Const wdBreakPage As Long = 7
Const wdFormatXMLDocument As Long = 16
Const wdReplaceAll As Long = 2
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
Dim dataArr As Variant
dataArr = ws.Range("A1").CurrentRegion.Value
Dim wdApp As Object: Set wdApp = CreateObject("Word.Application")
wdApp.Visible = False
Dim wdDoc As Object: Set wdDoc = wdApp.Documents.Add()
With wdDoc.Styles("Normal").Font
.Name = "微软雅黑"
.Size = 40
End With
With wdDoc.Styles("Normal").ParagraphFormat
.Alignment = wdAlignParagraphCenter
.SpaceAfter = 0
.SpaceBefore = 0
End With
Dim boxNo As String, qty As String, models As String, fname As String
Dim arrModels, j As Long, modelItem As String, i As Long, sTxt As String
Const PAGE_BREAK = "$$$"
For i = 2 To UBound(dataArr, 1)
boxNo = Trim(CStr(dataArr(i, 1)))
qty = Trim(CStr(dataArr(i, 2)))
models = Trim(CStr(dataArr(i, 3)))
If Len(boxNo & qty & models) Then
arrModels = Split(models, ",")
For j = LBound(arrModels) To UBound(arrModels)
modelItem = Trim(arrModels(j))
sTxt = Join(Array(sTxt & PAGE_BREAK, "", _
dataArr(1, 1), boxNo, _
dataArr(1, 2), qty, _
dataArr(1, 3), modelItem), vbCrLf)
Next j
End If
Next i
sTxt = Mid(sTxt, Len(PAGE_BREAK) + 3)
wdDoc.Characters.Last.Text = sTxt
With wdDoc.Content.Find
.Text = PAGE_BREAK
.Replacement.Text = "^m"
.Forward = True
.Wrap = 1
.Format = False
.MatchWildcards = False
.Execute Replace:=wdReplaceAll
End With
fname = wb.Path & "\" & Format(Now, "yyyymmdd_hhnnss") & ".docx"
wdDoc.SaveAs2 Filename:=fname, FileFormat:=wdFormatXMLDocument
wdDoc.Close False
wdApp.Quit
MsgBox "已生成 Word 文件:" & vbCrLf & fname, vbInformation
End Sub
【代码解析】
第1~21行代码与前一篇博客相同,不再赘述, 请参考《快速创建Word箱单(1/2)》。
第24行代码定义分页符占位符常量 PAGE_BREAK 为字符串 $$$。
第25行代码开始循环,从数据第二行起(跳过表头)逐行处理 Excel 数据。
第26~28行代码获取当数据行内容,并去除空格,保存在变量中。
第29行代码判断当前行是否为空,若三列均为空则跳过,否则进入处理逻辑。
第30行代码将型号字符串按英文逗号拆分为数组 arrModels,用于逐个输出。
第31行代码开始循环遍历当前行的每个型号项。
第32行代码去除当前型号项两端空格,赋值给 modelItem。
第33~36行代码将表头字段及当前数据拼接为文本段落,并在每组前面加上分页符占位符。
此处使用了Join函数,其第二参数(即分割符)为换行符 vbCrLf,改用这个结构之后,代码更简洁清晰。
第40行代码去除字符串开头多余的分页符占位符和换行符,得到最终文本 sTxt。
第41行代码将处理后的完整文本写入 Word 文档末尾。
第42~50行代码使用 Word 查找替换功能,将占位符 $$$ 替换为实际分页符^m,实现每行数据分页显示。
第51行代码生成 Word 文件名 fname,命名格式为"年月日_时分秒.docx",并保存在当前工作簿目录。
第52行代码将 Word 文档保存为 .docx 格式。
第53行代码关闭 Word 文档对象,但不保存后续修改。
第54行代码退出 Word 应用程序,释放资源。
第55行代码弹出提示框,显示生成文件的完整路径及文件名。