imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 20.11.2002, 02:09     # 1
romankoff
Guest
 
Сообщения: n/a

Question VBA Word

Подскажите, пжалса, как в VBA получить доступ к букве в тексте документа word.
Я нашел как вариант - Ch = ThisDocument.Characters(I).Text, но мне кажется это не оптимальный вариант ...
Заранее спасибо ...
 
Старый 22.11.2002, 11:10     # 2
MAX67
Guest
 
Сообщения: n/a

Доступ к конкретному символу через .Characters(I). это стандартный и вполне нормальный вариант.
Т.к. это свойство применимо к обьектам Document, Selection и Range то главное сначала получить подходящий Range обьект. Все зависит от того что ты хочешь сделать.
 
Старый 22.11.2002, 19:12     # 3
romankoff
Guest
 
Сообщения: n/a

Благодарю за комментарий ...
Мне необходимо провести сканирование документа для последующего парсирования. При использовании .Characters(I) в большом документе ближе к середине и концу наблюдаются характерные тормоза. Я пробовал использовать .Words(I) - ситуация таже ...
 
Старый 23.11.2002, 00:25     # 4
MAX67
Guest
 
Сообщения: n/a

Цитата:
сканирование документа для последующего парсирования
Чёто для меня это всеравно звучит расплывчато.
Если ты ищешь конкретный символ или форматирование, то кода работающего быстрее чем родной вордовский find-replace все равно не придумать. Как правило, получается эффективнее несколько раз прогнать глобальный find-replace, чем сделать все за один проход, но с доморощенными вложенными парсингами или циклами.

Наверное и сам знаешь, но всетаки приведу банальные примеры:
'заменяем все квадратные скобки на круглые
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "["
.Replacement.Text = "("
.Forward = True
.Wrap = wdFindContinue
.Replacement.ParagraphFormat.LeftIndent = RefIndent
End With
Selection.Find.Execute Replace:=wdReplaceAll

Тоже самое можно делать с учетом форматирования - шрифта, стиля, параграфа, языка и т.д. в соответсвие с расширенным диалогом Правка->Заменить

Если надо не только найти и заменить можно например использовать такую конструкцию:

'если находим "(или" и дальше по тексту в пределах 20ти символов есть закрывающая скобка, то выделяем и удоляем всю конструкцию.
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "(или"
.Forward = True
.Wrap = wdFindStop
End With
While Selection.Find.Execute = True
If Selection.MoveEndUntil(Cset:=")", Count:=20) <> 0 Then
Selection.MoveEnd Count:=1
Selection.Delete
End If
Selection.Collapse direction:=wdCollapseEnd
Wend
End Sub

Можно обрабатывать отдельно каждый параграф:

For Each prf In ActiveDocument.Paragraphs
If prf.LeftIndent = 0 Then
prf.Range.Characters(1).Case = wdLowerCase
prf.SpaceBefore = 6
prf.SpaceBeforeAuto = False
End If
Next
Не забывай что для свойств Paragraph и Sentence можно вызвать все причиндалы от Range через их свойсто Range.

Ну и не забывай отключать обновление экрана.
Application.ScreenUpdating = False
........
Application.ScreenUpdating = True
 


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 23:01.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.