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

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

Макрос изменения вида кавычек

Этот макрос (спасибо за помощь Леониду Бродскому) может пригодиться в тех случаях, когда в документе встречаются наряду с парными кавычками также и прямые кавычки. Поскольку в России принято использовать парные кавычки (елочки), то необходимо преобразовать все прямые кавычки в «правильные».

Sub changeQuote()
'Замена прямых кавычек на парные кавычки (елочки)
Dim blnQuotes As Boolean
'запомнить пользовательскую установку
blnQuotes = Options.AutoFormatAsYouTypeReplaceQuotes
Options.AutoFormatAsYouTypeReplaceQuotes = False
With Selection.Find
   .ClearFormatting
   .Replacement.ClearFormatting
   .Text = """(*)"""
   .Replacement.Text = "«\1»"
   .Forward = True
   .Wrap = wdFindContinue
   .MatchWildcards = True
   .Execute Replace:=wdReplaceAll
End With
'восстановить пользовательскую установку
Options.AutoFormatAsYouTypeReplaceQuotes = blnQuotes
End Sub

Чтобы иметь быстрый доступ к этому макросу, назначьте для него сочетание клавиш или создайте кнопку на панели инструментов или в панели быстрого доступа (Word 2007).

]]>twitter.com facebook Вконтакте Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

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

  1. Леонид Бродский
    02.10.2007 в 12:50 | #1

    Работа этого макроса, по-видимому, зависит от языка, установленного в системе. Лично у меня он переводит прямые кавычки (") в "умные" (”), но тоже как-то неправильно - когда сам печатаю, Word делает „ и ”.

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

    Sub changeQuote()
        Dim prevQuotes As Boolean
        prevQuotes = Options.AutoFormatAsYouTypeReplaceQuotes
        Options.AutoFormatAsYouTypeReplaceQuotes = True
        With Selection
           .Find.Text = """"
           .Find.Replacement.Text = """"
           .Find.Forward = True
           .Find.Wrap = wdFindContinue
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
        Options.AutoFormatAsYouTypeReplaceQuotes = prevQuotes
    End Sub

  2. 02.10.2007 в 15:39 | #2

    Леонид, я думаю что надо не только добавить восстановление параметров автозамены кавычек, но и изменить код в части поиска: искать не просто кавычки прямые, а искать их код (через Chr). Иначе,действительно, не совсем корректно получается. Сейчас попробую и изменю.

    В общем, можно строку с оператором Find заменить на эту строку:

    .Find.text = Chr(34)

  3. Дмитрий
    06.01.2008 в 00:56 | #3

    спасибо за поднятую тему. У меня возник вопрос, а что делать в подобных случаях?

    Пример: «Операция "Кооперация"».

  4. Дмитрий Ш
    14.02.2008 в 15:51 | #4

    При подобном преобразовании Word делает направление второй кавычки неправильным, если между ней и текстом есть пробел. Как с этим бороться?

  5. 17.06.2008 в 20:37 | #5

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

    Selection.HomeKey wdStory
    With Selection.Find
       .ClearFormatting
       .Replacement.ClearFormatting
       .Text = "^32" & Chr(187)
       .Replacement.Text = Chr(187)
       .Forward = True
       .Wrap = wdFindContinue
       .MatchWildcards = True
       .Execute Replace:=wdReplaceAll
    End With

    Он ищет символы пробела и закрывающей кавычки и заменяет на одну кавычку.

  6. Юра
    14.01.2010 в 20:43 | #6

    Прошу прощения, а нет здесь на сайте макроса, который наоборот превращал бы все подобного рода кавычки « », в " "?

  7. 15.01.2010 в 10:20 | #7

    Юра, слегка модифицировав код Антона Кокина, Вы получите желаемое:

    Options.AutoFormatReplaceQuotes = False
      Selection.HomeKey wdStory
      With Selection.Find
         .ClearFormatting
         .Replacement.ClearFormatting
         .Text = "[" & Chr(171) & Chr(187) & "]"
         .Replacement.Text = Chr(34)
         .Forward = True
         .Wrap = wdFindContinue
         .MatchWildcards = True
         .Execute Replace:=wdReplaceAll
      End With

  8. Юра
    17.01.2010 в 20:55 | #8

    Александр Витер, большое спасибо! Все работает!

  9. Александр
    30.07.2010 в 14:08 | #9

    Подскажите пожалуйста как каким кодом переобразовать все кавычки (« » " ") в умные только те которые открываются вверх а закрываются вниз.

  10. 06.08.2010 в 16:40 | #10

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

  11. 06.08.2010 в 23:16 | #11

    Penniwise, всё гораздо проще

    Sub EncloseInQuotes()
      With Selection
        .InsertBefore Chr(132) 'Открывающая кавычка
        .InsertAfter Chr(148) 'Закрывающая кавычка
      End With
    End Sub

  12. 07.08.2010 в 19:06 | #12

    Александр Витер

    Большое спасибо! Выделение работает!

  13. 08.08.2010 в 00:54 | #13

    Александр, спасибо. Всё действительно оказалось проще.

    Здесь же замечу — вместо Chr(148) в русском языке нужно использовать Chr(147).

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

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

^ Наверх