Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2020, 15:45   #1
leo-udav
Новичок
Джуниор
 
Регистрация: 26.03.2020
Сообщений: 3
По умолчанию Поиск и замена текста в документе из VBA

Казалось бы всё просто, есть Find and Replace.
НО! Размер вставляемого текста оказывается ограничен. При длине текста 306 символов выдаётся сообщение для текста замены "Run-time error 5854" - слишком длинный строковый параметр.
Я бы вставил его просто через InsertBefor, например, но для этого надо найти исходный текст и выделить его - не получается.
leo-udav вне форума Ответить с цитированием
Старый 16.12.2020, 15:49   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

вариант:
надо вставить Текст1Текст2
1) вставить Текс1_$&%^
2) найти и заменить _$&%^ на Текст2
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 17.12.2020, 17:42   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Да, у поиска/замены есть ограничение в 254 символа. И это логично.
Если нужно заменять больше, то вы что-то делаете не так.
Подозреваю, что вы решаете задачу по заполнению документов, где на места с ключевыми словами нужно подставлять другой текст. Если да, то это делается не поиском и заменой.
Если нет, то нужно использовать поиск для отыскания нужного фрагмента, а потом через InsertBefore добавлять свой текст. Лучше искать, начиная с конца документа.
Код:
Sub ReplaceLargeText(doc As Document, txtToFind As String, largeTxtToReplace As String)
  Dim rngStart, rngEnd As Long
  Dim rng As Range
  Set rng = doc.Range
  Do
    With rng.Find
      'Ищем с конца
      .Forward = False
      .Text = txtToFind
      If .Execute Then
        'Начало найденного фрагмента
        rngStart = .Parent.Start
        'Конец найденного фрагмента
        rngEnd = .Parent.End
        'Добавляем текст
        doc.Range(rngStart).InsertBefore largeTxtToReplace
        'Переопределяем диапазон поиска от начала документа до начала найденного фрагмента
        rng.SetRange 0, rngStart
      Else
        'Если ничего не нашли, то выходим из цикла.
        Exit Do
      End If
    End With
  Loop While True
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Важно!Поиск и замена строки в текстовом документе с помощью Delfi Дмитрий2282 Общие вопросы Delphi 1 16.09.2014 17:55
Поиск и замена текста в Memo demiancz Общие вопросы Delphi 2 04.05.2013 21:10
Поиск и замена текста Jantar Общие вопросы Delphi 10 26.07.2010 08:26
Поиск текста в документе haros Общие вопросы Delphi 0 28.07.2009 18:52
поиск и замена текста в RichEdit Vasya Помощь студентам 11 16.03.2007 06:48