我无法以相对干净高效的方式使用条件邮件合并来抑制空白行。我找到的唯一解决方案是我暂时不愿意使用的,因为我觉得可能有更好的方法。
现在,我的条件合并如下所示:
然而,这并没有抑制空白值,并且信件上出现了一堆空白行。
我曾尝试强制<line_break>
或<paragraph_break>
诱使 word 使用默认的空白抑制。我还尝试将<paragraph break>
每行后面的全部删除。
我理解这个有用的网站我可以做一种多条件语句,但也知道该语句看起来非常丑陋,非常快以我所拥有的条件。
有人知道我该如何抑制空白线,使其干净整洁(相对而言),并且其他人可以轻松理解吗?
答案1
若要在邮件合并主文档中的邮件合并字段为空时隐藏空白行,请在以下代码中创建VBA 模块。
Sub SuppressBlankLines()
ActiveDocument.MailMerge.SuppressBlankLines = True
End Sub
如果 Word 文档中的“开发人员”未激活或不可见,则需要从文件->选项->自定义功能区(勾选“开发人员”框)。这将允许您选择Visual Basic开发系统并添加模块。
答案2
通过操作数据源(例如使用查询)来解决此类问题通常是最好的解决方法。据我所知,这就是您现在所做的。
作为背景,为了抑制空白行,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 为“非 False”时,它始终是相同的非空白值和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 或 borrower_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 结果文本外部来修改字段代码布局。这些标记不会成为结果的一部分。您也不需要“false”结果。例如
{ IF "{ MERGEFIELD ext_b1 }{ MERGEFIELD borrower_1 }" = "True?*"
"{ MERGEFIELD borrower_1 }
" }{ IF "{ MERGEFIELD ext_b2 }{ MERGEFIELD borrower_2 }" = "True?*"
"{ MERGEFIELD borrower_2 }
" }
以这种方式修改布局的一个问题是,字段表达式占用的垂直空间量会根据用户是否显示字段代码或字段结果而变化,因此从一个视图切换到另一个视图可能会令人不安(特别是在大型文档中,当您打开和关闭字段代码显示时,Word 可能也会花时间重新分页。)