【问题标题】:How to change programmatically the text of a Word Bookmark如何以编程方式更改 Word 书签的文本
【发布时间】:2019-07-24 04:37:44
【问题描述】:

我需要处理 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"/>

我需要更改的位是&lt;w:t&gt;[CustomerName]&lt;/w:t&gt;,然后应该变成&lt;w:t&gt;Some Punter&lt;/w:t&gt;

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

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

只有BookMark 没有Text 属性

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

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

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

    使用 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
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-15
        • 1970-01-01
        • 2013-01-16
        • 2013-10-18
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        相关资源
        最近更新 更多