Автор Тема: Word VBA: Как в документе изменить числа, содержащие в конце 50?  (Прочитано 1234 раз)

Svetik

  • Гость
Добрый вечер! Подскажите пожалуйста, как решить такую задачу.
Необходимо найти в документе все цифры, содержащие в конце 50 и заменить, предварительно умножив их на 1,15 и сделать их жирным и добавить в скобках (в пересчете:  ) (например: было: 210, а стало: (в пересчете: 241,5).
В объекте "Find", я использую такой поиск:
.Text = "([0-9]@[5][0])"

Оффлайн Администратор

  • Administrator
  • Сообщений: 1939
Замена во всём файле
Sub Main()
   
    Dim rng As Range, fnd As Find, stri As String
   
   
    '1. Создание объектов для поиска.
    Set rng = ActiveDocument.Range(0, 0)
    Set fnd = rng.Find
   
    '2. Настройка поиска.
    fnd.Text = "([0-9]@[5][0])"
    fnd.MatchWildcards = True
    fnd.Wrap = wdFindStop
   
    '3. Поиск и замена.
    Do While fnd.Execute = True
        ' Запись найденнего текста в переменную "stri".
            ' Если найдено, то rng - это будет найденный фрагмент.
        stri = rng.Text
        ' Здесь проводите действия с переменной stri, например:
        stri = stri * 1.15
        ' Записываете расчитанные данные обратно в найденный фрагмент.
        rng.Text = "(в пересчете: " & stri & ")"
        ' Делаете фрагмент жирным.
        rng.Font.Bold = True
        ' Смещение невидимого курсора вправо от найденго фрагмента, чтобы поиск
            ' началася после найденного фрагмента, а не в найденном фрагменте.
        rng.Collapse Direction:=wdCollapseEnd
    Loop
   
    '4. Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
Замена в выделенном фрагменте
Sub Main()
   
    Dim rng As Range, fnd As Find, rngSelEnd As Range, stri As String
   
   
    '1. Vba-именование конца выделения.
    Set rngSelEnd = Selection.Range.Duplicate
    rngSelEnd.Collapse Direction:=wdCollapseEnd
   
    '2. Создание объектов для поиска.
    Set rng = Selection.Range
    rng.Collapse Direction:=wdCollapseStart
    Set fnd = rng.Find
   
    '3. Настройка поиска.
    fnd.Text = "([0-9]@[5][0])"
    fnd.MatchWildcards = True
    fnd.Wrap = wdFindStop
   
    '4. Поиск и замена.
    Do While fnd.Execute = True
       
        ' Проверка, найдено ли в пределах выделенного.
        If rng.End > rngSelEnd.Start Then
            Exit Do
        End If
           
        ' Запись найденнего текста в переменную "stri".
            ' Если найдено, то rng - это будет найденный фрагмент.
        stri = rng.Text
        ' Здесь проводите действия с переменной stri, например:
        stri = stri * 1.15
        ' Записываете расчитанные данные обратно в найденный фрагмент.
        rng.Text = "(в пересчете: " & stri & ")"
        ' Делаете фрагмент жирным.
        rng.Font.Bold = True
        ' Смещение невидимого курсора вправо от найденго фрагмента, чтобы поиск
            ' началася после найденного фрагмента, а не в найденном фрагменте.
        rng.Collapse Direction:=wdCollapseEnd
           
    Loop
   
    '5. Сообщение.
    MsgBox "Готово.", vbInformation

End Sub

Svetik

  • Гость
Ну просто отлично! Большое спасибо, особенно за помощь в праздник! На моем тексте все работает! Вы просто волшебник!