Статьи из блога
Статьи из блога
Макрос изменения вида кавычек
Рубрика: Макросы, Стили и форматирование
Метки: кавычки | макросы | поиск и замена | форматирование
Пятница, 28 сентября 2007 г.
Просмотров: 5964
Подписаться на комментарии по RSS
Версия для печати
Метки: кавычки | макросы | поиск и замена | форматирование
Пятница, 28 сентября 2007 г.
Просмотров: 5964
Подписаться на комментарии по RSS
Версия для печати
Этот макрос (спасибо за помощь Леониду Бродскому) может пригодиться в тех случаях, когда в документе встречаются наряду с парными кавычками также и прямые кавычки. Поскольку в России принято использовать парные кавычки (елочки), то необходимо преобразовать все прямые кавычки в «правильные».
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).

Поиск
Рубрики
Подписка
Читают
Обсуждают
страницы
сайты
статистика
Комментариев: 13
Работа этого макроса, по-видимому, зависит от языка, установленного в системе. Лично у меня он переводит прямые кавычки (") в "умные" (”), но тоже как-то неправильно - когда сам печатаю, 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Леонид, я думаю что надо не только добавить восстановление параметров автозамены кавычек, но и изменить код в части поиска: искать не просто кавычки прямые, а искать их код (через Chr). Иначе,действительно, не совсем корректно получается. Сейчас попробую и изменю.
В общем, можно строку с оператором Find заменить на эту строку:
.Find.text = Chr(34)спасибо за поднятую тему. У меня возник вопрос, а что делать в подобных случаях?
Пример: «Операция "Кооперация"».
При подобном преобразовании Word делает направление второй кавычки неправильным, если между ней и текстом есть пробел. Как с этим бороться?
Дмитрий, если в вашем тексте перед закрывающей кавычкой идет пробел, то вы можете добавить в вышеприведенный код сразу после оператора End With следующий код:
Он ищет символы пробела и закрывающей кавычки и заменяет на одну кавычку.
Прошу прощения, а нет здесь на сайте макроса, который наоборот превращал бы все подобного рода кавычки « », в " "?
Юра, слегка модифицировав код Антона Кокина, Вы получите желаемое:
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Александр Витер, большое спасибо! Все работает!
Подскажите пожалуйста как каким кодом переобразовать все кавычки (« » " ") в умные только те которые открываются вверх а закрываются вниз.
Люди знающие, а могли бы выложить макрос, который бы обрамлял кавычками-лапками выделенный текст? Насколько понимаю, нужно присвоить выделенному тексту некую переменную, а потом её заменить на „переменную“.
Penniwise, всё гораздо проще
Sub EncloseInQuotes() With Selection .InsertBefore Chr(132) 'Открывающая кавычка .InsertAfter Chr(148) 'Закрывающая кавычка End With End SubАлександр Витер
Большое спасибо! Выделение работает!
Александр, спасибо. Всё действительно оказалось проще.
Здесь же замечу — вместо Chr(148) в русском языке нужно использовать Chr(147).