2015-10-15 142 views
0

在Word中,我有一個書籤的列表,並且希望向這些書籤插入交叉引用(複製文本並具有超鏈接)。隨着宏錄製和調整參數,我得到這個與的myBookmark文本替換myRange,使一個超鏈接到書籤:VBA Word - 插入對書籤的交叉引用,但保留上下文的樣式

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

這個工程除了一件事罰款:如果我改變我的書籤文字的樣式(例如使其爲粗體)並更新交叉引用,然後交叉引用也採用該風格 - 我需要複製只有書籤中的文本,但樣式(顏色,粗體,無論)應該保留交叉引用的上下文(例如,文本應該保持斜體或藍色或其他)。

手動更改交叉引用的樣式不會有太大的幫助 - 更新交叉引用字段後,樣式會回退到書籤的樣式。

我不能相信這是沒有選擇,我甚至都沒有看到如何手動獲取這種書籤/交叉引用(沒有VBA)。任何提示?注意:當我在將書籤加入書籤之前做了一個ClearFormatting的範圍(並且之後再設置該樣式),那麼交叉引用在更新字段後仍然保持其樣式(迄今爲止很好),除非(原文如此! )他們沒有風格,那麼他們會採用改變的書籤風格 - 如果書籤是純文本的,這不是問題,但如果它在 - 比如說 - 一個帶有斜體字的表格中,我對於所有沒有風格的交叉引用,我們將採用這種斜體格式。那麼,什麼是通用解決方案?

回答

2

答案是在交叉引用底層的REF字段代碼中使用* CharFormat開關。

實施例交叉引用到書籤「測試」:

REF test \h \* CharFormat 

可以通過切換使用ALT + F9的視圖中看到的域代碼。通過添加開關進行測試,然後按F9強制更新字段。

沒有選擇在對象模型中添加此開關。但是你可以通過編輯Field.Code.Text屬性來輕鬆完成。示例

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

您計劃成爲我的VBA英雄吧?萬物現在工作正常。有一件事我還不明白:在'myRange.InsertCrossReference'之後''myRange'中應該有一個'Field',但Word不會看到它,除非我用'myRange.End = myRange.End + 1'。還有一個附加說明:在我添加'myRange.Fields(1).Code.Text = myRange.Fields(1).Code.Text&「\ * CharFormat」'我必須手動'myRange.Fields(1).Update '因爲'\ * CharFormat'在我執行'myRange.InsertCrossReference'時沒有激活。非常感謝您的寶貴幫助。 – outofmind

+0

旁註:似乎'Fields'不能混合格式化 - 在更新'Field'後格式化是第一個字符 - 但我想這是Word中的一個普遍問題 - 我可以忍受這個 – outofmind

+0

另一個注意事項:如果要交叉引用的文本的格式以新的格式開始,則可能必須使用'Selection.CopyFormat'和'Selection.PasteFormat' - 插入交叉引用似乎插入了採用_Format_的新運行(Cindy,糾正我,如果我錯了:-)) – outofmind

相關問題