Выбор. Найти в диапазоне - PullRequest
       7

Выбор. Найти в диапазоне

0 голосов
/ 30 января 2019

Я не знаком с Word VBA, и у меня возникла проблема с Selection.Find.

Я хочу заменить запятые на десятичные точки в диапазоне ячеек в таблице.Однако я могу получить только Selection.Find, чтобы заменить все запятые в документе или только первую запятую в диапазоне.

Что бы я хотел, это что-то вроде Selection.Replace What: = ".", Replacement: = "," в Excel, но Word не поддерживает это.

Предложения с благодарностью приняты!

CJ

Sub Replace_Percent_Separator()
'Correct percent separator in row 6, table 2

Dim PcentCells As Range

Path = "C:\xxx\Word\"
file = Dir(Path & "*.docx")

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Do While file <> ""

    Documents.Open Filename:=Path & file

    With ActiveDocument

        Set PcentCells = .Range(Start:=.Tables(2).Cell(6, 2).Range.Start, _
            End:=.Tables(2).Cell(6, 10).Range.End)
        PcentCells.Select

        With Selection.Find
            .Text = ","
            .Replacement.Text = "."
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceAll '<-- replaces throughout document
            '.Execute Replace:=wdReplaceOne '<-- replaces in first cell but no other cells
        End With

    End With

    ActiveDocument.Save

    ActiveDocument.Close

    file = Dir()

Loop

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

1 Ответ

0 голосов
/ 31 января 2019

Учитывая описание вашей проблемы, ваш код может быть уменьшен до:

Sub Replace_Percent_Separator()
'Correct percent separator in row 6, table 2
file = Dir("C:\xxx\Word\*.docx")

Do While file <> ""
  Documents.Open FileName:=Path & file, AddToRecentFiles:=False, Visible:=False
  With ActiveDocument
    With .Tables(2).Row(6).Range.Find
      .Text = ","
      .Replacement.Text = "."
      .Forward = True
      .Wrap = wdFindStop
      .Format = False
      .Execute Replace:=wdReplaceAll
    End With
    .Close SaveChanges:=True
  End With
  file = Dir()
Loop

End Sub

Как можно видеть, нет необходимости выбирать что-либо, и, используя wdFindStop вместо wdFindContinue, поиск / замена останавливаетсягде это должно.

...