用宏调整“应用标题样式的标题”的间距
1、正文 我在配置标题样式时,设置标题样式时,为了有等级与层次感,将各标题的间距设置如下: 标题1:段前、后20磅,2.4倍行距。 标题2:段前、后17磅,1.7倍行距。 标题3:段前、后8磅,1.7倍行距。 效果,应用标题的各个章节是分开的,那么效果还是令人满意的。但是如果,如果应用标题的各个章节出现依次紧跟着出现的情况,则效果很难看,章节之间间距太大了。
2、 产生的原因,标题1、标题2之间的间距=标题1段后间距+标题2段前间距=37磅。 标题2、标题3之间的间距=标题2段后间距+标题3段前间距=25磅。 一个比较直接的想法,是将应用标题后的内容,手工修改下其“段落”中的段前与段后的格式。大致的修改思路如下:对下面先1、后2,只执行1种情况,执行完了就跳出。(1)、如果标题2紧跟着标题1,如果标题3紧跟着标题2,标题2的段前为0,标题3的段前为0。 (2)、如果标题2紧跟着标题1,标题2的段前为0。 考虑到以后,经常与Word打交道,这个东西经常用,希望软件自动执行上述的判断与修改的过程。我决定用宏代码来处理。 下面选择比较关键的地方讲解下。 关于段落i应用的样式的返回:ActiveDocument.Paragraphs(i).Style。 难点:if语句判断上,我直接判断“段落应用的样式”是否等于”标题1”, 直接判断“段落应用的样式”是否等于wdStyleHeading1,代码不报错,但是,不会执行,好像这句判断永远不成立。 问题原因(个人观点):ActiveDocument.Paragraphs(i).Style的返回值,是一个“Style”的“对象”的类型。普通的字符型的量是无法与它进行是否是相等的判断。总结下,数据类型不匹配,没法直接判断。 解决方法:定义一个数据类型为Style的变量styleBase1: Dim styleBase1 As Style 把标题1的对应的“Style”类型的量返回出来,并赋给styleBase1: Set styleBase1 = ActiveDocument.Styles("标题 1")。 接着判断“段落i应用的样式”是否等于”标题1”: If ActiveDocument.Paragraphs(i).Style = styleBase1就可以了。 代码见文末附录 使用该宏代码的效果
3、 一个小问题后期文档内容更新,再用宏时会不会重复作用?从而标题配置不是想要的? 不会,因为我写宏时,是将多余的间距设置为0,重复运行时,多余的间距已经设置为0,不会再次修改。即之间用宏配置好的标题间距不会被修改了,只会修改文档更新内容中的标题。