如果你要在 Excel 中使用 VBA 操作 Word,第一步,你必须引用 Word 对象库,可以使用前期绑定或者后期绑定。
引用 Word 对象库
前期绑定
打开 VBE(快捷键 ALT+F11),在 VBE 中单击【工具】,选择【引用】,在【引用 VBAProject】对话框中选择 【Microsoft Word 16 Object Library】(根据你的 Office 版本选择,本操作适用于 MS Office 2019)。
' 早期绑定
Dim wdApp As Word.Application
Set wdApp = New Word.Application
后期绑定
将应用程序变量声明为对象,VBA 引擎在运行时连接到正确的应用程序。
' 后期绑定
Dim wdApp As Object
Set wdApp = CreateObject("Word.Application")
使应用可见
在设置 Word 应用程序的引用后,你可能需要使其可见。
wdApp.Visible = True
激活应用
在设置 Word 应用程序的引用后,你可能还需要激活 Word。
wdApp.Visible = Activate
操作 Word
如果你要在 Excel 中操作 Word 文档,只需添加对你上面创建的 Word 的引用。
举例来说,在 Word 中的代码:
Documents.Add
如果需要在 Excel 中操作,需要这样使用:
wdApp.Documents.Add
关闭应用程序
一旦操作完成,你需要关闭 Word 实例,并释放内存。
wdApp.Quit
Set wdApp = Nothing
示例:在 Excel 中使用 VBA 复制数据到 Word
前期绑定
本示例使用前期绑定,新建一个 Word 空白文档,插入一个书签,并将 Excel 活动工作表中的数据复制到新建的书签处,并把 Word 文档保存在桌面上。最终效果如下:
Sub CreateWordDoc()
'前期绑定:VBE > 工具 > 引用 > Microsoft Word 16 Object Library
'定义变量
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
'新建一个Word实例
Set wdApp = New Word.Application
With wdApp
'设置Word可见
.Visible = True
'激活Word
.Activate
'新增空白文档
Set wdDoc = .documents.Add
With .Selection
'居中对齐
.ParagraphFormat.Alignment = 1 'wdAlignParagraphCenter = 1
'加粗
.BoldRun
'16号字
.Font.Size = 16
'输入文字
.TypeText "销售报表"
'取消加粗
.BoldRun
'新建一行
.TypeParagraph
'11号字
.Font.Size = 11
'左对齐
.ParagraphFormat.Alignment = 7 'wdAlignParagraphLeft = 7
'新建一行
.TypeParagraph
End With
With wdDoc
'在当前位置插入书签
.Bookmarks.Add Name:="SalesTable"
'复制Excel数据
ThisWorkbook.Sheets("2023").Range("A1").CurrentRegion.Copy
With .ActiveWindow.Selection
'定位书签
.Goto -1, , , "SalesTable" 'wdGoToBookmark = -1
'在书签处粘贴Excel数据
.Paste
'调整表格宽度,适应窗口
.Tables(1).AutoFitBehavior (2) 'wdAutoFitWindow = 2
End With
'将文档保存在桌面上
.SaveAs Environ("UserProfile") & "\Desktop\Excel操作Word示例" & Format(Now, "yyyy-mm-dd hh-mm-ss") & ".docx"
'关闭文档
.Close
End With
'关闭Word应用程序
.Quit
End With
End Sub
运行本示例后,你会看到 Word 程序打开一下又关闭了,如果不想这样可以注释掉:
''设置Word可见
'.Visible = True
''激活Word
'.Activate
后期绑定
如果使用后期绑定,只需要把2至8行替换成:
'后期绑定,无需引用
'定义变量
Dim wdApp As Object
Dim wdDoc As Object
'新建一个Word实例
Set wdApp = CreateObject("Word.Application")
但是在实际的应用中,由于使用前期绑定很多代码可以省略,只更改引用的话,代码一般会出错,需要多调试,完整的后期绑定代码如下:
Sub CreateWordDoc()
'后期绑定,无需引用
'定义变量
Dim wdApp As Object
Dim wdDoc As Object
'新建一个Word实例
Set wdApp = CreateObject("Word.Application")
With wdApp
'设置Word可见
.Visible = True
'激活Word
.Activate
'新增空白文档
Set wdDoc = .documents.Add
With .Selection
'居中对齐
.ParagraphFormat.Alignment = 1 'wdAlignParagraphCenter = 1
'加粗
.BoldRun
'16号字
.Font.Size = 16
'输入文字
.TypeText "销售报表"
'取消加粗
.BoldRun
'新建一行
.TypeParagraph
'11号字
.Font.Size = 11
'左对齐
.ParagraphFormat.Alignment = 7 'wdAlignParagraphLeft = 7
'新建一行
.TypeParagraph
End With
With wdDoc
'在当前位置插入书签
.Bookmarks.Add Name:="SalesTable"
'复制Excel数据
ThisWorkbook.Sheets("2023").Range("A1").CurrentRegion.Copy
With .ActiveWindow.Selection
'定位书签
.Goto -1, , , "SalesTable" 'wdGoToBookmark = -1
'在书签处粘贴Excel数据
.Paste
'调整表格宽度,适应窗口
.Tables(1).AutoFitBehavior (2) 'wdAutoFitWindow = 2
End With
'将文档保存在桌面上
.SaveAs Environ("UserProfile") & "\Desktop\Excel操作Word示例" & Format(Now, "yyyy-mm-dd hh-mm-ss") & ".docx"
'关闭文档
.Close
End With
'关闭Word应用程序
.Quit
End With
End Sub
我们在实际应用中一般不直接让程序生成书签,通常的做法是新建一个空白文档,设定好文档格式,在需要引入 Excel 数据的位置插入书签(单击【插入】选项卡,在【链接】组里单击【书签】。),然后将文档保存为 Word 模板(.dotx
),我们再从 Excel 中对这个 Word 模板进行操作。比如 Word 中重要的邮件合并就是这样做的。