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

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

Как изменить регистр

Рубрика: Вопрос-Ответ, Макросы, Стили и форматирование
Метки: |
Понедельник, 17 сентября 2007 г.
Просмотров: 27044
Подписаться на комментарии по RSS
Версия для печати

[Ссылки на статью]

Посетитель сайта в комментариях к одной заметке задал вопрос:

Как перевести некий текст в верхний регистр, например, "привет" в "ПРИВЕТ".

Есть очень простое решение, которое подсказали читатели рассылки.

 

Выделяете нужный текст и нажимаете сочетание клавиш <Shift>+<F3>. Если нужно изменить регистр только у одного слова, то специально выделять его не нужно - достаточно поместить курсор ввода в это слово и воспользоваться тем же сочетанием клавиш. (Спасибо всем приславшим ответы на этот вопрос: Ларисе Ивановне, Виктору Гниденко, Ашлапову В.М. и другим).

 

Другой способ заключается в выводе специальной кнопки Регистр на панель инструментов либо выбрать одноименную команду Регистр из меню Формат.

 

И третий способ - воспользоваться простейшим макросом:

Sub LUCase()
Selection.Range.Case = wdUpperCase
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:

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

  1. Организм
    27.09.2007 в 15:18 | #1

    Спасибо огромное, способ простейший, но я о нем не знал, будет теперь над чем подумать...

  2. Анатолий
    20.06.2008 в 22:19 | #2

    А не подскажете как написать макрос, который бы менял все слова написанные В ВЕРХНЕМ РЕГИСТРЕ на нижний регистр?

  3. 20.06.2008 в 22:32 | #3

    Анатолий, вот навскидку простейший макрос на ваше требование:

    Sub wUpcase()
    Dim sW As Range
    For Each sW In ActiveDocument.Words
       If sW.Case = wdUpperCase Then
          sW.Case = wdLowerCase
       End If
    Next sW
    End Sub

    Будет менять все слова написанные прописными, на строчные, независимо от того, является ли слово первым в предложении или нет.

  4. karabas
    05.04.2009 в 15:16 | #4

    А подскажите, как ПОДНЯТЬ текст, принадлежащий определённому стилю в документе.

  5. 05.04.2009 в 15:28 | #5

    Если он действительно одного стиля, тогда зайдите в оформление стиля и в параметрах шрифта отметьте галочку «ВСЕ ПРОПИСНЫЕ». Визуально буквы будут большими, но если этот текст попадет куда-нибудь по ссылке, например в содержание, то там он отобразиться так, как был набран.

    Если же вам нужно физически перевести все буквы в верхинй регистр, тогда в панели «Стили и форматирование» кликните правой кнопкой на имени стиля и выберите пункт «Выделить все вхождения». Когда выделите, то нажимаете Shift+F3

  6. karabas
    05.04.2009 в 15:46 | #6

    Спасибо Александр, за ответ. Да, нужно физически поднять. И как это решить на программном уровне? Пока, я допетрил до такого варианта:

    Dim r As Range
        Dim sStyleName As String
        sStyleName = "header"
        For Each r In ActiveDocument.Words
            If Not r.Paragraphs.Style Is Nothing Then
                If r.Paragraphs.Style = sStyleName Then r.Case = wdUpperCase
            End If
        Next

    Не знаю. насколько он синтаксически верный, но вроде работает. Как Вы считаете?

  7. karabas
    05.04.2009 в 15:52 | #7

    хм, я тут подумал, а может перебирать не слова, а сразу параграфы? надо попробовать

  8. karabas
    05.04.2009 в 16:01 | #8

    да! отлично. работает параграфами на ура.

    ведь, правильно ли я думаю, что стиль может быть принемим только к параграфу, а не к отдельным словам в нём?

  9. 05.04.2009 в 18:53 | #9

    …правильно ли я думаю, что стиль может быть принемим только к параграфу, а не к отдельным словам в нём?

    Нет не правильно. Когда вы задаете стиль, то там есть поле «Стиль:» (сразу после имени стиля). Так вот там мы и указываем куда применять этот стиль: к абзацу, символу, списку, таблице, символу или абзацу в зависимости от выделения.

  10. 05.04.2009 в 19:04 | #10

    А если нужно макросом, то перебирать каждый абзац это, конечно, можно, но не продуктивно. Процессор это грузит по полной программе.

    Предлагаю такой вариант. Пользуемся стандартным поиском, только в макросной реализации.

    With ActiveDocument.Range.Find
        .ClearFormatting: .Style = ActiveDocument.Styles("Заголовок 1")
        .Text = ""
        While .Execute
          .Parent.Case = 1 'wdUpperCase
        Wend

  11. karabas
    05.04.2009 в 22:56 | #11

    Спасибо. Попробую вдуматся и разобратся.

    Александр, скажите пожалуйста, как определить количество строк в параграфе, и, количество слов в последней строке этого параграфа?

    По статистике из сервиса колво строк выдаёт. Но как это кодом заполучить ума не приложу.Уже везде пересмотрел всё. нигде не могу найти этих данных.

  12. 05.04.2009 в 23:04 | #12

    … как определить количество строк в параграфе, и, количество слов в последней строке этого параграфа?…

    Никак. А зачем это нужно? Может стоит искать другой путь решения вашей проблемы? Зачем нужно количество слов в последней строке абзаца?

  13. karabas
    05.04.2009 в 23:20 | #13

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

    КАК ИЗМЕНИТЬ РЕГИСТР В MICROSOFT

    WORD ?

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

    КАК ИЗМЕНИТЬ РЕГИСТР В

    MICROSOFT WORD ?

  14. 05.04.2009 в 23:33 | #14

    Предлагаю делать так. Ищем абзац. Берем его последнее слово и заменяем пробел перед этим словом на неразрывный пробел. Все.

  15. karabas
    06.04.2009 в 10:14 | #15

    хм, оригинально.

    надо продумать этот вариант

  16. 06.04.2009 в 11:11 | #16

    karabas, попробуйте такой макрос. У меня работает.

    Sub UnbreakLastTwoWords()
      'Ищем абзац нужного стиля
      With ActiveDocument.Range.Find
        .ClearFormatting: .Style = ActiveDocument.Styles("Глава")
        .Text = ""
        While .Execute 'Если нашли
          'Ищем в этом абзаце последний пробел и заменяем его на неразрывный
          With .Parent.Paragraphs(1).Range.Find
            .Text = " ": .Forward = False
            .Replacement.Text = ChrW(160)
            .Execute Replace:=wdReplaceOne
          End With
        Wend
      End With
    End Sub

  17. karabas
    06.04.2009 в 21:36 | #17

    спасибо большое александр.

    тут возникла новая дилема,

    как оказалось, в абзаце не может быть более 50 символов, если больше, то слово нужно переносить на новую строку

  18. 07.04.2009 в 00:39 | #18

    Мне кажется, что вам лучше воспользоваться верстальными программами PageMaker, QuarkXpress и т.п. Там это настраивается просто.

    Можно, конечно, и в Word макросами попробовать, но будет очень медленно. Считать символы в каждой строке На странице в среднем 30 строк. На 100 страниц уйдет около получаса времени.

  19. betty
    20.02.2010 в 23:31 | #19

    А каким сочетанием клавиш можно поменять язык уже написанного слова. Так часто бывает, что при наборе слова не смотришь какой язык используется и приходится целиком все переписывать. Я слышала, что такое сочетание клавиш существует...

  20. 21.02.2010 в 11:16 | #20

    А каким сочетанием клавиш можно поменять язык уже написанного слова.

    Для этого есть программа Punto Switcher, хотя мне больше нравится Setup KeySwitcher 25.

  21. Елена
    22.09.2011 в 16:35 | #21

    Подскажите, пожалуйста, каким макросом можно поменять регистр текста, заключенного в кавычки, стоящего перед определённым словом? Например,

    Сериал "Богатые тоже плачут" - макрос должен менять все названия сериалов на прописные буквы: Сериал "БОГАТЫЕ ТОЖЕ ПЛАЧУТ". Заранее спасибо.

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

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

^ Наверх