以下子程序接受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,因此这些范围中的更改现在正在影响原始图像。如何避免这种错误?
答案 0 :(得分:2)
Word对象模型包括Range
对象的Duplicate
方法。这样,您就可以使用范围的副本,而不会影响原件的起点和终点。那是你想要的吗?
Set workRange = parseRange.Duplicate
Set workRange2 = parseRange.Duplicate
Set workRange3 = parseRange.Duplicate