如何在不影响原始word.range的情况下通过现有word.range定义新的word.range?

时间:2020-09-19 12:28:17

标签: vba ms-word

以下子程序接受word.range作为参数,并在包含双星号**

时将其文本格式设置为粗体
Private Sub parse(parseRange As Word.Range)

'technical range for starting double asterics
Dim workRange As Word.Range
'range for enclosing doulbe asterics
Dim workRange2 As Word.Range
'another range for a bold text
Dim workRange3 As Word.Range
'flag variable 
Dim isSelect As Boolean
'number of iterated character in parseRange
Dim char

'I set my ranges through parseRange, otherwise I get "object variable not set" error
Set workRange = parseRange
Set workRange2 = parseRange
Set workRange3 = parseRange
        

char = 2
isSelect = False
Do While char <= parseRange.Characters.Count
    If parseRange.Characters(char) = "*" And parseRange.Characters(char - 1) = "*" Then
    Select Case isSelect
    Case False
        isSelect = True
        
        workRange.Start = parseRange.Start + char - 2

        'at this line the initial parseRange.characters.count is set to 2 and all the following code fails as a result.
        workRange.End = parseRange.Start + char
        workRange.Text = ""
    Case True
        isSelect = False
        workRange2.Start = parseRange.Start + char - 2
        workRange2.End = parseRange.Start + char
        workRange2.Text = ""
        
        workRange3.SetRange Start:=workRange.End, _
        End:=workRange2.Start
        workRange3.End = workRange2.Start
        workRange3.Bold = True
    End Select
    End If
    char = char + 1
Loop

End Sub

据我了解,由于我通过parseRange定义了workRange / 2/3,因此这些范围中的更改现在正在影响原始图像。如何避免这种错误?

1 个答案:

答案 0 :(得分:2)

Word对象模型包括Range对象的Duplicate方法。这样,您就可以使用范围的副本,而不会影响原件的起点和终点。那是你想要的吗?

Set workRange = parseRange.Duplicate
Set workRange2 = parseRange.Duplicate
Set workRange3 = parseRange.Duplicate
相关问题