Предложенный здесь предыдущий ответ приводит меня к выводу, что я могу объединять изображения, но без контроля источника данных, как я могу изменить изображение в зависимости от состояния поля? Например, если клиент - канадец, логотип - это одно, а в США - другое. Фактически существуют группы учетных записей, и у родительских компаний разные назначенные ответы. Мне нужно сделать условные слияния на основе данных, которые я получаю.
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)" "" }
Вы хотели бы, чтобы все три на одной линии рядом друг с другом. Если код страны не совпадает с тем, что объединено, тогда изображения скрыты и отображается только изображение того, которое соответствует.
Что я сделал, так это то, что я делаю разные шаблоны для каждой группы. Для вашего примера, один шаблон для канадского. Другой для США. (Дублируемый канадский шаблон должен быть американским шаблоном и заменен на логотип канадца на логотип США)
Ниже приведен код, который я сделал для своего проекта. Если 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
Но недостаток в том, что если у вас слишком много групп. Вам может понадобиться куча шаблонов, которые сложно поддерживать.