1

Тема: Замена каждого n-го вхождения

Доброго времени суток, уважаемые!

Можно ли в Word 2003 с помощью макроса решить следующую задачу: ищем некоторое слово, и если находим, то заменяем на другое, но не все, а, скажем, каждое третье или каждое второе вхождение. Потом повторно ищем оставшиеся вхождения первого слова и снова каждое второе заменяем, но уже на третье слово. Пример ниже.
Было:
интересная личность
интересная личность
интересная личность
интересная личность
интересная личность
интересная личность
интересная личность
интересная личность
Стало:
интересная личность
буйнопомешанный
харизматичный лидер
буйнопомешанный
интересная личность
буйнопомешанный
харизматичный лидер
буйнопомешанный

Если задача выполнима, то как ее реализовать через VBA?

2

Re: Замена каждого n-го вхождения

Клавицепс пурпуреа пишет:

Доброго времени суток, уважаемые!

Можно ли в Word 2003 с помощью макроса решить следующую задачу: ищем некоторое слово, и если находим, то заменяем на другое, но не все, а, скажем, каждое третье или каждое второе вхождение. Потом повторно ищем оставшиеся вхождения первого слова и снова каждое второе заменяем, но уже на третье слово. Пример ниже.
Было:
интересная личность
интересная личность
интересная личность
интересная личность
интересная личность
интересная личность
интересная личность
интересная личность
Стало:
интересная личность
буйнопомешанный
харизматичный лидер
буйнопомешанный
интересная личность
буйнопомешанный
харизматичный лидер
буйнопомешанный

Если задача выполнима, то как ее реализовать через VBA?

Если по-простому, то можно так:

Sub Finder()
'wordexpert.ru
Dim sFind As String
Dim iSubCounter, iCounter As Integer
'sFind = Ваше значение, по которому хотите искать
'в Selection.Range = (там где Case1\Case2) указываете значения, на которые будете менять
sFind = "приложе"
iSubCounter = 0
iCounter = 0
Selection.HomeKey Unit:=wdStory
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Wrap = wdFindContinue
.Forward = True
.Text = sFind
Do While .Execute = True
    If iSubCounter = 2 Then
        iCounter = iCounter + 1
        If iCounter = 3 Then iCounter = 0
        Select Case iCounter
            Case 1: Selection.Range = "буйнопомешанный"
            Case 2: Selection.Range = "харизматичный лидер"
        End Select
        iSubCounter = 0
    Else
        iSubCounter = iSubCounter + 1
    End If
Loop
End With
End Sub
Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871