我在Word 2007中有一个SET字段。在set-field之后可能存在所有内容(文本,书签,SET字段,......)。我想在其间添加一个文本(例如“exampletext”)。
在此之后我想删除这个插入的文本(但我不想搜索整个文档)。
有方法吗?
试验1(它将其插入到字段中 - 而不是在字段之后):
' xStartReturn is a field
Dim myExampletext As WordApp.Range = objDoc.Range(xStartReturn.Code.End, xStartReturn.Code.End )
myExampletext.Text = "exampletext"
试用2(导致我之后没有得到Range-field来删除exampletext的问题):
xEndeReturn.insertAfter("exampletext")
试验3:
'xStartReturn.Code.End + 1 doesn't work.. but I found out that the "}"-Sign in the setField is +20 after xStartReturn.Code.End. Theoretical this should work - but there could be e.g. also paragraph afterwards.
'-> I can automatically check that there is a paragraph - but why is the exampletext added **after** the paragraph?
Dim example As WordApp.Range = objDoc.Range(xStartReturn.Code.End + 20, xStartReturn.Code.End + 20)
example.Text = "exampletext"
Dim later As WordApp.Range = objBasisvorlage_.Range(objXStartReturn.Code.End + 20, objXStartReturn.Code.End + 20 + "SDFSD".Length) 'this is wrong?!
later.Delete()
答案 0 :(得分:0)
以下适用于我。既然你没有给我们一个重现问题的最小代码,我就不知道框架与我使用的相关程度。但是你应该能够遵循这些步骤。
观看我对r_f_Code
(字段代码范围)的处理方式。您可以忽略/删除r_f_Result,因为我已将其用于参考和调试目的。
将字段代码范围折叠到其终点会使字段范围内的范围保持不变。将起点向右移动一个字符使其位于大括号外,但在其他任何位置之前。 (注意:我测试了两个紧邻的SET字段。)
然后我的代码会输入一些文字和书签。如果SET字段后面的内容可以是"任何",那就是唯一的方式。虽然我想你可以插入一个内容控件 - 如果你正确地进行它就可以识别出来......
Sub PositionAfterFieldCode()
Dim f As word.Field
Dim r_f_Code As word.Range, r_f_Result As word.Range
For Each f In ActiveDocument.Fields
If f.Type = wdFieldSet Then
Set r_f_Code = f.code
Set r_f_Result = f.result
'Debug.Print Len(r_f_Code), r_f_Code.Text, Len(r_f_Result), r_f_Result.Text
r_f_Code.Collapse wdCollapseEnd
r_f_Code.MoveStart wdCharacter, 1
'r_f_Code.Select
r_f_Code.Text = "abc"
r_f_Code.Bookmarks.Add "AfterSet", r_f_Code
Exit For
End If
Next
End Sub