Замена текста средствами VBA

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
VistaSV30
Сообщения: 3
Зарегистрирован: 26 июн 2009, 23:32

Подскажите что делать:
Задача такая: нужно найти в тексте абзацы в начале которых стоят 3 пробела и заглавная русская буква, далее нужно заменить пробелы символом #.

Первую часть задания я выполнил, вот пример кода:

Sub ПроверкаНачалаСтрок()
Dim I As Long, s As Variant

For I = 1 To ActiveDocument.Paragraphs.Count
s = ActiveDocument.Paragraphs(I)
If Mid(s, 1, 3) = " " Then
If Asc(Mid(s, 4, 1)) > 192 And Asc(Mid(s, 4, 1)) < 224 Then

' ??????????????????????????????????

End If
End If
Next

End Sub

А вот заменить пробелы не получается, подскажите как это сделать.

Спасибо!
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Код: Выделить всё

[color=darkblue]Sub[/color] test()
    [color=darkblue]With[/color] ActiveDocument.Range.Find
        .Text = "   ([A-ZА-ЯЁ])"
        .MatchWildcards = [color=darkblue]True[/color]
        .Wrap = wdFindContinue
        .Replacement.Text = "###\1"
        .Execute Replace:=wdReplaceAll
    [color=darkblue]End[/color] [color=darkblue]With[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
VistaSV30
Сообщения: 3
Зарегистрирован: 26 июн 2009, 23:32

Но так будет происходить замена по всему тексту, а мне нужно только в начале абзацев (ActiveDocument.Paragraphs)
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Тогда так:

Код: Выделить всё




[color=darkblue]Sub[/color] test()
    [color=darkblue]With[/color] ActiveDocument.Range.Find
        .Text = [B][color="Red"]Chr(13)[/color][/B] & "   ([A-ZА-ЯЁ])"
        .MatchWildcards = [color=darkblue]True[/color]
        .Wrap = wdFindContinue
        .Replacement.Text = [B][color="#ff0000"]Chr(13)[/color][/B] & "###\1"
        .Execute Replace:=wdReplaceAll
    [color=darkblue]End[/color] [color=darkblue]With[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

VistaSV30 писал(а):3 пробела и заглавная русская буква
Так что [А-Z] в образце лишние. Кроме того, необходимо дополнительно
проверять первый абзац

Код: Выделить всё

With ActiveDocument.Paragraphs(1)
     If mid$(.Range,1,4) like "   [А-ЯЁ]" then
          With .Range
                .Characters(1) ="#"
                .Characters(2) ="#"
                .Characters(3) ="#" 
          End with 
     End if  
End with
Андрей Энтелис,
aentelis.livejournal.com
VistaSV30
Сообщения: 3
Зарегистрирован: 26 июн 2009, 23:32

Спасибо заработало!!! ))))
Ответить