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

Hug*_*nes 1 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"/>
Run Code Online (Sandbox Code Playgroud)

我需要改变的部分<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
Run Code Online (Sandbox Code Playgroud)

只是BookMark没有Text财产

如何访问方括号中的小数据项?

Opi*_*Dad 5

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

使用 bkm.Range.Text = "Some Punter"

请注意,一旦更改文本,书签将从 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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。