Word Макросы: Удалить текст с полями

Автор Anton, 29 марта 2017, 15:20

Anton

Добрый день!
У меня есть небольшая проблема: есть текст и в нем много раз встречаются выражения с полями вида: "C. 34", не знаю, как отобразить, т.е. в другом режиме Коды/значения полей это выглядит так: "С. { PAGE \* Arabic \* MERGEFORMAT }".

Как можно удалить такие поля во всем документе сразу? Причем хотелось бы, чтобы удалялись только эти поля (есть еще другие) и лишние пробелы до или после текста.
Выручите пожалуйста. Пример приложил.


[вложение удалено администратором]

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

То есть нужно удалить все поля PAGE и текст, который находится слева после пробела?
Если так. То само поле удалить, думаю, не сложно. Сложность в поиске левого текста.
То есть макросу надо слева через пробел перейти к слову, затем нужно найти следующий пробел и до него удалить слово. А если пробела не будет, а что-то другое, то как удалять?

Anton

Да. Надо удалить:

Слева от текста: символы"стр." потом  "пробел" потом ПОЛЕ потом опять "пробел"
Справа от текста: "пробел" потом символы "стр." потом  "пробел" потом ПОЛЕ

Я посмотрел - пробелы всегда есть (штук 150 таких надписей и везде есть пробелы).

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

В этом случае сложность:
Слева от текста: символы"С." потом  "пробел" потом ПОЛЕ потом опять "пробел"

Слева от "С." что может быть? Пробел или что-то другое? Макросу нужно обнаружить "C.". Вы пишите, что у вас "С.", а в файле пример "стр.". То есть текст может быть разный. Нужно найти начало и конец этого текста, чтобы удалить.
Я думаю ориентироваться на пробелы, но если спереди не будет пробела, то тогда не известно, на что ориентироваться.

Anton

Да, это я заблудился в тексте. У меня есть и варианты со "С.", но очень мало, буквально в 3 местах встречается. В основном, со "стр."
Впереди "стр." это точно! Больше ничего. Во всяком случае, в нескольких моих текстах так, а других пока нет. Надо, наверное, искать сначала строки "стр."? как у меня во 2 примере.

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

Сложность найти, где начинается "стр.".

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

Или у вас всегда встречается "стр."? И макросу можно просто слева от номера удалять 5 символов не глядя?
"стр." - четыре символа и пробел после "стр.".

Anton

Да, я думаю, можно так сделать. Других символов нет. И точно везде есть пробел после стр.

Я сам хотел удалить такие сочетания стр. с полем с помощью замены. Но с полями никак не получается.

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

Макрос
Sub Макрос()
   
    Dim rng As Range, rng2 As Range, i As Long
   
    '1. Откл. монитора.
    Application.ScreenUpdating = False
   
    '2. Цикл по всем полям, какие есть в тексте файла (сноски, колонтитулы и другое не учитывается).
    For i = ActiveDocument.Fields.Count To 1 Step -1
        ' Если поле "PAGE".
        If ActiveDocument.Fields(i).Type = wdFieldPage Then
            ' Присваиваем имя фрагменту файла, где находится поле.
            Set rng = ActiveDocument.Fields(i).Result
            ' Включаем в начало нашего фрагмента пять символов.
            rng.MoveStart Unit:=wdCharacter, Count:=-5
            ' Включаем пробел, который может быть слева или справа.
            rng.MoveStartWhile Cset:=" ", Count:=wdBackward
            rng.MoveEndWhile Cset:=" ", Count:=wdForward
            ' Удаление текста, который перед полем, и поля.
                ' Без Select не получилось удалить.
            rng.Select
            Selection.Delete
        End If
    Next i
   
    '3. Вкл. монитора.
    Application.ScreenUpdating = True
   
    '4. Сообщение.
    MsgBox "Готово!", vbInformation

End Sub
[свернуть]

Anton

Получилось! Огромное спасибо! Выручили!