Word 2010 Mail Merge подавляет пустые условные поля слияния
Я не могу получить условное слияние для почты, чтобы подавить пустые строки относительно чистым и эффективным способом. Единственное решение, которое я нашел, это то, которое я пока не готов использовать, так как чувствую, что может быть лучший путь.
Прямо сейчас мое условное слияние выглядит так:
Тем не менее, это не подавляет пустые значения, и на письме появляется куча пустых строк.
Я пытался заставить <line_break>
или же <paragraph_break>
чтобы обмануть слово, используя подавление пробелов по умолчанию. Я также пытался удалить <paragraph break>
после каждой строки в целом.
На этом полезном сайте я понимаю, что могу выполнить несколько условных выражений, но также знаю, что это выражение будет выглядеть очень некрасиво и очень быстро с учетом количества условий, которые у меня есть.
У кого-нибудь есть идеи, как я могу подавить пропуски таким образом, чтобы они были чистыми и опрятными (относительно), и чтобы другие люди могли легко понять, что делать дальше?
2 ответа
Для подавления пустых строк, когда поля слияния в основном документе слияния не заполнены, создайте следующий код в модуле VBA.
Sub SuppressBlankLines()
ActiveDocument.MailMerge.SuppressBlankLines = True
End Sub
Если "Разработчик" не активен / не виден в вашем документе Word, вам необходимо включить его в меню " Файл" -> " Параметры" -> " Настройка ленты" (поле "Разработчик"). Это позволит вам выбрать систему разработки Visual Basic и добавить модуль.
Решение проблемы такого рода путем манипулирования источником данных (например, с помощью запроса) обычно является наилучшим способом продвижения вперед. 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 всегда является одним и тем же непустым значением, когда оно "не ложно", а заемщик_1 никогда не длиннее, чем около 120 символов (это следует отметить ОТМ, вам следует использовать трюк с подстановочными знаками, чтобы упростить тест 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 также может тратить время на повторную разбивку при включении и выключении отображения кода поля.)