使用VBA对Word Mail Merge进行排序和筛选

时间:2015-11-16 11:11:30

标签: vba ms-word word-vba mailmerge

我正在尝试从Excel电子表格中自动在Word中创建邮件合并。我录制了一个可以完成其中大部分工作的宏,但是当“收件人”编辑时,录制功能无法正常工作。对话框是打开的,所以我需要进入VBA代码进行排序和过滤。目前整个代码是这样的:

Sub Castingdirectors()
'
' Castingdirectors Macro
'
'
    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
    ChangeFileOpenDirectory "Y:\--file path redacted--\CASTING BOOK\"
    ActiveDocument.SaveAs2 FileName:= _
        "Y:\--file path redacted--\Casting Directors.docx", FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False, CompatibilityMode:=14
    ActiveWindow.Close
End Sub

这将生成所有条目的邮件合并。

我需要进行过滤,以便任何字段' CASTING DIRECTOR SORT'空白不包括在内,并按照CASTING DIRECTOR SORT升序排序。

我可以通过插入'跳过记录'来做到这一点。字段进入Word邮件合并文档的正文并进行'排序'手动,但我正在尝试创建一个' master'邮件合并文档,将多个宏分配给命令按钮,这些按钮将执行并保存不同的排序/过滤的不同邮件合并。

1 个答案:

答案 0 :(得分:0)

这是一个好的开始。如果您在“编辑收件人”对话框中更深入一级,我认为您可以使用宏记录器获得所需的全部内容。查看底部的链接列表 - 选择"过滤"。

这允许您定义查询术语并对记录进行排序(对话框中的第二个选项卡)。

编辑:由于宏录制器不再选择它,您需要以另一种方式获取基本的滤镜代码。使用对话框定义过滤器后,创建一个小宏来打印出查询信息:

Sub GetQueryString()
    Debug.Print ActiveDocument.MailMerge.DataSource.QueryString
End Sub

这应该将SQL语句打印到立即窗口(如果你没有看到它,则按Ctrl + G)。您可以在代码中使用它"按原样#34;如果它正确过滤和排序记录。或者你可以修改它以适合你的目的。