如何在vba中使用Word Application对象的邮件合并事件?

在word中内置了许多与邮件合并相关的事件,这些邮件合并的事件都是由Application对象触发的,具体如下图所示:

灵活地使用这些事件,可以极大地增强邮件合并的功能。

比如希望在邮件合并完成以后,将邮件合并后文档中表格的空白行删除,可以使用Application.MailMergeAfterMerg事件,步骤如下:

1.在ThisDocument类模块的模块级声明中定义一个具有事件的Application对象变量,如下所示:

Public WithEvents oApp As Word.Application

2.在Document对象的Open事件中,将Word.Application赋值给变量oApp,如下所示:

Private Sub Document_Open()
    Set oApp = Word.Application
End Sub

3.编写Application对象的相应事件代码,比如本文中的MailMergeAfterMerge事件:

Private Sub oApp_MailMergeAfterMerge(ByVal Doc As Document, ByVal DocResult As Document)
    Dim oT As Table
    Dim oRng As Range
    Dim oCol As Column
    Dim oRow As Row
    Dim oCell As Cell
    With DocResult
        For Each oT In .Tables
            With oT
                iRow = .Rows.Count
                iCol = .Columns.Count
                For i = iRow To 1 Step -1
                    n = 0
                    For j = iCol To 1 Step -1
                        Set oCell = .Cell(i, j)
                        '空白单元格含有两个字符Chr(13) & Chr(7)
                        If oCell.Range.Text = Chr(13) & Chr(7) Then
                            n = n + 1
                        End If
                    Next j
                    If n = iCol Then
                        .Rows(i).Delete
                    End If
                Next i
            End With
        Next
    End With
End Sub

注意:以上所有的代码都位于ThisDocument类模块中。

4.关闭保存word文档,再次打开后就可以使用word Application对象的MailMergeAfterMerge事件。

当运行主文档的邮件合并,待邮件合并完成后,邮件合并后的新文档中的表格的所有空白行都将删除。

 

 

 

       

发表评论