如何以编程方式更改 Word 书签的文本
How to change programmatically the text of a Word Bookmark
我需要处理 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
属性
如何访问方括号中的那个小数据项?
单词书签没有文本 属性,但它的范围 属性 有。
使用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
希望对您有所帮助。
我有一个不完美但不那么复杂的解决方法:使用 ActiveX 文本框代替书签,使用 ActiveX 标签代替 cross-reference。然后为文本框创建更改事件(或 LostFocus 事件):LabelName.Caption = TextboxName.Text。可以根据需要格式化。可能需要使用 Font> Advanced > Position > Raised 对齐控件外的文本。这可能并非在所有情况下都可以接受,但通常可以接受。不需要更新字段。
我需要处理 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
属性
如何访问方括号中的那个小数据项?
单词书签没有文本 属性,但它的范围 属性 有。
使用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
希望对您有所帮助。
我有一个不完美但不那么复杂的解决方法:使用 ActiveX 文本框代替书签,使用 ActiveX 标签代替 cross-reference。然后为文本框创建更改事件(或 LostFocus 事件):LabelName.Caption = TextboxName.Text。可以根据需要格式化。可能需要使用 Font> Advanced > Position > Raised 对齐控件外的文本。这可能并非在所有情况下都可以接受,但通常可以接受。不需要更新字段。