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

Прямо сейчас мое условное слияние выглядит так:

Тем не менее, это не подавляет пустые значения, и на письме появляется куча пустых строк.

Я попытался принуждая а <line_break> или <paragraph_break> обмануть слово в использовании пустого подавления по умолчанию. Я также попытался удалить <разрыв строки <paragraph break> после каждой строки в целом.

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

У кого-нибудь есть идеи, как я могу подавить пропуски таким образом, чтобы они были чистыми и опрятными (относительно), и чтобы другие люди могли легко понять, что делать дальше?

2 ответа2

1

Для подавления пустых строк, когда поля слияния в основном документе слияния не заполнены, создайте следующий код в модуле VBA.

Sub SuppressBlankLines() 
 ActiveDocument.MailMerge.SuppressBlankLines = True 
End Sub

Если "Разработчик" не активен / не виден в вашем документе Word, вам необходимо включить его в меню « Файл» -> « Параметры» -> « Настройка ленты» (поле "Разработчик"). Это позволит вам выбрать систему разработки Visual Basic и добавить модуль.

0

Решение проблемы такого рода путем манипулирования источником данных (например, с помощью запроса) обычно является наилучшим способом продвижения вперед. AFAICS это то, что вы сейчас сделали.

В качестве фона не все пробелы в MailMerge рассматриваются как пустые с целью подавления пустых строк. Обычные типизированные пробелы, такие как пробелы и табуляции, рассматриваются как пустые. Поля MERGEFIELD с пустым результатом обрабатываются как пустые. Но результат поля IF никогда не считается пустым.

Я предполагаю, что логика, которую вы требуете, имеет следующий вид

If ( ext_b1 is False or borrower_1 is blank )
  don't insert anything, not even a blank line
Else (i.e. ext_b1 is True and borrower_1 is not blank )
  insert borrower_1 followed by a paragraph mark
End If

Если это так, и ext_b1 всегда одинаково , не пустое значение , когда оно "не Ложное" и borrower_1 никогда не бывает больше , чем в длине около 120 символов (это OTTOMH, вы должны проверить), вы можете использовать подстановочный трюк , чтобы упростить тест IF и сделать кодирование поля немного проще:

{ IF "{ MERGEFIELD ext_b1 }{ MERGEFIELD borrower_1 }" = "True?*" "{ MERGEFIELD borrower_1 }" "" }
{ IF "{ MERGEFIELD ext_b2 }{ MERGEFIELD borrower_2 }" = "True?*" "{ MERGEFIELD borrower_2 }" "" }

За исключением того, что фактически не удаляет метку абзаца, когда ext_b1 имеет значение False или заемщик_1 пуст. Чтобы справиться с этим, вы можете вставить метку абзаца внутри If, если это "истинный результат", и поместить все поля {} IF в одну строку, например:

{ IF "{ MERGEFIELD ext_b1 }{ MERGEFIELD borrower_1 }" = "True?*" "{ MERGEFIELD borrower_1 }
" "" }{ IF "{ MERGEFIELD ext_b2 }{ MERGEFIELD borrower_2 }" = "True?*" "{ MERGEFIELD borrower_2 }
" "" }

Чтобы сделать это немного более понятным (я надеюсь), вы также можете изменить структуру кода поля, поместив метки абзаца внутри IF, но вне текста результата IF. Эти отметки не будут частью результата. Вам также не нужен "ложный" результат. так например

{ IF "{ MERGEFIELD ext_b1 }{ MERGEFIELD borrower_1 }" = "True?*" 
"{ MERGEFIELD borrower_1 }
" }{ IF "{ MERGEFIELD ext_b2 }{ MERGEFIELD borrower_2 }" = "True?*" 
"{ MERGEFIELD borrower_2 }
" }

Проблема с изменением макета таким образом заключается в том, что объем вертикального пространства, занимаемого выражением поля, изменяется в зависимости от того, отображаются ли у пользователя коды поля или результаты поля, поэтому переключение с одного вида на другое может вызывать недоумение (особенно в большой документ, где Word также может тратить время на повторную разбивку при включении и выключении отображения кода поля.)

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