Как создать поле слияния с формулой, содержащей поля слияния

Я хочу создать поля слияния, которые выбирают данные, поступающие из двух разных полей слияния. Например «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

Другие вопросы по тегам