在Word中的Range-position之后插入和删除文本

时间:2018-03-23 09:48:34

标签: ms-word field

我在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()

1 个答案:

答案 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