Статьи из блога

Макрос замены м2 и м3 на обозначения в верхнем регистре

Алексей спрашивает:

Как сделать автозамену м2 и м3 на обозначения их в верхнем регистре? Средствами автозамены это не получается сделать. А нажимать каждый раз кнопочку верхнего регистра не очень удобно.

Алексей, автозаменой не получиться сделать это, действительно. Используйте приведенный ниже макрос. Текст документа предварительно выделять не нужно.

Создайте для этого макроса кнопку на панели инструментов или назначьте сочетание клавиш:

Sub M2a() 
Dim rng As Range 
Set rng = ActiveDocument.Range 
With rng.Find 
   .MatchWildcards = True 
   .Text = "[А-яЁё][1-9]{1}" 
   .MatchCase = False 
   While .Execute 
      rng.Characters.Last.Font.Superscript = True 
      rng.Collapse Direction:=wdCollapseEnd 
   Wend 
End With 
End Sub

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 23

  1. Моторокер
    19.02.2009 в 14:08 | #1

    > Средствами автозамены это не получается сделать.

    За один этап нет. За 2 можно.

    Например вначале заменить

    м^#

    на верхний регистр, затем только

    м

    на обычный текст.

    Или подстановочными знаками заменить

    (м)([0-9])

    на что-то вроде

    \1*\2*

    а после заменить

    *([0-9])*

    на

    \1

    Это чтобы с макросами не заморачиваться и как альтернативный вариант решения проблемы.

  2. Роман
    25.02.2009 в 18:29 | #2

    В Unicode-шрифтах есть символы ² и ³ - (их коды 00B2 и 00B3 соответственно). Для обозначения квадрата и куба лучше использовать именно их, а не надстрочный символ (понятие "верхний регистр" - иное).

    Поэтому:

    1. Один раз вставляем такой символ в текст.

    2. Копируем его в буфер обмена.

    3. Делаем замену с подстановочными знаками:

    что: (м)(2)

    на что: \1²

    Для тройки так:

    что: (м)(3)

    на что: \1³

    Макросы - это хорошо, но есть средства и попроще.

    Удачи.

  3. Дмитрий
    25.03.2009 в 03:01 | #3

    Люди, да что вы мудрите с макросами?

    Я сам столкнулся с этим - в работе постоянно нужно переводить эти м2 и м3 по регистрам, как вверх, так и вниз. Решил проблему легко - через "сервис-настройка-клавиатура", там выбираем категорию "формат", а с правой стороны находим команды "Subscript" (нижний регистр) и "Superscipt" (верхний регистр), назначаем, если неудобны "заводские" настройки, комбинацию клавиш и вуаля! - вперед и с песней!

    Всем успехов!

  4. Денис
    02.04.2009 в 13:18 | #4

    Здравствуйте!

    Подскажите, пожалуйста, такую вещь:

    - зашел в раздел "Сервис"

    - выбрал "Параметры",

    - выбрал "Вид"

    - поставил флажок "Границы текста".

    После этого у меня пропали номера страниц, а вместо них появилось {Page} и "кочует" теперь из документа в документ. Как вернуть прежнюю разметку?

    Спасибо.

    Денис Перепёлкин.

  5. 02.04.2009 в 14:06 | #5

    Денис, вот заметка по этой теме: http://wordexpert.ru/page/kodyi-poley-vmesto-ssyilok-kak-vosstanovit-vid-ssyilok

  6. Андрей
    20.08.2009 в 08:36 | #6

    Здравствуйте!

    Помогите приспособить данный макрос для поиска и замены в таблице Word. Например ТОЛЬКО в третьем столбце произвести поиск и замену м2 и м3 на обозначения в верхнем регистре.

    Заранее спасибо!

  7. 20.08.2009 в 14:04 | #7

    Поставьте курсор в нужную таблицу и запустите макрос:

    Sub ReplaceInThirdColumn()
    Dim oRng As Range
    Dim oCell As Cell
    For Each oCell In Selection.Tables(1).Columns(3).Cells
      Set oRng = oCell.Range
      With oRng.Find
        .Text = "[А-яЁё][1-9]{1}"
        .MatchWildcards = True
        .MatchCase = False
        While .Execute
          If oRng.End <= oCell.Range.End Then oRng.Characters.Last.Font.Superscript = True
        Wend
      End With
    Next
    End Sub

  8. Андрей
    20.08.2009 в 14:53 | #8

    Спасибо Александр!

    Макрос запустил. Работает как надо.

  9. 20.08.2009 в 16:18 | #9

    А можно и без макроса. Выделите третий столбец и сделайте все это в два захода, как предложил Моторокер в первом комменарии к этой теме.

  10. Виктор
    01.11.2010 в 13:45 | #10

    (word 2003) Зачем менять м2 на верхний регистр если есть специальный символ

    Sub m2()
    '
    ' m2 Макрос
    ' Макрос записан 01.11.2010 Viktor
    '
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "м2"
            .Replacement.Text = "м" & ChrW(178)
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "м3"
            .Replacement.Text = "м" & ChrW(179)
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub

  11. Виктор
    02.11.2010 в 00:30 | #11

    Провел на вашем сайте пол дня, нашел много нового и полезного для себя (Спасибо!) и по полученному опыту оптимизировал ранее опубликованный код:

    Sub m2()
    '
    ' m2 Макрос
    ' Макрос записан 01.11.2010 Viktor
    ' Замена м2 и м3 во всем документе на символы
    '
        Dim i As Integer
        Dim sLarge As Variant
        Dim sSmall As Variant
        Dim rDoc As Range
        Set rDoc = ActiveDocument.Range
        'список возможных замен
            sLarge = Array("м2", "м3", "m2", "m3", "кв.м.", "кв.м", _
            "М2", "М3", "M2", "M3", "КВ.М.", "КВ.М")
            sSmall = Array("м" & ChrW(178), "м" & ChrW(179), "m" & ChrW(178), "m" & ChrW(179), "м" & ChrW(178), "м" & ChrW(178), _
            "М" & ChrW(178), "М" & ChrW(179), "M" & ChrW(178), "M" & ChrW(179), "М" & ChrW(178), "М" & ChrW(178))
        Application.ScreenUpdating = False  ' Запрещаем обновление экрана во время работы макроса
        With rDoc.Find  'заменяем все букво-цифры на соответствующие букво-символы
            .ClearFormatting
            .Replacement.ClearFormatting
            .Forward = True
            .Wrap = wdFindStop
            .MatchWildcards = False
            .Format = True
            .MatchCase = True
        For i = LBound(sLarge) To UBound(sSmall)
            .Text = sLarge(i)
            .Replacement.Text = sSmall(i)
            .Execute Replace:=wdReplaceAll
        Next i
        End With
        Application.ScreenUpdating = True  ' Обновляем экран
    End Sub

    Если возможно, покажите как можно еще больше его улучшить

  12. 02.11.2010 в 08:32 | #12

    Виктор, спасибо.

  13. ~gHosTLy_Prose~
    21.06.2011 в 18:30 | #13

    Здравствуйте. Помогите первоначальный простенький макрос преобразовать под Office 2007. В Excel 2007 ругается на Find, сообщая, что нету у него нету не одного аргумента... По другому оператор работает в 2007 офисе видимо. Моих знаний не хватило, чтобы сделать это. Пожалуйста, помогите.

  14. Аноним
    25.11.2011 в 17:12 | #14

    Здравствуйте. Подскажите, пожалуйста, как в слове букву "л" заменить на "^"? У меня к сожалению ничего не получается, а контрольную надо сделать

  15. Аноним
    25.11.2011 в 17:19 | #15

    Спасибо, уже не надо)) У меня все получилось))

  16. Ваня
    23.11.2012 в 15:24 | #16

    Как найти все слова в верхнем регистре и удалить их из документа Word 2007 и Exel 2007 или же заменить на дефис?

  17. Ваня
    23.11.2012 в 15:28 | #17

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

  18. Аноним
    14.11.2013 в 11:26 | #18

    Как перейти на строчные?

    Дело в том, что печатаю таблицу, в которой много слов (именно слов, а не цифр) при переходе на новую строку выскакивает заглавная буква. Приходится постоянно редактировать, это занимает много времени да и сил.

    Использую настройку:

    регистр - строчные - ок

    но только перехожу к тексту все повторяется - в новой строке первая буква заглавная.

  19. Boris_R
    14.12.2013 в 21:51 | #19

    К вопросу "Как перейти на строчные? ...при переходе на новую строку выскакивает заглавная буква."

    В Параметрах Word вкладка "Правописание" кнопка "Параметры автозамены", убрать флажок "Делать первые буквы ячеек таблиц прописными"

  20. Алексей
    17.11.2016 в 12:48 | #20

    1. А каким образом сделать чтобы макрос работал только к выделенной части.

    2. Как в условие добавить кроме м2 еще и дм3 (конкретно в макрос шапке)

  21. Юрий
    07.12.2018 в 13:40 | #21

    В MS Word 2010 для автозамены при вводе текста вида м2 на м2, с надстрочным символом 2, можно предварительно набрать в тексте с форматированием нужное сочетание, выделить и скопировать его Ctrl-C, зайти в параметры автозамены (вкладка "Файл" - "Параметры" - "Правописание" - кнопка "Параметры автозамены..." - вкладка "Автозамена" ), выбрать кнопку "форматированный текст" (скопированное будет уже находиться в окошке заменяющего текста, под "на") и в окошке заменяемого текста, под "заменить:" вставить те случаи, в которых потребуется замена, в данном случае - м2 где все символы имеют формат строчного текста.

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

    Если автозамена в какой-то момент стала не нужна, то достаточно произвести отмену действия Ctrl-Z. Либо совсем удалить правило автозамены, снова зайдя в параметры автозамены, выбрать правило, ставшее ненужным и нажать "удалить".

  22. andrfire
    29.11.2019 в 08:49 | #22

    В результате выполнения макроса, код которго приведен в начале этой страницы, все цифры в тексте, расположенные вплотную справа от букв, перешли в верхний индекс (их несколько сотен). Как сделать возврат?

    И как изменить код, чтобы он работал только по м2 и м3?

    Спасибо.

  23. andrfire
    29.11.2019 в 08:57 | #23

    Как сузить алфавит, догадался и сделал.

    Остался по возврату вопрос.

Оставьте комментарий!

(обязательно)

^ Наверх