Добрый день!
Помогите с макросом. Вордовский файл состоит из множества строк и имеет такой вид:
Спойлер
(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
Запустил макрос, удаление четвертого знака после точки работает, но пустые строки никак не удаляются.
Создайте файл-пример, в котором будет одна пустая строка, и выложите файл на форуме.
Например тут
[вложение удалено администратором]
На конце строк знаки "Разрыв строки", а не "Знак абзаца".
Можете вставлять данные в ворд так, чтобы на конце были знаки абзаца? Если при копировании (откуда-то) выбрать "Сохранить только текст", то должны появиться на конце знаки абзаца.
Да, это решило проблему! Благодарю!
Столкнулся с особенностью, что если строка не содержит вообще скобок, то она тоже удаляется. В примере первая строка удаляться не должна, можно ли это исправить?
Спойлер
//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:==
Я протестировал, у меня не удаляется.
Действительно, удаление шло от моих дописок в код. Спасибо!