如果有一个过程,能够把 Range 对象的 InsertBefore 和 InsertAfter 方法与 Text 属性结合,那么它将非常有用。在编程处理文本时,就可以使用这个过程在同一个地方处理大量工作。以下所示的 InsertTextInRange 正是这样一个过程。无论何时您需要将文本添加到 Range 对象,都可以调用 InsertTextInRange 过程。换句话说,无论何时您需要在 Word 文档中编程更改现有的文本,这一过程都将非常有用。
InsertTextInRange 过程使用两个必要的变量和一个可选的变量。strNewText 变量包含您想要添加至 Range 对象的文本,此对象在 rngRange 变量中指定。intInsertMode 可选变量指定将新文本添加至范围的方式。变量的值是三个自定义枚举常数中的一个,指定是否使用 InsertBefore 方法、InsertAfter 方法或 Text 属性替换现有的范围文本。
Public Enum opgTextInsertMode
Before
After
Replace
End Enum
Function InsertTextInRange(strNewText As String, _
Optional rngRange As Word.Range, _
Optional intInsertMode As opgTextInsertMode = _
Replace) As Boolean
' 此过程将 strNewText 参数指定文本插入
' rngRange 指定的 Range 对象中。它调用
' IsLastCharParagraph 过程从 rngRange
' 对象清除后续的段落标记。
Call IsLastCharParagraph(rngRange, True)
With rngRange
Select Case intInsertMode
Case 0 ' 在范围之前插入文本。
.InsertBefore strNewText
Case 1 ' 在范围之后插入文本。
.InsertAfter strNewText
Case 2 ' 替换范围中的文本。
.Text = strNewText
Case Else
End Select
InsertTextInRange = True
End With
End Function
'请注意,在范围中插入文本之前,使用了 IsLastCharParagraph 过程来删除最后一个段落的段落标记。
'以下示例使用 Chr$() 函数,以字符代码 13 表示段落标记。
Function IsLastCharParagraph(ByRef rngTextRange As Word.Range, _
Optional blnTrimParaMark As Boolean = False) As Boolean
' 本过程接受字符、单词、句子或段落 Range
' 作为第一个参数。如果范围中的最后一个字符
' 是段落标记,则返回 True;否则返回 False。
' 本过程还接受一个 Boolean 参数,用于指定
' 当文本最后存在段落标记时,是否将其删除。
' 当 blnTrimParaMark 参数为 True 时,本过
' 程调用本身来删除所有后续的段落标记。
Dim strLastChar As String
strLastChar = Right$(rngTextRange.Text, 1)
If InStr(strLastChar, Chr$(13)) = 0 Then
IsLastCharParagraph = False
Exit Function
Else
IsLastCharParagraph = True
If Not blnTrimParaMark = True Then
Exit Function
Else
Do
rngTextRange.SetRange rngTextRange.Start, _
rngTextRange.Start + _
rngTextRange.Characters.Count - 1
Call IsLastCharParagraph(rngTextRange, True)
Loop While InStr(rngTextRange.Text, Chr$(13)) <> 0
End If
End If
End Function