1

Тема: Перевод в нижний или верхний регистр

Как сделать, чтобы заменить, например, в выражениях 10+10 или 100+100 последние цифры и знак плюс в верхний или нижний регистр ?
На данном ресурсе есть макрос переводящий м2 и м3 на обозначения в верхний регистр, а как возможно перевести цифры в нижний регистр?

2

Re: Перевод в нижний или верхний регистр

Geg пишет:

Как сделать, чтобы заменить, например, в выражениях 10+10 или 100+100 последние цифры и знак плюс в верхний или нижний регистр ?
На данном ресурсе есть макрос переводящий м2 и м3 на обозначения в верхний регистр, а как возможно перевести цифры в нижний регистр?

В примерах на форуме, о которых вы говорите, используются атрибуты объекта Font. Для перевода в  верхний регистр:

.Superscript = True

Аналогично, для перевода символов в нижний регистр используйте атрибут

.Subscript = True

3

Re: Перевод в нижний или верхний регистр

Спасибо! А если за буквой следует несколько цифр, как в этом случае поступить?

4

Re: Перевод в нижний или верхний регистр

Geg пишет:

Спасибо! А если за буквой следует несколько цифр, как в этом случае поступить?

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

м[0-9]{2}

Word найден контекст, начинающийся на букву "м", за которой следует до двух цифр.
Потом с помощью атрибутов можно изменить шрифт найденного контекста, напр.,

Selection.Range.Font..Subscript = True

5

Re: Перевод в нижний или верхний регистр

yshindin пишет:
Geg пишет:

Спасибо! А если за буквой следует несколько цифр, как в этом случае поступить?

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

м[0-9]{2}

Word найден контекст, начинающийся на букву "м", за которой следует до двух цифр.
Потом с помощью атрибутов можно изменить шрифт найденного контекста, напр.,

Selection.Range.Font..Subscript = True

Прошу прощения, лишнюю точку вставил. Правильно, конечно, так:

Selection.Range.Font.Subscript = True

6

Re: Перевод в нижний или верхний регистр

yshindin пишет:

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

Я попытался найти внятное описание всех возможных подстановочных знаков, применяемых при поиске в Word, но нашел только вот это, на английском языке: внешняя ссылка
Кстати, при применении подстановочных знаков (по сути, это упрощенное подмножество аппарата регулярных выражений) следует иметь в виду, что в русском варианте Word знак разделителя в списке - точка с запятой, а не запятая (как в английском варианте Word). Поэтому, напр., в русском варианте следует указывать

м[0-9]{2;5}

а в английском -

м[0-9]{2,5}

7

Re: Перевод в нижний или верхний регистр

Dim rng As Range
Set rng = ActiveDocument.Range
With rng.Find
   .MatchWildcards = True
   .Text = "\d[А-Я][1-9]{1}"
   .MatchCase = False
   While .Execute
      rng.Characters.Last.Font.Subscript = True
      rng.Collapse Direction:=wdCollapseEnd
   Wend
End With


А почему если хочу с пробелом найти текст, данный макрос не работает? \d убираю, всё работает.

8

Re: Перевод в нижний или верхний регистр

Geg пишет:

Dim rng As Range
Set rng = ActiveDocument.Range
With rng.Find
   .MatchWildcards = True
   .Text = "\d[А-Я][1-9]{1}"
   .MatchCase = False
   While .Execute
      rng.Characters.Last.Font.Subscript = True
      rng.Collapse Direction:=wdCollapseEnd
   Wend
End With


А почему если хочу с пробелом найти текст, данный макрос не работает? \d убираю, всё работает.

Правила указания выражений, применяемых в Word для поиска с опцией "подстановочные знаки" (что соответствует оператору .MatchWildcards = True), не во всем соответствуют классическим правилам поиска по регулярным выражениям. Поиск по \d скорее всего найдет символ "d". Для поиска пробела попробуйте указать ^32
Почитайте материал по ссылке, которую я давал выше.

9

Re: Перевод в нижний или верхний регистр

Спасибо, большое! Тонкостей много.

10

Re: Перевод в нижний или верхний регистр

А как всё таки выше написанным макросом можно 5+10 или 10+100 в данных выражениях перевести +10, +100 перевести в верхний регистр?

11

Re: Перевод в нижний или верхний регистр

Geg пишет:

А как всё таки выше написанным макросом можно 5+10 или 10+100 в данных выражениях перевести +10, +100 перевести в верхний регистр?

Попробуйте так (ищется комбинация из плюса, цифры и от одного до пяти нулей):

Sub DigitAndZerosToSuperscript()
Dim rng As Range
Set rng = ActiveDocument.Range
With rng.Find
   .MatchWildcards = True
   .Text = "+[1-9]{1}0{1;5}"
   .MatchCase = False
   While .Execute
      rng.Font.Superscript = True
   Wend
End With
End Sub

12

Re: Перевод в нижний или верхний регистр

Set p1 = ActiveDocument.Tables(1).Cell(2, 3).Range
With p1.Find
           .MatchWildcards = True
           .Text = "^45[А-Я][1-9]{1}"
           .MatchCase = False
While .Execute
     p1.Characters.Last.Font.Subscript = True
Wend
End With

А как ограничить замену только в выделенной ячейке таблицы? Данный код не работает. Понимаю, что в цикле задается "пока нашёл-заменяй везде", а как выйти из цикла не понимаю.