Если у вас есть идея или совет по эффективному использованию редактора Word, то пишите мне через форму контактов на сайте. Любые ваши дельные советы и подсказки будут размещены в очередных выпусках рассылки и на сайте (с указанием вашего авторства).
Поиск слов с прописными буквами
Роман интересуется: Как в документе найти все слова, написанные прописными буквами? Причем, можно ли результаты поиска вывести вместе, или ворд будет переходить от слова к слову?
Можно воспользоваться следующим макросом, который мне помогли реализовать специалисты VBA с форума microsoft.public.word.vba.general.
Этот макрос позволяет найти в документе все слова, написанные прописными буквами, скопировать их в конец документа, отсортировать по алфавиту и удалить повторяющиеся слова. При этом, не затрагиваются односимвольные слова, типа О, И и так далее.
Обратите внимание, что макрос писал не я, по моей просьбе его составили специалисты с указанного выше форума. Тем не менее, я добавил в текст макроса свои поясняющие комментарии (для себя и тех, кому это может быть интересно в плане изучения опыта).
Sub UcaseList()
'Поиск в тексте слов с прописными буквами, копирование их в конец документа, сортировка и удаление повторяющихся
'Помощь от Jean-Guy Marcil и Graham Mayor
'http://groups.google.ru/group/microsoft.public.word.vba.general/browse_thread/thread/6b84229d8e5c741d?hl=ru#
Dim rngDoc As Word.Range
Dim wu As Word.Range
Dim lngDocEnd As Long
Set rngDoc = ActiveDocument.Range
lngDocEnd = rngDoc.End
With ActiveDocument
Selection.EndKey Unit:=wdStory 'переходим в конец документа
Selection.TypeParagraph 'вставляем параграф
.Bookmarks.Add Range:=Selection.Range, Name:="ListStart" 'вставляем закладку
'для каждого слова проверяем его регистр и если есть слова с прописными буквами, добавляем их в конец документа
For Each wu In rngDoc.Words
If wu.Case = wdUpperCase Then
.Range.InsertAfter vbCrLf & wu.Text
rngDoc.End = lngDocEnd
End If
Next wu
.Bookmarks("ListStart").Select 'выбираем закладку, выделяем все слова, что идут ниже ее, и сортируем их по алфавиту
With Selection
.EndKey Unit:=wdStory, Extend:=wdExtend
.Sort , FieldNumber:="Paragraphs", _
SortFieldType:=wdSortFieldAlphanumeric, _
SortOrder:=wdSortOrderAscending
'с отсортированными словами
With .Find
.ClearFormatting
.Replacement.ClearFormatting
'удаляем пробелы после слов
.Text = "[ ](^13)"
.Replacement.Text = "\1"
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
'удаляем лишние концы абзацев
.Text = "(*^13)@"
.Replacement.Text = "\1"
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
'ищем повторяющиеся слова и удаляем их
.Text = "([!A-Z-А-ЯЁ])[A-Z-А-ЯЁ]^13"
.Replacement.Text = "\1"
.Execute Replace:=wdReplaceAll
End With
End With
End With
End Sub
Макрос изменения регистра первых букв в предложении
Андрей спрашивает: Мне нужен макрос, который бы менял первые буквы предложений, например, с маленькой на большую. После однобуквенных предлогов в начале предложений ставится неразрывный пробел. Курсор перед запуском макроса может находиться в любом месте текста.
Можно воспользоваться следующим макросом:
Sub firstCharCase()
'изменение регистра первых букв предложений и
'замена пробела после однобуквенного предлога на неразрывный пробел
Dim fChar As Range
For Each fChar In ActiveDocument.Sentences
fChar.Characters.First.Case = wdUpperCase
Next fChar
With ActiveDocument
.Select
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "([А-ЯЁ]){1}([ ])"
.Replacement.Text = "\1^s"
.MatchWildcards = True
.Forward = True
.Execute Replace:=wdReplaceAll
End With
End With
Selection.Collapse wdCollapseStart
End Sub
Добавление и настройка часто используемых языков в документах
Анатолий задает вопрос: Подскажите, как в меню Сервис – Язык – Выбор языка оставить только 3 необходимых языка? Постоянно возникает необходимость в выборе между английским/русским/украинским языками. Но часто один из них отсутствует в начале списка и приходится искать его среди огромного количества никогда не используемых языков.
Если мы откроем диалоговое окно "Язык" (Word 2003: меню Сервис - Язык - Выбрать язык; Word 2007: вкладка Рецензирование - группа команд Правописание), то увидим в самом верху списка два языка: русский и английский (Это так у меня. У вас могут быть другие языки.)
В редакторе Word 2007 быстро открыть диалоговое окно "Язык" можно путем двойного щелчка мышью на панели Язык в строке состояния.
Удалить все неиспользуемые языки - под чертой - не удастся. Но можно добавить в верхний список только нужные вам (используемые) языки, в вашем случае русский, английский и украинский. Вот, что в итоге получилось у меня (рисунок).
Для начала необходимо настроить параметры языковой службы в вашей операционной системе: добавить нужные языки. Откройте диалоговое окно "Язык и региональные стандарты" (кнопка ПУСК - Настройка - Панель управления), перейдите на вкладку Языки и нажмите кнопку Подробнее. Откроется другое диалоговое окно "Языки и службы текстового ввода". На вкладке Параметры просмотрите, какие языки у вас установлены. Если нужного языка нет,то нажмите кнопку Добавить и добавьте ваш язык.
Далее, в зависимости от версии используемого пакета Office, откройте диалоговое окно "Языковые параметры Microsoft office 2003" (Пуск - Программы - Microsoft Office - Средства Microsoft Office) или диалоговое окно "Microsoft Office 2007. Языковые параметры". На вкладке Доступные языки выберите и добавьте нужный язык во вторую панель (рисунок).
Перезагрузите редактор и откройте диалоговое окно "Язык". Что получилось в итоге, вы можете видеть на скриншоте в начале заметки.
Тимофей спрашивает: Как сделать условное форматирование в таблице Word: при значении "ready" - красить ячейку в зеленый цвет, при значении "on goning" - в желтый, и при других значениях - в красный? В Excel это называется условным форматированием. В Word найти такого не смог.
Тимофей, если вы хотите делать это автоматически, то вам нужно использовать макрос, который бы проверял каждую ячейку таблицы и, найдя определенное слово в ней, заливал бы эту ячейку нужным цветом. В принципе это несложно реализовать с помощью следующего макроса.
Sub cellscolor()
'Расцвечивание отдельных ячеек в таблице в зависимости от текста в этих ячейках
'Помощь Steven Craig Miller
Dim rngTable As Range
Dim oTable As Table
Dim oRow As Row
Dim oCell As cell
Dim sStr As String
Set rngTable = Selection.Range
Set oTable = Selection.Tables(1)
If Not rngTable.Information(wdWithInTable) Then
MsgBox prompt:="Курсор находится вне таблицы"
Else
With oTable
For Each oRow In .Rows
For Each oCell In oRow.Cells
oCell.Shading.BackgroundPatternColor = wdColorRed 'заливаем все ячейки одним цветом
sStr = oCell.Range.Text
'помимо текста ячейка всегда содержит два дополнительных символа
'в конце. Эти символы нужно исключить, что и делает сл.оператор
sStr = Left(sStr, Len(sStr) - 2)
Select Case sStr
Case "ready"
oCell.Shading.BackgroundPatternColor = wdColorGreen 'зеленым
Case "on goning"
oCell.Shading.BackgroundPatternColor = wdColorYellow 'желтым
End Select
Next oCell
Next oRow
End With
End If
End Sub
Вся информация, представленная на сайте WordExpert.ru и в этой рассылке, никаким образом не связана с корпорацией Microsoft. В рассылке упоминаются компании и продукты, которые могут быть зарегистрированными торговыми марками и принадлежать различным физическим и юридическим лицам как на территории РФ, так и за ее пределами.
Авторские права на все материалы, опубликованные на сайте WordExpert.ru и в этой рассылке (включая текст, фотографии, подборку, расположение и т.п.) принадлежат Кокину Антону Вадимовичу, если не указано иное. Вы можете свободно использовать и распространять эти материалы с обязательной ссылкой вида "Информация с сайта WordExpert.ru" и с обязательным указанием автора материала.
Все материалы, опубликованные на сайте WordExpert.ru и в этой рассылке, представлены на информационной основе. Вы можете использовать любую информацию с сайта WordExpert.ru или из данной рассылки исключительно на свой страх и риск. Тем не менее, я рекомендую перед применением какой-либо информации с сайта WordExpert.ru или из данной рассылки обязательно сохранять и создавать резервные копии ваших документов.
В этой рассылке также упоминаются различные web-страницы с соответствующими ссылками. Эти ссылки указываются исключительно в информационных целях и никакой рекомендации или одобрения с моей стороны данных веб-страниц не подразумевается, если не указано иное.