Статьи из блога
Макрос изменения вида кавычек
Этот макрос (спасибо за помощь Леониду Бродскому) может пригодиться в тех случаях, когда в документе встречаются наряду с парными кавычками также и прямые кавычки. Поскольку в России принято использовать парные кавычки (елочки), то необходимо преобразовать все прямые кавычки в «правильные».
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).
Рубрика: Макросы, Стили и форматирование
Метки: кавычки | макросы | поиск и замена | форматирование
Просмотров: 36550
Подписаться на комментарии по RSS
Версия для печати
Метки: кавычки | макросы | поиск и замена | форматирование
Просмотров: 36550
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 3 способа очистки списка недавно открытых документов
- Word 2007: полотно, рисунки, линии
- Word 97. Слияние документов как один из способов упростить свою работу
- Абзац с цветным фоном
- Автозаполняемые колонтитулы
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Автоформат документов
- Буквица
- Быстрая смена ориентации страниц документа
- Быстрое изменение стиля форматирования текста
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрое удаление границ у таблицы
- Быстрый ввод текста с помощью команды =rand()
- Быстрый поиск форматированного текста
- В чем различие между Автозаменой и Автотекстом
- В чем различие между стилями Обычный (Normal) и Основной текст (Body Text)?
- Ввод повторяющихся фрагментов текста в Word 2007
- Ввод часто повторяющихся фрагментов текста
- Вставка будущей даты
Комментариев: 19
Работа этого макроса, по-видимому, зависит от языка, установленного в системе. Лично у меня он переводит прямые кавычки (") в "умные" (”), но тоже как-то неправильно - когда сам печатаю, Word делает „ и ”.
В любом случае, в него надо добавить восстановление исходной установки пользователя:
Леонид, я думаю что надо не только добавить восстановление параметров автозамены кавычек, но и изменить код в части поиска: искать не просто кавычки прямые, а искать их код (через Chr). Иначе,действительно, не совсем корректно получается. Сейчас попробую и изменю.
В общем, можно строку с оператором Find заменить на эту строку:
.Find.text = Chr(34)
спасибо за поднятую тему. У меня возник вопрос, а что делать в подобных случаях?
Пример: «Операция "Кооперация"».
При подобном преобразовании Word делает направление второй кавычки неправильным, если между ней и текстом есть пробел. Как с этим бороться?
Дмитрий, если в вашем тексте перед закрывающей кавычкой идет пробел, то вы можете добавить в вышеприведенный код сразу после оператора End With следующий код:
Он ищет символы пробела и закрывающей кавычки и заменяет на одну кавычку.
Прошу прощения, а нет здесь на сайте макроса, который наоборот превращал бы все подобного рода кавычки « », в " "?
Юра, слегка модифицировав код Антона Кокина, Вы получите желаемое:
Александр Витер, большое спасибо! Все работает!
Подскажите пожалуйста как каким кодом переобразовать все кавычки (« » " ") в умные только те которые открываются вверх а закрываются вниз.
Люди знающие, а могли бы выложить макрос, который бы обрамлял кавычками-лапками выделенный текст? Насколько понимаю, нужно присвоить выделенному тексту некую переменную, а потом её заменить на „переменную“.
Penniwise, всё гораздо проще
Александр Витер
Большое спасибо! Выделение работает!
Александр, спасибо. Всё действительно оказалось проще.
Здесь же замечу — вместо Chr(148) в русском языке нужно использовать Chr(147).
Могу порекомендовать мою модификацию.В случае если кавычки выгибает не в ту сторону
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
Господа, подскажите, есть ли техническая возможность автоматически макросом заменить «елочки» внутри «елочек» на «лапки»?
из
Цитата: «В произведении «Война и мир» Толстого...»
сделать
Цитата: «В произведении “Война и мир” Толстого...»
Попробовал макрос.
Кавычки поменял, но почему-то там, где должны быть правые, он выставил левые и наоборот...
Попробовал "олоша"
Точно так же выворачивает елочки как бог на душу положит!..
Скрипт по смене кавычек " " на « ». Есть небольшие ограничения, но можно легко доработать.
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
а если надо - ООО "Группа "Мэтр" заменить на ООО «Группа «Мэтр» ? по данному выше макросу получилось ООО «Группа »Мэтр«