跳到主要内容

在 Excel 中使用 VBA 操作 Word

如果你要在 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 文档保存在桌面上。最终效果如下:

在 Excel 中使用 VBA 复制数据到 Word
在 Excel 中使用 VBA 复制数据到 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
示例下载

名称:在Exce中使用VBA操作Word.zip

格式:XLSM

链接:本地下载

我们在实际应用中一般不直接让程序生成书签,通常的做法是新建一个空白文档,设定好文档格式,在需要引入 Excel 数据的位置插入书签(单击【插入】选项卡,在【链接】组里单击【书签】。),然后将文档保存为 Word 模板(.dotx),我们再从 Excel 中对这个 Word 模板进行操作。比如 Word 中重要的邮件合并就是这样做的。

评论

您的电子邮件地址不会显示出来。*号为必填项。