Поиск и замена по решению пользователя в Microsoft Word с VBA - PullRequest
0 голосов
/ 13 апреля 2020

Я все еще новичок в написании кода VBA, но я бы хотел решить следующую проблему:

С помощью устройства записи макросов я уже мог решить часть своей проблемы. Я могу искать разные тексты и заменять ALL из них. Однако я хотел бы найти текст в моем документе WORD и позволить пользователю решить, хочет ли он изменить этот текст или нет. Вот пример: я хочу найти «m2» и изменить текст на «m²». Но также возможно, что "m2" является частью номера статьи или чего-то подобного, поэтому здесь нельзя вносить изменения.

Но мой поиск в Google не возвращает никаких результатов, потому что поиск "search" offer

Мой код для первой части выглядит следующим образом:

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .text = "m2"
    .replacement.text = "m²"
    Forward = True
    .wrap = wdFindContinue
    .format = False
    MatchCase = True
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll

У меня есть несколько десятков таких в моем коде VBA, один за другим.

Я очень рад любой помощи.

Питер

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Например:

Sub Demo()
Dim StrFnd As String, StrRep As String, Rslt
StrFnd = InputBox("Find Text")
StrRep = InputBox("Replacement Text")
With ActiveDocument.Range
    With .Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Text = StrFnd
      .Replacement.Text = ""
      .MatchWholeWord = True
      .Forward = True
      .Format = False
      .MatchCase = True
      .Wrap = wdFindStop
      .Execute
    End With
    'Replace the found text, asking first
    Do While .Find.Found
      .Duplicate.Select
      Rslt = MsgBox("Replace this instance of:" & vbCr & _
        StrFnd & vbCr & "with:" & vbCr & _
        StrRep, vbYesNoCancel)
      If Rslt = vbCancel Then Exit Sub
      If Rslt = vbYes Then .Text = StrRep
      .Collapse wdCollapseEnd
      .Find.Execute
    Loop
  End With
End Sub
0 голосов
/ 15 апреля 2020

Вам этого достаточно?

Private Sub ChangeTextWithAsking()
    Dim res As VbMsgBoxResult
    Selection.Find.Execute FindText:="m2"
    Do While Selection.Find.Found
        res = MsgBox("Change?", vbYesNoCancel)
        Select Case res
            Case vbYes
                Selection.Delete
                Selection.TypeText "m"
                Selection.Font.Superscript = True
                Selection.TypeText "2"
            Case vbNo
                Selection.MoveRight
        Case Else
            Exit Do
        End Select
        Selection.Find.Execute
    Loop
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...