Word VBA Макрос: Удалить строки и уменьшить количество знаков после точки

Автор Frenkiln, 04 августа 2017, 15:18

Frenkiln

Добрый день!

Помогите с макросом. Вордовский файл состоит из множества строк и имеет такой вид:

Спойлер
(60):255:
(61):55:
(65):2.789:
(66):4.928:==
(10)
(16):345.8548:
(18):348.5:
(30):178:
[свернуть]

Номера строк обозначаются цифрой в скобках, номера могут повторяться. Нужно:
1) Удалить строки с отсутствующей информацией, как в (10)
2) Если после точки стоят 4 цифры, то сократить их до 3-х, путем удаления последней.

Администратор

Этот макрос предназначен для документа, в котором нет таблиц. То есть, когда в документе просто текст.

Макрос
Sub макрос()
   
    Dim spl, instr_ As Long, i As Long
   

    '1. Отключение монитора (может это ускорит макрос и чтобы не мерцало).
    Application.ScreenUpdating = False

    '2. Оставление после точки трёх цифр.
    With ActiveDocument.Range.Find
        .Text = "(.[0-9]{3})([0-9]{1;})"
        .Replacement.Text = "\1"
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
    End With
   
    '3. Удаление абзацев, в которых только номер.
    ' Запись текста из документа в переменную-массив "spl".
        ' С массивом быстрее работать, чем с ворд-объектами.
    spl = Split(ActiveDocument.Range.Text, Chr(13))
    ' Цикл по массиву снизу вверх.
    For i = UBound(spl) To 0 Step -1
        ' Если элемент массива не пустой.
        If spl(i) <> "" Then
            ' Поиск первой правой скобки (вдруг их может быть несколько).
            instr_ = InStr(spl(i), ")")
            ' Смотрим, есть ли справа от правой скобки что-нибудь.
            ' Если правая скобка находится в конце элемента массива.
            If instr_ = Len(spl(i)) Then
                ' Удаление абзаца.
                ActiveDocument.Paragraphs(i + 1).Range.Delete
            End If
        End If
    Next i
   
    '4. Вкл. монитора.
    Application.ScreenUpdating = True
   
    '5. Сообщение, чтобы юзер понял, что макрос завершил работу.
    MsgBox "Готово.", vbInformation
   
End Sub
[свернуть]

Frenkiln

Запустил макрос, удаление четвертого знака после точки работает, но пустые строки никак не удаляются.

Администратор

Создайте файл-пример, в котором будет одна пустая строка, и выложите файл на форуме.

Frenkiln


Администратор

На конце строк знаки "Разрыв строки", а не "Знак абзаца".
Можете вставлять данные в ворд так, чтобы на конце были знаки абзаца? Если при копировании (откуда-то) выбрать "Сохранить только текст", то должны появиться на конце знаки абзаца.


Frenkiln

Столкнулся с особенностью, что если строка не содержит вообще скобок, то она тоже удаляется. В примере первая строка удаляться не должна, можно ли это исправить?
Спойлер
//017:0502:316230:++
(14):27.95:
(16):18.92:
(18):18.83:
(19):19.25:
(30):9.28:
(40):21233:
(41):1250:
(45):18150:
(46):12746:
(47):5326:
(49):70:
(50):8:
(60):1084:
(61):932:
(65):24.169:
(66):49.503:
(69):0.351:==
[свернуть]

Администратор


Frenkiln

Действительно, удаление шло от моих дописок в код. Спасибо!