Страница: 1 |
Страница: 1 |
Вопрос: Макрос Word. Поиск слов
Добавлено: 16.10.08 21:34
Автор вопроса: Дмитрий
Доброго всем времени суток.
Задача: поиск в форматированном пробелами тексте фразы и размещение в определённом месте под ней другой фразы (подписи) с сохранением форматирования. Длина форматированной строки – 61 символ.
С VisualBasic’ом я раньше почти не сталкивался, но, немного поразмыслив, накидал следующий код:
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
_ _ _ _ _ _ _ _ _ _ _ _ _ _
Заранее благодарен за ответы.
Голованов Дмитрий
Ответы
Всего ответов: 1
Номер ответа: 1
Автор ответа:
Anton
Вопросов: 2
Ответов: 4
Профиль | | #1
Добавлено: 17.10.08 13:02
Отвечу на один вопрос - номер страницы, где находится курсор ввода, можно узнать так:
'Вывод номера страницы, где произошло выделение или находится курсор ввода
MsgBox CStr(Selection.Information(wdActiveEndPageNumber))
End Sub
Ну вот еще и на второй - позиция курсора по горизонтали и по вертикали:
'Определение позиции курсора по горизонтали в сантиметрах
Dim Location As Double
Location = Selection.Information(wdHorizontalPositionRelativeToTextBoundary)
MsgBox PointsToCentimeters(Location)
End Sub