如何以编程方式更改Word书签的文本

时间:2015-02-12 17:03:31

标签: vba ms-word

我需要处理Word文档并更改书签的文本。

我将我的Word文档导出为平面xml格式以帮助建立文档的结构 - 这是一个片段

<w:bookmarkStart w:id="0" w:name="CustomerName"/>
<w:r w:rsidRPr="001E4487">
    <w:rPr>
        <w:rFonts w:ascii="MyTypeRegular" 
              w:hAnsi="MyTypeRegular" 
              w:cs="MyType V2 Regular"/>
        <w:szCs w:val="22"/>
    </w:rPr>
    <w:t>[CustomerName]</w:t>
</w:r>
<w:bookmarkEnd w:id="0"/>

我需要更改的位是<w:t>[CustomerName]</w:t>,然后应该成为<w:t>Some Punter</w:t>

所以在我的VBA中,我希望能够做到这样的事情......

  Dim bkm As Bookmark
  For Each bkm In ActiveDocument.Bookmarks
    bkm.Text = "Some Punter"
  Next bkm

BookMark没有Text属性

如何在方括号中访问那个小数据项?

2 个答案:

答案 0 :(得分:2)

单词书签没有文字属性,但其范围属性有。

使用bkm.Range.Text =“Some Someter”

请注意,更改文本后,书签将从Word文档中删除。为了保留您需要做的书签:

    Dim bkm As Bookmark
    Dim bkmName As String
    Dim bkmRng As Range
    Dim NewText As String

    NewText = "Some Punter"

    For Each bkm In ActiveDocument.Bookmarks
        Set bkmRng = bkm.Range
        bkmName = bkm.Name
        bkm.Range.Text = NewText
        bkmRng.End = bkmRng.Start + Len(NewText)
        Bookmarks.Add(Name:=bkmName, Range:=bkmRng)
    Next bkm

希望这有帮助。

答案 1 :(得分:0)

对此,我有一个解决方法,它并不完美,但不太复杂:使用书签代替ActiveX文本框,使用ActiveX标签代替交叉引用。然后为文本框进行更改事件(或LostFocus事件):LabelName.Caption = TextboxName.Text。格式化可以根据需要。可能需要使用“字体”>“位置”>“凸起”在控件外部对齐文本。这可能并非在所有情况下都可以接受,但通常可以接受。不需要更新字段。