目录
前言
本文使用Excel中的VBA编辑器,实现将表格中数据批量填写进固定模板的word文档。本文设置了四个填充项,可根据需要自行添加更多数据导入位置。
步骤
准备工作
- 准备好word模板文件,将需要填写的位置用特殊变量代替
如写为:{$供应商名称},{$采购品类}
2.打开excel-开发工具-插入-ActiveX控件
- 开发工具不在工具栏中的,可按以下路径设置:
- 文件-选项-自定义功能区-开发工具
- 绘制控件后右键查看代码-进入VBA编辑器
- 进入工具-引用
引用加载项
- 选择“Microsoft Word16.0 Object Library”-浏览-在路径中找到“MSWORD.OLB”-打开-确定
- 完成配置-粘贴代码-保存
运行
- 保存excel表类型为启用宏的
- 打开excel-点击控件-选择任一列-确定生成
- 在弹出的第一个界面中选择Word模板-第二个界面选择保存地址-确定-批量生成合同
代码如下:
Private Sub CommandButton1_Click()
On Error GoTo Err_cmdExportToWord_Click
Dim objApp As Object 'Word.Application
Dim objDoc As Object 'Word.Document
Dim strTemplates As String '模板文件路径名
Dim strFileName As String '将数据导出到此文件
Dim i As Integer
Dim contact_NO As String
Dim side_A As String
Dim side_B As String
Dim side_C As String'数据导出
Dim data_areas As Range
Dim total_data As Integer
Set data_areas = Application.InputBox(prompt:="请鼠标选择需要输出数据的区域", Title:="选择", Type:=8) '选取输出的数据区域
i = data_areas.Row '获取选取区域开始行所在行号
j = data_areas.Rows.Count ' 获取选取区域总行数
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Add "word文件", "*.doc*", 1
.AllowMultiSelect = False
If .Show Then strTemplates = .SelectedItems(1) Else Exit Sub
End With
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then Exit Sub
Path = .SelectedItems(1)
End With
Set objApp = CreateObject("Word.Application")
objApp.Visible = False
For k = i To i + j - 1
contact_NO = Cells(k, 1)
side_A = Cells(k, 2)
side_B = Cells(k, 3)
side_C = Cells(k, 4)'数据引用位置
Set objDoc = objApp.Documents.Open(strTemplates, , False)
strFileName = contact_NO & ".doc"
If Not strFileName Like "*.doc" Then strFileName = strFileName = strFileName & ".doc"
If Dir(strFileName) <> "" Then Kill strFileName
With objApp.Application.Selection
.Find.ClearFormatting
.Find.Replacement.ClearFormatting
With .Find
.Text = "{$供应商}"
.Replacement.Text = contact_NO
End With
.Find.Execute Replace:=wdReplaceAll
With .Find
.Text = "{$供应商名称}"
.Replacement.Text = side_A
End With
.Find.Execute Replace:=wdReplaceAll
With .Find
.Text = "{$采购品类}"
.Replacement.Text = side_B
End With
.Find.Execute Replace:=wdReplaceAll
With .Find
.Text = "{$结算方式}"
.Replacement.Text = side_C
End With
.Find.Execute Replace:=wdReplaceAll'数据填充
End With
objDoc.SaveAs Path & "\" & strFileName
objDoc.Saved = True
objDoc.Close
Next k
MsgBox "合同文本生成完毕!", vbYes + vbExclamation
Exit_cmdExportToWord_Click:
Set objApp = Nothing
Set objDoc = Nothing
Set objTable = Nothing
Exit Sub
Err_cmdExportToWord_Click:
MsgBox Err.Description, vbCritical, "出错"
Resume Exit_cmdExportToWord_Click
End Sub