Как переместить знак минус справа налево? - PullRequest
0 голосов
/ 19 марта 2019

Мне нужен макрос MSWord для преобразования следующих значений:

568.63- 682.3- 12.78-

К

-568,63 -682,3 -12,78

1 Ответ

0 голосов
/ 20 марта 2019

Вам на самом деле не нужен макрос для этого. Все, что вам нужно, это подстановочный знак Найти / Заменить на:

Find = (<[0-9.]@)(-)
Replace = \2\1

Как макрос, это станет:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "(<[0-9.]@)(-)"
    .Replacement.Text = "\2\1"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
  End With
End With
Application.ScreenUpdating = True
End Sub

Что касается проблемы 80.9-100.1, выявленной @Freeflow, я был бы склонен заменить эти дефисы чем-то отличным от нормального дефиса (например, неразрывный дефис). В этом случае вы можете использовать макрос, например:

Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchWildcards = True
    .Text = "([0-9])-([0-9])"
    .Replacement.Text = "\1^~\2"
    .Execute Replace:=wdReplaceAll
    .Text = "(<[0-9.]@)(-)"
    .Replacement.Text = "\2\1"
    .Execute Replace:=wdReplaceAll
  End With
End With
Application.ScreenUpdating = True
End Sub
...