#vba #ms-word
#vba #ms-word
Вопрос:
Следующий подраздел принимает a 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
Насколько я понимаю, поскольку я определил workRange / 2 / 3 через parseRange , изменения в этих диапазонах теперь влияют на оригинал. Как я могу избежать такой ошибки?
Ответ №1:
Объектная модель Word включает Duplicate
метод для Range
объекта. Это позволяет работать с копией диапазона, не затрагивая начальную и конечную точки оригинала. Это то, что вы хотите?
Set workRange = parseRange.Duplicate
Set workRange2 = parseRange.Duplicate
Set workRange3 = parseRange.Duplicate