邮件合并中的条件图像

邮件合并中的条件图像

先前的答案建议在这里这让我得出结论,我可以合并图像,但如果不控制数据源,我如何根据字段条件使图像不同?例如,如果客户是加拿大人,徽标将是一回事,如果是美国人,徽标将是另一回事。实际上存在帐户分组,母公司有不同的指定响应。我需要根据收到的数据进行条件合并。

答案1

您可以通过一个模板使用条件 IF 字段来实现此目的。

例如,如果您只有两个可能的选项,您可以使用这个:

{ IF {MERGEFIELD Country} = "USA" "(The USA image)" "(The Canadian image)" }

但是,如果您有两个以上的选择,则更适合这样做:

{ IF {MERGEFIELD Country} = "USA" "(The USA image)" "" }
{ IF {MERGEFIELD Country} = "Canada" "(The Canada image)" "" }
{ IF {MERGEFIELD Country} = "UK" "(The UK image)" "" }

您希望这三张图像在同一行并排显示。如果国家代码与合并后的图像不匹配,则图像将被隐藏,只显示匹配的图像。

答案2

我所做的是为每个组制作不同的模板。例如,一个模板适用于加拿大。另一个适用于美国。(将加拿大模板复制为美国模板,并将加拿大的徽标更改为美国的徽标)

以下是我为我的项目编写的代码。如果Student是三年级,则显示三年级模板。如果他们是四年级学生,则显示四年级模板。在我的数据中,我有一列说明需要哪个模板。

样本数据

StudentID     Grade      Template            ....
---------     -----      ----------               
 3424           3        3rd.docx                  
 4424           4        4th.docx                  
 3198           3        3rd.docx                  

VBA 代码:

Public Sub Print_Student_Report_by_St_ID(StudentID_in As Long, _
                            Optional TemplateName_in As String, _
                            Optional TemplatePath_in As String, _
                            Optional DisplayWord_in As Boolean)
On Error GoTo ErrorHandler

 Dim this_path As String
 Dim this_db As String

     Dim strTemplateFileName As String
     Dim strTemplatePath As String

     'Folder Location
     this_path = Application.CurrentProject.Path & "\"
     this_db = this_path & Application.CurrentProject.Name

     'Find Template
     strTemplatePath = TemplatePath_in
     strTemplateFileName = TemplateName_in

     'Convert St_ID to SQL Statement
     Dim ssql As String

        ssql = SELECT_SOMETHING

     Dim word_app As Word.Application
     Set word_app = CreateObject("Word.Application")

     If DisplayWord_in Then
        word_app.Visible = True
     Else
        word_app.Visible = False
     End If

     Dim word_doc  As Word.Document
     Set word_doc = word_app.Documents.Open(TemplatePath_in & strTemplateFileName)

     If word_doc.MailMerge.State <> wdMainAndDataSource Then

         With word_doc.MailMerge

                 'Add UserName and Password to prevent it ask password everytime if not user windows logon password

                 Dim strConnection As String
                 strConnection = "Provider=SQLOLEDB.1;Initial Catalog=database_name;" _
                                 & "Data Source=domain.com;" _
                                 & "UID=user;PWD=password;"

                 .OpenDataSource _
                 Name:=this_db, _
                 ReadOnly:=True, LinkToSource:=True, _
                 SQLstatement:=ssql, Connection:=strConnection

                .Destination = wdSendToPrinter
                .Execute

         End With

    End If

Exit_Sub:

        word_doc.Close SaveChanges:=wdDoNotSaveChanges
        word_app.Quit wdDoNotSaveChanges

        Set word_doc = Nothing
        Set word_app = Nothing

        Exit Sub

ErrorHandler:

        Select Case Err.Number
        Case 0

        Case Else
                'Show Some Error

        End Select
        Resume Exit_Sub
        Resume

    End Sub

但缺点是如果你有太多的组,你可能需要一堆模板,这很难维护。

相关内容