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

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

示例代码如下:
Sub ExportToWord_1()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, sTxtFor 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 boxNo <> "" Or qty <> "" Or models <> "" ThenarrModels = Split(models, ",")For j = LBound(arrModels) To UBound(arrModels)modelItem = Trim(arrModels(j))wdDoc.Characters.Last.Text = _vbCrLf & dataArr(1, 1) & vbCrLf & boxNo & vbCrLf & _dataArr(1, 2) & vbCrLf & qty & vbCrLf & _dataArr(1, 3) & vbCrLf & modelItem & vbCrLfIf i < UBound(dataArr) Or j < UBound(arrModels) Then _wdDoc.Characters.Last.InsertBreak wdBreakPageNext jEnd IfNext ifname = wb.Path & "\" & Format(Now, "yyyymmdd_hhnnss") & ".docx"wdDoc.SaveAs2 Filename:=fname, FileFormat:=wdFormatXMLDocumentwdDoc.Close FalsewdApp.QuitMsgBox "已生成 Word 文件:" & vbCrLf & fname, vbInformation
End Sub
【代码解析】
第1~5行代码Word定义常量,由于代码使用了后期绑定方式创建Word对象,因此无法识别这些Word常量,需要转换为对应的数值。
第6行代码声明并设置 wb 为当前工作簿 ThisWorkbook。
第7行代码声明并设置 ws 为当前工作簿中的工作表 “Sheet1”。
第9行代码将 “Sheet1” 工作表的数据表读入数组 dataArr,便于高效批量处理。
第10行代码创建一个 Word 应用程序对象 wdApp。
第11行代码将 Word 应用程序设为不可见状态,以便后台执行操作。
第12行代码创建一个新的 Word 文档对象 wdDoc,并基于默认模板生成空白文档。
第13~16行代码修改 Word 文档的“Normal”样式字体属性,将字体设置为“微软雅黑”、字号为 40,用于输出大标题。
第17~21行代码设置“Normal”样式段落格式,文本居中显示,段前段后间距为零。
第24行代码开始循环,从数据第二行起(跳过表头)逐行读取导出数据。
第25~27行代码获取当数据行内容,并去除空格,保存在变量中。
第28行代码判断当前行是否为空,若三列均为空则跳过,否则进入导出逻辑。
第29行代码将型号字符串按英文逗号拆分为数组 arrModels,用于逐个输出。
第30行代码开始遍历当前行中的每个型号项。
第31行代码去除型号项两端空格并存入变量 modelItem。
第32~35行代码通过字符串拼接方式,将表头字段与当前数据写入 Word 文档,字段之间以换行符 vbCrLf 分隔。
第36行代码判断是否为最后一条记录,若不是则插入分页符,使每组数据独立显示在一页。
第37行代码执行分页符插入操作。
第41行代码生成导出文件名,命名格式为 “年月日_时分秒.docx”,并保存在工作簿同一目录下。
第42行代码将 Word 文档保存到指定路径,格式为 XML Document(.docx)。
第43行代码关闭 Word 文档对象,不保存后续修改。
第44行代码退出 Word 应用程序,释放资源。
第45行代码弹出提示框,显示生成的 Word 文件路径及名称。
