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

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

示例代码如下:
Sub ExportToWord_2()Const wdAlignParagraphCenter As Long = 1Const wdBreakPage As Long = 7Const wdFormatXMLDocument As Long = 16Const wdReplaceAll As Long = 2Dim wb As Workbook: Set wb = ThisWorkbookDim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")Dim dataArr As VariantdataArr = ws.Range("A1").CurrentRegion.ValueDim wdApp As Object: Set wdApp = CreateObject("Word.Application")wdApp.Visible = FalseDim wdDoc As Object: Set wdDoc = wdApp.Documents.Add()With wdDoc.Styles("Normal").Font.Name = "微软雅黑".Size = 40End WithWith wdDoc.Styles("Normal").ParagraphFormat.Alignment = wdAlignParagraphCenter.SpaceAfter = 0.SpaceBefore = 0End WithDim boxNo As String, qty As String, models As String, fname As StringDim arrModels, j As Long, modelItem As String, i As Long, sTxt As StringConst 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) ThenarrModels = 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 jEnd IfNext isTxt = Mid(sTxt, Len(PAGE_BREAK) + 3)wdDoc.Characters.Last.Text = sTxtWith wdDoc.Content.Find.Text = PAGE_BREAK.Replacement.Text = "^m".Forward = True.Wrap = 1.Format = False.MatchWildcards = False.Execute Replace:=wdReplaceAllEnd Withfname = wb.Path & "\" & Format(Now, "yyyymmdd_hhnnss") & ".docx"wdDoc.SaveAs2 Filename:=fname, FileFormat:=wdFormatXMLDocumentwdDoc.Close FalsewdApp.QuitMsgBox "已生成 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行代码弹出提示框,显示生成文件的完整路径及文件名。
