使用 VBA 重置样式继承(Word 2013)

使用 VBA 重置样式继承(Word 2013)

我想重新审视这个问题—— 从样式中删除设置以从基本样式继承设置- 因为提供和投票的答案并没有真正实现我想要的效果。

Word 中的样式可以从其所基于的样式继承各种属性。但是,更改新样式的任何属性都会破坏继承,即对基础样式的更改不会传播到子样式。我希望找到一种方法(可能通过 VBA 宏)来重新建立继承。

上面链接的上一个问题的首选答案中的方法成功将字体名称设置为与基本样式的名称相同,但未重新建立继承链接。对父级的进一步更改不会更新子级。

我怎样才能重新建立这种继承联系?

非常感谢

答案1

我还没有尝试过每种样式设置,但至少对于一些设置(到目前为止的字体大小和间距),只需更改子样式的设置以匹配父样式即可重新建立继承。

答案2

TL;DR:编辑样式的 XML 定义。

将值设置为 BaseStyle 值是一次性修复,不是恢复继承的某些东西。这些值明确设置为基本样式的值,但不能继承。

示例:字符样式 C1 基于段落样式列表编号 2 的默认值。LN2 基于 Normal。Normal 字体为 Calibri 11 pt black。打开 C1,您会看到其字体和大小为空白。更改为 Arial 10,现在它永远是一个显式值。运行宏,C1 将重新设置为 Calibri 11 pt black - 而不是空白(继承)!更改 LN2,C1 保持 Calibri 11 pt black - 不是 LN2 的字体和大小。我很难过。

从 XML 角度来看,样式呼呼w:color设置为绿色。其基本样式有 11 pt 文本

<w:style w:type="character" w:customStyle="1" w:styleId="grrr">
    <w:name w:val="grrr"/>
    <w:basedOn w:val="DefaultParagraphFont"/>
    <w:uiPriority w:val="1"/>
    <w:qFormat/>
    <w:rsid w:val="009014C2"/>
    <w:rPr>
        <w:color w:val="00B050"/>
    </w:rPr>
</w:style>

w:sz未定义注意。

手动更改为 8 pts 后,XML 显示如下: <w:sz w:val="16"/>

使用上面的 .BaseStyle 宏后,在 XML 中明确将其设置为 11 pts: <w:sz w:val="22"/>

那是不是继承。这是对基本样式值的明确设置。

<w:sz w:val="22"/>从 XML 中手动删除已恢复的继承。这是一个荒谬的解决方案。

在 UI 中,我们看到字体大小为 11 pts。这与基本样式的值相同,并且是使用 BaseStyle 方法设置的,但这与手动将其设置为 11 相同。 在此处输入图片描述

当我更改基本样式时,使用 Asset Title 格式化的文本不会改变。没有继承 - 只有 11 pts。

编辑 docname.docx\word\styles.xml 后(没有如果我们删除“继承”下的“线性化!”,<w:sz w:val="22"/>我们会看到继承已恢复——字体大小控件为空,这是 Word 告诉我们该值是继承的方式。

在此处输入图片描述

当我更改基本样式时,使用 Asset Title 格式化的文本会发生变化。存在继承 - 它是 11 pts,因为它的父级是 11 pts。

相关内容