Imagens condicionais na mala direta

1

Uma resposta anterior sugerida aqui leva-me à conclusão de que posso mesclar imagens, mas sem o controle da fonte de dados como posso tornar a imagem diferente com base em uma condição de campo? Por exemplo, se o cliente for canadense, o logotipo será uma coisa, se nos EUA for outro. Na verdade, existem agrupamentos de contas e as empresas-mãe têm diferentes respostas atribuídas. Preciso fazer mesclagens condicionais com base nos dados que estou recebendo.

    
por datatoo 24.06.2011 / 16:34

2 respostas

2

Você pode conseguir isso por meio de um modelo usando campos IF condicionais.

Por exemplo, se você tiver apenas duas opções possíveis, poderá usar isso:

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

No entanto, se você tiver mais de duas opções, é mais adequado fazer algo assim:

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

Você deseja que todos os três na mesma linha estejam próximos um do outro. Se o código do país não corresponder ao que foi mesclado, as imagens serão ocultadas e somente a imagem da que corresponder será mostrada.

    
por 08.07.2012 / 03:33
1

O que fiz foi criar modelos diferentes para cada grupo. Para o seu exemplo, um modelo é para o canadense. Outra é para os EUA. (Modelo canadense duplicado para ser modelo dos EUA e mudar para o logotipo do canadense para o logotipo dos EUA)

O seguinte é o código que eu fiz para o meu projeto. Se Student estiver na terceira série, mostrará o modelo da terceira série. Se eles são da quarta série, ele puxa o modelo da quarta série. Nos meus dados, tenho uma coluna que explica qual modelo é necessário.

Dados da amostra

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

Código 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

Mas a desvantagem é se você tem muitos grupos. Você pode precisar de vários modelos, que são difíceis de manter.

    
por 09.09.2011 / 20:06