Поиск / замена ограничения на количество символов в VBA для Word - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть базовый VBScript, который находит и заменяет в Microsoft Word, однако я не могу перейти на определенное количество символов (я думаю, 256). Мне было интересно, если кто-нибудь имел представление об обходе этой проблемы. Ниже приведен пример сценария, который я использую:

Sub FixedReplacements()
Dim Rng As Range
Dim SearchString As String
Dim EndString As String
Dim Id As String
Dim Link As String

Rng.Find.ClearFormatting
Rng.Find.Replacement.ClearFormatting
With Rng.Find
    .Text = "" 'find text won't exceed character limitation'
    .Replacement.Text = "" 'replace text won't exceed character limitation'
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Rng.Find.Execute Replace:=wdReplaceAll   

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Чтобы найти текст, который слишком длинный, найдите первые 255 символов строки, а затем расширьте найденный диапазон до дополнительных символов. ИЛИ разбейте строку на 255-символьные «укусы» и последовательно выполните их поиск (всегда расширяя первый найденный диапазон до конечной точки каждого последующего найденного диапазона).

Можно использовать текст, который слишком длинен для замены, но не использовать Replace. Вместо этого присвойте строковое значение найденному диапазону в цикле. (Обратите внимание, что Wrap необходимо установить на wdFindStop.) Пример

Dim bFound As Boolean
Dim replacementText as String
Dim findText as String, excessText as String
Dim excessChars as Long, bTooLong as Boolean

findText = "Text to be found..."
If Len(findText) > 255 Then
   bToolLong = True
   excessText = Mid(findText, 256)
   excessChars = Len(excessText)
   findText = Left(findText, 255)
End If
replacementText = "some long string greater than 256 characters"
With Rng.Find
    .Text = findText
    '.Replacement.Text = "" 'replace text won't exceed character limitation'
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
bFound = Rng.Find.Execute
Do While bFound
    If bTooLong Then
      Rng.End = Rng.End + excessChars
      'Possible to check findText against the range
      'If Rng.Text <> findText Then 'do something
    End If
    Rng.Text = replacementText
    Rng.Collapse wdCollapseEnd
    bFound = Rng.Find.Execute
Loop
0 голосов
/ 07 января 2019

Я целую вечность искал простое решение для этого; для тех, кто также тралит, рассмотрите мое решение.

Я предполагаю, что есть один случай замены текста.

  1. Найти текст, который вы хотите заменить
  2. Вставить новый текст после
  3. Используйте функцию поиска и замены, чтобы удалить найденный текст

    With WordDoc.Content
    .Find.Execute findText:="text", Forward:=True, Wrap:=wdFindStop
    .InsertAfter Text:="newtext"
    .Find.Execute findText:="text", ReplaceWith:=""
    End With
    
0 голосов
/ 05 ноября 2018

Нет никаких ограничений в Find().Text. Проверьте это:

Option Explicit

Sub TestMe()

    Dim myRange As Range
    Set myRange = ActiveDocument.Content

    Dim lookFor As String
    lookFor = "The text to be searched for. Use an empty string () to search for formatting only. You can search for special characters by specifying appropriate character codes. For example, corresponds to a paragraph mark and corresponds to a tab character."
    myRange.Find.Execute FindText:=lookFor, ReplaceWith:="hello", Replace:=wdReplaceAll

End Sub

Возможно, ограничивающей частью является строка a, которая неправильно анализируется в строке для поиска, поэтому она не найдена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...