1

Предложенный здесь предыдущий ответ приводит меня к выводу, что я могу объединять изображения, но без контроля источника данных, как я могу изменить изображение в зависимости от состояния поля? Например, если клиент - канадец, логотип - это одно, а в США - другое. Фактически существуют группы учетных записей, и у родительских компаний разные назначенные ответы. Мне нужно сделать условные слияния на основе данных, которые я получаю.

2 ответа2

2

Вы можете достичь этого через один шаблон, используя условные поля 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)" "" }

Вы хотели бы, чтобы все три на одной линии рядом друг с другом. Если код страны не совпадает с тем, что объединено, тогда изображения скрыты и отображается только изображение того, которое соответствует.

1

Что я сделал, так это то, что я делаю разные шаблоны для каждой группы. Для вашего примера, один шаблон для канадского. Другой для США. (Дублируемый канадский шаблон должен быть американским шаблоном и заменен на логотип канадца на логотип США)

Ниже приведен код, который я сделал для своего проекта. Если 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

Но недостаток в том, что если у вас слишком много групп. Вам может понадобиться куча шаблонов, которые сложно поддерживать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .