1

Тема: тире трёх видов и регулярки

Здравствуйте, я бы так сказал, есть тире трёх видов
1 "-" короткое тире               Chr$(45)
2 "–" среднее тире                Chr$(150)
3 "—" длинное тире             Chr$(151)
потому что если одно из них тире, второе дефис, тогда, что же тогда третье???
Так вот как при помощи регулярок или Replace в строке
удалить пробел перед этими тремя тире
удалить пробел после этих трёх тире
удалить пробел перед и после этих трёх тире
??
Спасибо

2

Re: тире трёх видов и регулярки

Сначала создать функцию для замены всего, что вам вздумается

Sub Заменить_все(ByVal что As String, ByVal чем As String)

    'очистить форматы поиска
    Application.Selection.Find.ClearFormatting
    Application.Selection.Find.Replacement.ClearFormatting

    'настройки
    With Application.Selection.Find
        .Text = что
        .Replacement.Text = чем
        .Forward = True
        .Wrap = WdFindWrap.wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

    'выполнить
    Application.Selection.Find.Execute Replace:=WdReplace.wdReplaceAll

End Sub

Теперь можете использовтаь её в макросе, передав в качестве аргументов нужные знаки

Sub Макрос1()

    'удалить пробелы до тире
    Замена_с_подстановочными_знаками " " & Chr(45), Chr(45)
    Замена_с_подстановочными_знаками " " & Chr(150), Chr(150)
    Замена_с_подстановочными_знаками " " & Chr(151), Chr(151)
    
    'удалить пробелы после тире
    Замена_с_подстановочными_знаками Chr(45) & " ", Chr(45)
    Замена_с_подстановочными_знаками Chr(150) & " ", Chr(150)
    Замена_с_подстановочными_знаками Chr(151) & " ", Chr(151)

End Sub

3

Re: тире трёх видов и регулярки

я там неправильно ссылаюсь на функцию: я назвал её "Заменить_все", а ссылаюсь "Замена_с_подстановочными_знаками"

Ошибся, но суть ясна (я так думаю)

4

Re: тире трёх видов и регулярки

Спасибо большое, понятно