Страница 1 из 1

Слияние параграфов

Добавлено: 16 ноя 2010, 17:29
Андрей77
Будет очень полезным макрос, который бы объединял несколко параграфов в один по признаку - если в конце строки точка, то не объединять, а если что-то другое - то объединить.
Очень полезен, когда файл из формата txt форматируешь в ворд - нужно убирать лишние символы параграфа.
Вот то что успел сваять, но он не рабочий.
Вопросами ??? помечен кусок, где нужно как-то вносить изменеия в документ, и кроме того, как-то обновлять range с параграфами.
Как это сделать?

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

Sub MakeParaNew1()
    'Если нет выделенного текста, отметить всё!
    If Selection.End = Selection.Start Then
        Selection.WholeStory
    End If
    'Заменить переводы строки на переводы параграфы.
    'ReplaceLineBreaksWithPara - макрос
    'Заменить повторяющиеся пробелы на один пробел.
    'ReplaceWhiteSpaces - макрос
    'Убрать начальные пробелы.
    
    Dim cur_para As Paragraph
    Dim paras As Paragraphs
    Dim left1 As Range
    Dim line As String
    Dim text1 As String
    Dim text2 As String
    Dim para_count As Integer
    Dim test_counter As Integer
    test_counter = 0
    Set paras = Selection.Paragraphs
    
    For i_para = 1 To paras.Count - 1
        'Debug.Print i_para & paras(i_para).Range.text

        'Убрать пробелы с начала и с конца
        text1 = Trim(paras(i_para).Range.text)
        text2 = Trim(paras(i_para + 1).Range.text)

        'paras(i_para).Range.text = text1
        'paras(i_para + 1).Range.text = text2

        'Проверка следующих условий
        If Len(text1) > 1 And Len(text2) > 1 And Right(text2, 1) = "." Then
             'Заменить последний символ в строке с chr(13) на chr(32)
             Mid(text1, Len(text1) + 1, 1) = Chr(32)
             text1 = text1 & text2
             '??? Как теперь эту строчку вставить ????
             '??? Да, как я понимаю, paras после этого не будет валидным, как его обновить?
             '??? Если так: paras = Selection.Paragraphs - то мы зациклимся !

        End If
        Debug.Print i_para & text1
        test_counter = test_counter + 1
    Next para_count

    MsgBox ("Обработано " & test_counter & " строк.")
End Sub

Re: Слияние параграфов

Добавлено: 16 ноя 2010, 21:15
AlexEL
Андрей77 писал(а):...объединял несколко параграфов в один по признаку - если в конце строки точка, то не объединять, а если что-то другое - то объединить
Такое можно сделать поиском и заменой:
Найти: "([!.^13])^13"
Заменить: "\1 "
Подстановочные знаки: Да

Re: Слияние параграфов

Добавлено: 17 ноя 2010, 09:42
Андрей77
Задача решена! Простота - признак таланта! (Сравни: макрос дилетанта и две строки Мастера!)