VBA Word - 插入书签的交叉引用,但保留上下文的样式

时间:2015-10-15 16:11:39

标签: vba ms-word word-vba

在Word中我有一个书签的列表,并希望将交叉引用(复制文本并具有超链接)插入这些书签。通过宏录制和调整参数,我得到了这个,用myRange的文本替换myBookmark并创建了一个指向该书签的超链接:

myRange.InsertCrossReference _
    ReferenceType:=wdRefTypeBookmark, _
    ReferenceKind:=wdContentText, _
    ReferenceItem:=myBookmark, _
    InsertAsHyperlink:=True

除了一件事之外,它的工作正常:如果我改变了我书签的文本样式(例如使其变为粗体)并更新交叉引用,那么交叉引用也采用该样式 - 我需要复制只有书签中的文字,但样式(颜色,粗体,等等)应该是交叉引用所在的上下文中的一个(例如文本应该保持斜体或蓝色或其他)。

手动更改交叉引用的样式没有太大帮助 - 在更新交叉引用字段后,样式将回退到书签之一。

我无法相信这没有选择,我甚至不知道如何手动获得那种书签/交叉引用(没有VBA)。任何提示?

注意:当我在标记它之前对范围执行ClearFormatting(并在之后设置该样式)之后,交叉引用将在更新字段后保持其样式(到目前为止一直很好),除非(原文如此!)他们没有风格,那么他们将采用书签的改变风格 - 如果书签是纯文本,这不是问题,但如果它在 - 比如说 - 一个带斜体的表单词,我会对所有没有样式的交叉引用采用这种斜体格式。那么,什么是一般解决方案?

1 个答案:

答案 0 :(得分:2)

答案是在交叉引用底层的REF字段代码中使用* CharFormat开关。

对书签“test”的交叉引用示例:

REF test \h \* CharFormat

您可以通过使用Alt + F9切换视图来查看字段代码。通过添加开关进行测试,然后按F9强制进行现场更新。

在对象模型中添加此开关没有选项。但是你可以通过编辑Field.Code.Text属性来相当容易地完成它。实施例

ActiveDocument.Fields(2).Code.Text = _
     ActiveDocument.Fields(2).Code.Text & " \* CharFormat "