1

Тема: Подсчет количества произведенных замен

Как можно подсчитать количество произведенных замен, если используется следующий вариант поиска и замены:

with document(name).range.finв
      .text = text
      .replacement.text = text 2
      .execute replace:=wdreplaceall
end with

Заранее благодарен.

2

Re: Подсчет количества произведенных замен

Никак. В отдельных случаях, если производится замена одного текста на другой, без использования подстановочных знаков, то можно вычислить количество замен по разности длин текста. Но это суррогатный метод. Не знаю, как Word показывает поличество произведённых замен.
Если найдёшь ответ — обязательно сообщи!

Лучше день потерять — потом за пять минут долететь!

3

Re: Подсчет количества произведенных замен

viter.alex Без макроса ведь он показывает цифру, когда говоришь - найти все, или заменить все. Значит в какую-то переменную это значение он перед выводом запоминает!
Денис Будем думать, задачка интересная!

4

Re: Подсчет количества произведенных замен

andrkar пишет:

Будем думать

viter.alex пишет:

Никак. В отдельных случаях

У меня тут возникла идейка: а нельзя с этой целью отследить количество произведенных изменений в документе, как бы подключив режим рецензирования?

Отредактировано Денис (22.03.2010 09:35:09)

5

Re: Подсчет количества произведенных замен

что-то мне подсказывает, что нужно искать решение, используя Frame. Где-то рядом с ним решение.

6

Re: Подсчет количества произведенных замен

А что именно подсказывает? При чём здесь Frame?

Лучше день потерять — потом за пять минут долететь!

7

Re: Подсчет количества произведенных замен

Думаю, нужно на две части задачу разделить - сначала просто поиск.. Ведь сколько найдет, столько и заменит.
Ну а Frames.copy, если у Selection, найденное копирует в буфер, значит как то можно эти данные и не в буфер закинуть? а там посчитать количество повторяющих элементов????

8

Re: Подсчет количества произведенных замен

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

N = 0
Do While Range.Find.Execute
        Range.Collapse wdCollapseStart
        Range.Find.Execute Replace:=wdReplaceOne
        R.Collapse wdCollapseEnd
        N = N + 1
Loop
MsgBox "Произведено замен: " & CStr(N)    

Можно использовать счетчик исправлений:

Range.Document.AcceptAllRevisions
    Range.Find.Execute Replace:=wdReplaceAll
    MsgBox "Произведено замен: " & CStr(Range.Document.Revisions.Count)

Отредактировано Вождь (23.03.2010 19:49:51)

Макросы под заказ и готовый пакет - mtdmacro.ru

9

Re: Подсчет количества произведенных замен

Вождь пишет:

Если уж используете макрос, то почему не изменить код?

Мне нужно исключать при поиске текст, скажем, красного цвета. Можно ли такое задать в вашем варианте?

10

Re: Подсчет количества произведенных замен

Денис пишет:

Мне нужно исключать при поиске текст, скажем, красного цвета

Можно:

Dim R As Range, N As Long
    
    Set R = ActiveDocument.Range(0, 0)
    With R.Find
        .Forward = True
        .Text = "1"
        .Replacement.Text = "2"
    End With
    N = 0
    Do While R.Find.Execute
        If R.Font.Color <> wdColorRed Then
            R.Collapse wdCollapseStart
            R.Find.Execute Replace:=wdReplaceOne
            N = N + 1
        End If
        R.Collapse wdCollapseEnd
    Loop
Макросы под заказ и готовый пакет - mtdmacro.ru

11

Re: Подсчет количества произведенных замен

Денис - пора уже привыкнуть, что Вождь не приводит решение целиком. И правильно. Нужно, чтобы человек подумал и сам немного, как данный ему механизм применить к своей задаче. Вам нужно просто ваш исходный код задания текста для поиска и замены приспособить к предложенному решению.
По вашему вопросу - для кнасного цвета color = wdColorRed.
Так как и вами тоже задача полностью не поставлена, непонятно, что и как вы хотите сделать, в чем ограничения, что можно использовать, что нет... Чем полнее будет вопрос, тем быстрее на него можно будет найти ответ..

12

Re: Подсчет количества произведенных замен

andrkar пишет:

Денис - пора уже привыкнуть, что Вождь не приводит решение целиком.

Это я прекрасно понимаю. И прежде чем снова написать, испробовал все доступные моему понимаю способы приложения идеи. Не вышло. Попросил совета, потому что мне было важно посмотреть, как мыслит в такой ситуации опытный человек. Скажу по секрету, VBA подробно изучаю лишь последние 4 месяца, когда начал посещать этот сайт, еще без форума, и учиться "мышлению программиста" и методам/приемам работы, разбирая листинги авторов сайта. Уверяю вас, я пришел сюда не за "халявой" в виде разжеванного ответа, а с перспективой научиться так, чтобы для решения своих задач перестать задавать вопросы smile.