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

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

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

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.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:

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

  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).

  14. Севан
    01.04.2012 в 12:36 | #14

    Могу порекомендовать мою модификацию.В случае если кавычки выгибает не в ту сторону

    Sub олоша()

    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

  15. Кир
    03.05.2012 в 21:13 | #15

    Господа, подскажите, есть ли техническая возможность автоматически макросом заменить «елочки» внутри «елочек» на «лапки»?

    из

    Цитата: «В произведении «Война и мир» Толстого...»

    сделать

    Цитата: «В произведении “Война и мир” Толстого...»

  16. Гость
    19.08.2013 в 11:49 | #16

    Попробовал макрос.

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

  17. Гость
    19.08.2013 в 11:54 | #17

    Попробовал "олоша"

    Точно так же выворачивает елочки как бог на душу положит!..

  18. Anonym
    21.10.2016 в 13:01 | #18

    Скрипт по смене кавычек " " на « ». Есть небольшие ограничения, но можно легко доработать.

    Sub LoopQuotesChange()

    Dim cel As Range

    Dim selectedRange As Range

    Dim s As String

    Dim send As String

    Dim count As Integer

    count = 0

    send = ""

    MsgBox "I'm start"

    Set selectedRange = Application.Selection

    For Each cel In selectedRange.Cells

    s = cel.Value

    For i = 1 To Len(s)

    If Mid(s, i, 1) = Chr(34) Then

    count = count + 1

    If i = 1 Then

    send = send + Chr(171)

    Else

    If i = Len(s) Then

    send = send + Chr(187)

    Else

    If Mid(s, i - 1, 1) = " " Then

    send = send + Chr(171)

    Else

    If Mid(s, i + 1, 1) = " " Or Mid(s, i + 1, 1) = "," Or Mid(s, i + 1, 1) = "." Then

    send = send + Chr(187)

    Else

    MsgBox cel.Value

    send = send + Chr(171)

    End If

    End If

    End If

    End If

    Else

    send = send + Mid(s, i, 1)

    End If

    Next

    cel.Value = send

    send = ""

    Next cel

    MsgBox "I'm end. Chislo zamen = " + CStr(count)

    End Sub

  19. олег
    13.04.2018 в 08:45 | #19

    а если надо - ООО "Группа "Мэтр" заменить на ООО «Группа «Мэтр» ? по данному выше макросу получилось ООО «Группа »Мэтр«

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

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

^ Наверх