Задача: поиск в форматированном пробелами тексте фразы и размещение в определённом месте под ней другой фразы (подписи) с сохранением форматирования. Длина форматированной строки – 61 символ.
С VisualBasic’ом я раньше почти не сталкивался, но, немного поразмыслив, накидал следующий код:
- Код: Выделить всё
Function DuplicateRes()
RES_STR_LEN = 61 ' длина форматированной пробелами строки
With Selection.Find
.Text = "R E S U L T S U M M A R Y" ' основная фраза
.Replacement.Text = ""
End With
ResStr = "( Р Е З У Л Ь Т А Т Ы )" ' подпись
Dim ResLen As Long ' длина подписи
ResLen = Len(ResStr)
' запоминаем изначально выделенный диапазон
Dim SelRange As Range
Set SelRange = Selection.Range
' цикл поиска
While Selection.Find.Execute
' смещаемся вниз, перемещаемся в начало строки
Selection.MoveDown Unit:=wdLine, Count:=3
Selection.HomeKey Unit:=wdLine
' размещаем подпись посередине без потери форматирования
Selection.MoveRight Unit:=wdCharacter, _
Count:=Fix((RES_STR_LEN - ResLen) / 2)
Selection.Delete Unit:=wdCharacter, Count:=ResLen
Selection.TypeText Text:=ResStr
' выделяем диапазон для дальнейшего поиска
Selection.SetRange Start:=Selection.Start, End:=SelRange.End
Wend
' восстанавливаем выделение
Selection.SetRange Start:=SelRange.Start, End:=SelRange.End
End Function
Sub AutoPIPE_DuplicateRes()
' задаём параметры поиска
With Selection.Find
.ClearFormatting
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
' заходим в функцию поиска
DuplicateRes
End Sub
Немного громоздко, по-моему, получилось, назрел следующий вопрос: можно ли как-то улучшить этот код? И ещё три маленьких вопроса:
Как узнать, на сколько символов сдвинут относительно начала строки курсор?
Как узнать номер страницы, на которой находится курсор?
Как сделать так, что бы пользователь после всех манипуляций с текстом, производимых макросом, мог одним нажатием Ctrl+Z все эти манипуляции отменить?
О да! Чуть не забыл! Собственно, текст, подлежащий изменению, выглядит примерно так:
- Код: Выделить всё
R E S U L T S U M M A R Y
_ _ _ _ _ _ _ _ _ _ _ _ _ _
R E S U L T S U M M A R Y
_ _ _ _ _ _ _ _ _ _ _ _ _ _
R E S U L T S U M M A R Y
_ _ _ _ _ _ _ _ _ _ _ _ _ _
Заранее благодарен за ответы.
Голованов Дмитрий