Как создать поле слияния с формулой, содержащей поля слияния
Я хочу создать поля слияния, которые выбирают данные, поступающие из двух разных полей слияния. Например «field_1»
должен содержать:
IF «field_1» > "" "«field_1»" "«field_2»"
Я попробовал это следующим образом:
Sub createField()
Dim mergeString As String
mergeString = "IF{MERGEFIELD field_1}>"""" ""{MERGEFIELD field_1}""""{MERGEFIELD field_2}"""
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
Selection.TypeText Text:=mergeString
End Sub
также с помощью insertFormula:
Sub createField()
Dim mergeString As String
mergeString = "IF{MERGEFIELD field_1}>"""" ""{MERGEFIELD field_1}""""{MERGEFIELD field_2}"""
Selection.InsertFormula Formula:= mergeString
End Sub
но это просто беспорядок.
1 ответ
К сожалению, этот код будет просто вставлять текст в виде обычной строки, а не в виде полей слияния. Если вы вставляете поля в Word вручную, вы можете использовать клавиши Ctrl+F9, чтобы вставить фигурные скобки, чтобы отметить, что содержимое является полем, а не обычным текстом.
Чтобы вставить нужное поле непосредственно в Word, вам нужно будет либо создать поля вручную (используя Ctrl+F9 и набрав имена полей), либо использовать опцию для вставки оператора If с текстом Placeholder, а затем заменить Placeholder с необходимыми полями. Вам нужно будет следовать тому же процессу, чтобы создать поле в VBA.
Sub createField () Dim showState As Boolean showState = ActiveWindow.View.ShowFieldCodes
Dim ifField As MailMergeField
Set ifField = ActiveDocument.MailMerge.Fields.AddIf(Range:=Selection.Range, MergeField:= _
"Name", Comparison:=wdMergeIfNotEqual, CompareTo:="", TrueText:="FieldIfTrue", _
FalseText:="FieldIfFalse")
ifField.Select
ActiveWindow.View.ShowFieldCodes = True
With Selection.Find
.ClearFormatting
.Text = "FieldIfTrue"
.Replacement.Text = ""
.Forward = True
.Format = False
.Execute
End With
ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldMergeField, Text:="""Name"""
With Selection.Find
.Text = "FieldIfFalse"
.Replacement.Text = ""
.Forward = True
.Format = False
.Execute
End With
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="OtherName"
Selection.Fields.Update
ActiveWindow.View.ShowFieldCodes = showState
End Sub