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

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

также с помощью формулы вставки:

Sub createField()
    Dim mergeString As String
    mergeString = "IF{MERGEFIELD field_1}>"""" ""{MERGEFIELD field_1}""""{MERGEFIELD field_2}"""

   Selection.InsertFormula Formula:= mergeString
End Sub

но это просто беспорядок.


person Schubidu    schedule 02.07.2015    source источник


Ответы (1)


К сожалению, этот код просто вставит текст как обычную строку, а не как Mergefields. Если вы вставляете поля в Word вручную, вы можете использовать клавишу Ctrl+F9, чтобы вставить фигурные скобки, чтобы отметить, что содержимое является полем, а не обычным текстом.

Чтобы вставить нужное поле непосредственно в Word, вам нужно либо создать поля вручную (используя Ctrl + F9 и введя имена полей), либо вы можете использовать параметр для вставки оператора If с текстом заполнителя, а затем заменить заполнители с необходимыми полями. Вам нужно будет выполнить тот же процесс, чтобы создать поле в 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

Конец сабвуфера

person Jane    schedule 02.07.2015