ОПТИМИЗАЦИЯ КОДА
- Для определения количества символов в части документа используйте свойство StoryLength или функцию Len() , но не команду Characters.Count , которая выполняется довольно долго, если символов много.
- В проверках (If
, Select
и др.) сравнивайте с проверяемым значением - с тем, что должно быть.
- Пример. При проверке на True
правильно писать:
If N <> True Then
Часто ошибочно пишут:
If N = False Then
Если N имеет тип отличный от boolean , код может не сработать.
- Пример. При проверке на True
правильно писать:
- Оптимизация перебора массива (Array
):
- Быстро:
For i = LBound(Array) to UBound(Array)
Next i - Медленно:
For Each V in Array
Next V
- Быстро:
- Оптимизация перебора коллекции (Collection
):
- Быстро:
For Each V in Col
Next V - Медленно:
For i = 1 to Col.Count
V = Col(i)
Next i
- Быстро:
- При массовой проверке строк, Len(S) = 0 медленее чем S = "" .
- Быстродействие перехода по условию:
- Оператор On ... GoSub ... на порядок быстрее чем Select Case .
- Select Case вообще медленная проверка, If работает быстрее.
- Оптимизация перебора символов (Character
) и т.п.:
- Медленный способ:
Dim R As Range
For Each R In ActiveDocument.Characters
Next R - Средний способ:
Set R = ActiveDocument.Characters.First
Do
Set R = R.Next
Loop While Not (R Is Nothing) - Быстрый способ:
Set R = ActiveDocument.Range(0, 0)
Do
Loop While R.Move = 1
- Медленный способ:
- Оптимизация перебора параграфов (Paragraph
) и т.п.:
- Медленный способ:
Dim P As Paragraph
For Each P In ActiveDocument.Paragraphs
Next P - Средний способ:
Set P = ActiveDocument.Paragraphs.First
Do
Set P = P.Next
Loop While Not (P Is Nothing) - Быстрый способ:
Dim R As Range
Set R = ActiveDocument.Range(0, 0)
Do While R.Move(Unit:=wdParagraph) = 1
Set P = R.Paragraphs.First
Loop
- Медленный способ:
- Безопасное применение цикла For Each
- Если, в ходе обработки группы элементов документа, сама коллекция изменяется (удаляются или добавляются элементы), то циклом For Each могут быть пропущены некоторые элементы (из тех, что были при запуске цикла) .
- Пример, где может случится пропуск, и удалены будут не все рисунки:
Dim SH as Shape
SH.Delete
Next - Что бы пример работал без сбоев, надо создать временную коллекцию и запомнить в ней все элементы:
Dim COL as New Collection, SH as Shape
For Each SH in Selection.Range.ShapeRange
COL.Add Item:=SH
Next
For Each SH in COL
SH.Delete
Next
- При обращении к объекту, впереди его имени желательно и полезно указывать его родителя. Достаточно одного - Parent.Object
, но можно и всю цепочку - Parent1.Parent2.Parent3.Object
.
- Пример. В документе в редакторе VBA мы создали форму (UserForm ) с именем "МояФорма", а затем, для ее запуска, в текст документа вставили кнопку (элемент управления CommandButton ), которую также назвали "МояФорма", что естественно и удобно. Теперь, если в макрос нажатия кнопки вставить код МояФорма.Show , то при компиляции ошибки не будет, а вот при запуске мы ошибку получим. Правильно было написать Project.МояФорма.Show , а так мы обратились не к форме, а к кнопке. Если же хотим обратиться к кнопке, то надо писать ThisDocument.МояФорма .
- Для назначения типов, удобно использовать специальные символы: String - $, Integer - %, Long - &, Single - !
- Пример: Dim Строка$, Целое%, Длинное&, Вещественное!
- Для повышения совместимости, имена констант Word лучше заменять их значениями. Это касается языков, списков, полей и др. То есть, в коде пишем 1049, а не wdRussian .
- В математических формулах, что пишем в коде, надо использовать круглые скобки, чтобы в первую очередь выполнялись операции, уменьшающие промежуточный результат. То есть, сначала - деление и вычитание, потом - умножение и сложение. Иначе, если на каком-то этапе расчета число окажется слишком большим, получим ошибку № 6 "Overflow" - переполнение. Так же, непосредственно в формуле,
можно привести тип чисел к Long
, например, ибо по умолчанию имеем Integer
.
- Пример. Так будет ошибка:
Dim V as Variant
V = 999 * 999 / 999
V = (999 * 999) / 999 - А так нет, хотя математически результат один:
V = 999 * (999 / 999)
V = 999& * 999 / 999
V = CLng(999) * 999 / 999
- Пример. Так будет ошибка:
- Избегайте избыточного изменения документа. Не надо слову назначать жирный шрифт, если оно уже жирное. Проверяйте необходимость изменений. Word реагирует на любые операции с документом, что сказывается на быстродействии. При большом количестве избыточных правок, разница по времени просто гигантская, если добавить простую проверку.
- Учитывайте параметры автозамены Word, которых становится все больше, от версии к версии.
- Во-первых, при каждом изменении документа, в том числе макросом, Word выполняет свои автоматические операции. Чем больше изменений и чем больше автозамен, тем медленнее работает макрос.
- Во-вторых, может случится такое, что макрос правит какой-то текст, а Word тут же подправляет его по-своему, согласно настроек автозамены. Это может быть полезным, при замене кавычек, например, но не всегда.
- При длительной обработке документа макросом, отключайте автоматические функции Word. Иначе, и обработка замедлится, и Word может зависнуть.
- Пример. Вы берете большой документ, выполняете его обработку макросом, но Word при этом зависает. Даже не разбираясь в макросах, можно попробовать сделать следующее:
- Откройте обрабатываемый документ.
- Перейдите в параметры Word, где отключите:
- Сохранение > Автосохранение документа (обязательно).
- Правописание > Автоматическая проверка орфографии и грамматики (желательно).
- Правка > Учитывать пробелы (желательно).
- Параметры автозамены (по желанию, уж слишком их много).
- Запустите макрос. Дождитесь его завершения.
- Верните параметры Word в исходное состояние.
- Пример. Вы берете большой документ, выполняете его обработку макросом, но Word при этом зависает. Даже не разбираясь в макросах, можно попробовать сделать следующее:
- Крайне медленно работает обращение к элементу документа по его индексу. Речь о символах, словах, предложениях, абзацах и др. Чем больше элементов в документе, тем "тормоза" более заметны.
- Пример. Вместо прямого обращения к знаку:
Document.Characters(N)
лучше используйте поиск нужных знаков:
Document.Range.Find
в крайнем случае, перебор знаков в цикле:
For Each C In Document.Characters
- Пример. Вместо прямого обращения к знаку:
КОНТРОЛЬ ОШИБОК (On Error )
- Код, вносящий изменения в документ, защищайте On Error .
- Вместо команды Err.Clear , можно использовать On Error Resume Next , которая также очищает последнюю ошибку. В плане надежности это даже полезно.
- В приведенной ниже структуре, выполняемую часть помещать после Else.
Так как, при ошибке в проверке, выполняется блок Then
:
- On Error Resume Next
If ... Then ... Else ...
- On Error Resume Next
- Если контроль ошибок отключен и происходит присвоение переменной, то при ошибке переменная сохранит старое значение. Поэтому, предварительно, надо сбросить значение переменной.
- Пример с ошибкой:
N = 1
On Error Resume Next
N = CLng("") " Run-time error 13
if N = 0 Then Exit Sub - Рабочий пример:
On Error Resume Next
N = 0: N = CLng("")
if N = 0 Then Exit Sub - Правильно:
On Error Resume Next
N = CLng("")
if Err.Number <> 0 Then Exit Sub
- Пример с ошибкой:
РЕЖИМ ПРОСМОТРА ДОКУМЕНТА (View.Type )
- В случае когда, в интерфейсе Word, выбран элемент вне окна активного документа, отдельные свойства и методы активного документа могут быть недоступны.
- Пример. Если в Word 2003 кликнуть правой кнопкой мыши пункт на панели "Схема документа", то документ останется активным, но при обращении к стилю абзаца произойдет ошибка:
- MsgBox ActiveDocument.Paragraphs.First.Style.NameLocal " Run-time error 4605
- Одним из вариантов лечения может быть код:
- ActiveDocument.Windows(1).Panes(1).Activate
- Пример. Если в Word 2003 кликнуть правой кнопкой мыши пункт на панели "Схема документа", то документ останется активным, но при обращении к стилю абзаца произойдет ошибка:
- Selection ведет себя по-разному в различных режимах просмотра документа.
- При обработке макросами, старайтесь использовать режим просмотра "Обычный" (wdNormalView ). Это повышает быстродействие. Особенно при работе с таблицами.
- При переключении режима просмотра, может изменится Selection.Range
, т.к. есть режимы, где отображаются не все элементы документа.
- Пример. В режиме просмотра "Обычный" / "Черновик" (wdNormalView ) не видны объекты. И если, в режиме "Разметка страницы" (wdPrintView ), выбрать текст внутри надписи, то, при смене режима на "Обычный", схлопнется Selection.Range .
ПОИСК (Range.Find )
Подстановочные знаки
- По одному и тому же шаблону, с подстановочными знаками, поиск вперед и назад может дать разные результаты. Тестируйте поисковые шаблоны, что бы знать, какие подходят для поиска вперед, а какие назад.
- Поиск с подстановочными знаками "@" и "{1;}"
- Дает не одно и тоже.
- Пример. При поиске вперед в тексте "111+222+333":
- по шаблону "1@" будет найден один символ "1", а по "1{1;}" - цепочка символов "111"
- по шаблону "[!2]@+" будет найден текст "111+", а по шаблону "[!2]{1;}+" ничего не будет найдено
- Пример. При поиске вперед в тексте "111+222+333":
- При сложном поиске, особенно в обратном направлении, больше подходит "@".
- Пример. Поиск назад в тексте "Один Два Три" по шаблону "<[А-Я]{1;}[А-Яа-я]{1;}>" не даст результата, в отличие от "<[А-Я]@[А-Яа-я]@>".
- По опыту, более стабильным является "{1;}".
- Пример. Лучше использовать"<[А-Я]{1;}>", а не "<[А-Я]@>". Результат одинаков, но первый вариант надежнее.
- Дает не одно и тоже.
- Подстановочный знак \n, где n=1,2,3...:
- Можно использовать не только в поле "Заменить" но и в поле "Найти".
- Пример. Если ищем по шаблону "(ма)\1", то найдем текст "мама".
- Пример. Можно искать повторяющиеся слова. Поиск слова встречающегося в тексте пять раз: "(<*>)*\1*\1*\1*\1".
- Замененный текст, в некоторых случаях, наследует формат впередистоящего.
- Пример. Если искать "(?)X" и заменять на "\1Y" то, когда первый символ найденного текста подстрочный, а второй нет, после замены и второй станет подстрочным. Поиск "X(?)" и замена на "Y\1" не приводит к наследованию.
- Можно использовать не только в поле "Заменить" но и в поле "Найти".
- Спецсимвол "!" при поиске с подстановочными знаками:
- Использовать осторожно. Слишком глобально и много исключений, предусмотреть которые очень трудно.
- Будут найдены только простые символы.
- Пример. Поиск по шаблону "[!A]" не найдет графический объект, гиперссылку и т.п.
- Пример. Поиск в таблице с обычным текстом по шаблону "Дом[!^12]{1;}" найдет текст от слова "Дом" до конца ячейки (тот же результат дает поиск назад по шаблону "Дом*").
- При поиске с подстановочными знаками, старайтесь не использовать знак конца абзаца "^13" вместе со скобками. Замечено нестандартное поведение.
- Пример. Если попробуем две точки в конце абзаца заменить одной, т.е. ищем "([!.].).(^13)" и заменяем на "\1\2", то в параграфе со списком получим интересный глюк.
- При поиске и замене с помощью скобок (подстановочные знаки), поиск надо повторять дважды, когда заменяемая часть находится не в конце искомого текста.
- Пример. При поиске "(X)+(X)" и замене на "\1=\2" в тексте "X+X+X+X+X" получим "X=X+X=X+X". Т.е. поиск надо повторить дважды или, выполняя поиск пошагово, корректировать оставшуюся область поиска.
- Поиск с подстановочными знаками не работает с полями. То есть, с его помощью невозможно найти текст внутри поля.
- Осторожно используйте длинные, сложные шаблоны поиска с подстановочными знаками. Бывают такие сочетания "шаблон поиска + обрабатываемый им документ", что подвешивают Word намертво. То есть, в одном документе все работает, а в другом - виснет. Чем проще, тем лучше.
Оптимизация массовых замен
- Медленный способ, как ни странно:
Range.Find.Execute Replace:=wdReplaceAll - Быстрый способ, особенно при больших объемах:
Range.Find.Execute Replace:=wdReplaceNone
If Range.Find.Found Then
Range.Collapse wdCollapseStart
Range.Find.Execute Replace:=wdReplaceAll
End If - Самосброс. Некоторые параметры поиска, Word меняет самостоятельно. Есть взвимозависимые параметры, когда один параметр сбрасывается при изменении вами другого. Есть параметры сбрасываемые Word в результате запуска вами поиска. Поэтому, при массовых заменах, советую для каждой замены прописывать все параметры.
- Медленный способ, как ни странно:
Поиск, разное
- При поиске стиля, наблюдаем интересный глюк в абзаце перед таблицей. Абзац стилизован одним стилем. При поиске назад, все в порядке. А вот при поиске вперед, сначала поиск находит абзац без знака абзаца, а при продолжении поиска - знак абзаца. Что через диалог, что макросом.
- При замене текста, удаляются или повреждаются закладки:
- Удаляются закладки, попадающие в заменяемый текст.
- Удаляется закладка, область которой совпадает с заменяемым текстом.
- Закладка, охватывающая часть текста, обрезается и вытесняется за текст.
- Сохраняется точечная закладка, стоящая с края текста.
- Всегда продолжайте поиск с конца найденного блока. Например, с конца параграфа, а не с начала следующего. Иначе велика вероятность зацикливания, особенно в таблицах.
- Поиск без текста - только формата (жирный, наклонный шрифт и т.п.), начинается с края выбранной области по направлению поиска. Область как бы предварительно схлопывается в направлении поиска.
- Поиск не сработает, если искомый текст занимает всю область поиска.
- Пример. В области R, содержащей текст R.Text="Иван" , поиск R.Find.Text="Иван" не сработает.
- В таблице, для поиска в последнем параграфе ячейки таблицы при помощи Selection, надо брать область параграфа без последнего символа. Причина хорошо видна, если выполнить код: Cell.Range.Characters.Last.Select
- Учитывайте при поиске символы (Character
) содержащие не один знак. Такие как символ конца ячейки таблицы (13 + 7), гиперссылки и т.п.
- Пример. Поиск по шаблону "Вася[!.]" не найдет слово "Вася" стоящее последним в ячейке таблицы или перед гиперссылкой.
- Если область поиска охватывает часть гиперссылки, то поиск будет произведен в гиперссылке целиком. Желательно выравнивать область поиска с началом/концом символа (Character
). Например, так:
Range.SetRange Start:=Range.Characters.First.Start, End:=Range.Characters.Last.End - При поиске в выбранной области (Selection) учтите, что в таблице невозможно выбрать: стока + ячейка.
- Пример. Код, приведенный ниже, выберет все от начала строки с ячейкой таблицы до конца документа:
Range(позиция в ячейке таблицы, позиция конца документа).Select
- Пример. Код, приведенный ниже, выберет все от начала строки с ячейкой таблицы до конца документа:
- Команда Find.Execute
иногда выдает False
, в то время как поиск успешен и Find.Found=True
. Т.е. надежнее писать так:
Range.Find.Execute
If Range.Find.Found = True Then ... - В виде макроса, реализовать опцию поиска "Выделить все...", для стиля, шрифта, или другого форматирования, можно с помощью команды SelectSimilarFormatting
- Пример. Выделение всех вхождений стиля "Заголовок 1":
Selection.Find.Style = "Заголовок 1"
Selection.Find.Execute
Application.Run "SelectSimilarFormatting"
- Пример. Выделение всех вхождений стиля "Заголовок 1":
- Спецсимвол ^d (он же ^19 - начало поля, есть еще ^21 - конец поля) позволяет искать как любые поля, так и поля определенного типа. Более того, можно найти, выделить и обработать строго отфильтрованные, нужные поля.
- Пример обработки полей типа AUTOTEXT:
- Включим режим отображения кода полей (Alt+F9)
- Откроем окно расширенного поиска (Ctrl+F, Ctrl+H)
- В поле "Найти" водим текст: ^d^wAUTOTEXT^w
- Активируем флаг "Выделить все элементы..."
- Выполним поиск. В результате, будут выделены все поля типа AUTOTEXT. Причем, выделяются не искомые фрагменты кода полей, а именно поля целиком!
- Выделенную группу полей можно вырезать, скопировать, удалить, форматировать и др.
- Можно переключиться обратно - в режим отображения значений полей (Alt+F9). При этом, поля останутся выделенными.
- Пример обработки полей типа AUTOTEXT:
- Если выставить Selection.Find.Wrap = wdFindContinue , то при проходе поиска через край (начало/конец документа), этот параметр самосбросится и станет wdFindStop .
ШРИФТ (Font )
- Свойство Range.Font не включает в себя информацию о пробелах и других пустых символах в области Range , если область содержит видимые символы.
- При изменении любого параметра шрифта Range.Font , у пробелов и других пустых символов, стоящих последними в области Range , после видимого символа, параметры шрифта не изменятся.
СКРЫТЫЙ ТЕКСТ (Font.Hidden )
- Когда скрытый текст виден (ShowHiddenText=True ), то он ведет себя как обычный текст.
- Когда скрытый текст не виден (ShowHiddenText=False
), то:
- Скрытый текст исключается из свойств:
Paragraphs
Range.Characters
Range.Text - Скрытый текст остается в свойствах:
Range.Start
Range.End
Range.Font
Selection.Type
- Скрытый текст исключается из свойств:
- При переключении видимости скрытого текста (ShowHiddenText ), проверяйте и корректируйте области Range . Желательно избегать ситуации, когда текст скрыт, а край области находится внутри скрытого текста.
ТАБЛИЦЫ (Table )
- Команда Select , для выбора столбцов таблицы, работает по-разному, когда таблица находится на одной странице и когда на нескольких.
- Если область схлопнута и находится в начале параграфа сразу за таблицей, то у этой области Range.Tables.Count = 1 . Поэтому, нахождение в таблице лучше проверять функцией Range.Information(wdWithInTable) .
- Если Selection
находится сразу за последней ячейкой строки таблицы то:
Selection.Cells.Count = 1
Selection.Range.Cells.Count = 0 - Осторожно использовать команды перехода по параграфам в таблицах с объединенными ячейками. Например: Selection.Move Unit:=wdParagraph, Count:=1 . При поиске возможно зацикливание.
- Вставка нового столбца в таблицу может быть невозможна из-за ошибки "Превышена максимальная ширина". Поэтому, при создании таблицы макросом, лучше задать столбцам фиксированную ширину, а уже после заполнения можно включить автоподбор ширины и др.
СТИЛИ (Style )
- Желательно исключить пробелы из имен стилей, созданных пользователем. Например, при наличии пробелов, сбоит функция "Выделить все" стиля. Встроенных стилей это не касается.
- Имена встроенных стилей привязаны к региональным настройкам и пишутся на языке интерфейса. Например, стиль "Заголовок 1" в русском Word, это "Header 1" в английском. В макросах, для встроенных стилей, надо использовать номера wdBuiltinStyle , для повышения совместимости.
- Осторожно работайте с неиспользуемыми стилями (Style.InUse = False ). Хотя эти стили и находятся в коллекции документа (Document.Styles ), но к документу пока не относятся, правильнее считать их отдельной группой. Word следит за такими стилями, и даже простое чтение макросом свойств (не всех, но например Style.Description ) неиспользуемого стиля, вызывает автоматическое подключение этого стиля к документу и цепную перенастройку других стилей. В результате чего, документ будет изменен (Document.Saved = False ), связи его стилей (свойства BaseStyle, LinkStyle ) будут перенастроены по какому-то внутреннему алгоритму Word, могут появиться изменения в форматировании документа.
- Параметр стиля InUse
означает, что стиль подключен к документу. Это не значит, что стиль используется прямо сейчас, достаточно было применить стиль ранее. Так же, это может быть стиль, созданный или модифицированный в этом документе.
- Пример. Если применить в документе стандартный стиль "Подпись", а затем удалить все стилизованные им фрагменты, то параметр InUse стиля "Подпись" останется равным True .
- Присвоение стиля делайте через имя, не через объект.
- Ошибка (сбой произойдет, если имя стиля "005", то есть какой-то номер в виде текста):
Selection.Find.Style = MyStyle - Правильно:
Selection.Find.Style = MyStyle.NameLocal
- Ошибка (сбой произойдет, если имя стиля "005", то есть какой-то номер в виде текста):
- В стиле таблицы программно (макросом) нельзя задать:
- Вертикальное выравнивание текста ячеек.
- Значения полей ячеек по умолчанию (для всей таблицы) (TopPadding и др. меняет поля у всех ячеек стиля сразу).
- Параметр "Как во всей таблице" для полей ячейки.
ВЫБРАННЫЙ ФРАГМЕНТ (Selection )
- Объект Selection является уникальным, также как и многие его свойства и методы. Например, у объекта Range набор инструментов для работы с областью существенно уступает Selection .
- Несомненный плюс Selection в том, что возможна работа с несколькими фрагментами, выбранными в разных местах документа. В отличие от Range , где возможна обработка только одного непрерывного фрагмента документа.
- Старайтесь как можно реже использовать Selection в макросах, особенно в сложных. Только по необходимости. Причина - к изменению Selection , привязано очень много автоматических операций Word. Использование Selection , в лучшем случае, сильно замедлит работу макроса, в худшем - приведет к ошибке, сбою.
- Не путать одинаковые свойства и методы у Объект.Свойства и Объект.Range.Свойства. Например, свойства Selection и те же свойства Selection.Range могут существенно различаться.
- При некоторых типах Selection.Type (например, если выбрано полотно) не работает команда ActiveDocument.Styles.Add .
- Когда Selection.Range в начале параграфа, команда Selection.Collapse wdCollapseStart иногда переводит курсор в конец предыдущего параграфа.
- Свойства Selection
относятся к активной части документа.
- Пример:
ActiveDocument.StoryRanges(Index:=wdFootnotesStory).Select
Selection.Find.Execute " что-то ищем и находим...
" до следующей команды Selection находится в FootnotesStory
" ОШИБКА:
ActiveDocument.Range(Selection.Start, Selection.End).Select
" выбрали неизвестно что в главной части документа (wdMainTextStory)
" ПРАВИЛЬНО:
Selection.SetRange Selection.Start, Selection.End
- Пример:
- Без использования буфера, выбранный фрагмент (Selection ), можно копировать и перемещать внутри документа с помощью команд CopyText и MoveText соответственно.
ОБЪЕКТЫ
- Проверка объекта:
- Объект is Nothing = True , если объект не определен.
- IsObjectValid(Объект) <> True
, если объект был удален.
- Рекомендую использовать эту проверку при пакетной обработке объектов в цикле For Each .
- Кроме удаленных, эта проверка отлавливает и поврежденные объекты (встречаются и такие).
- Проверка типа объекта:
- If TypeOf Объект Is Тип Then
- Имя типа объекта:
- S = VBA.TypeName(Объект)
- Запись свойства объекта по имени:
- CallByName Selection.Find, "Text", vbLet, "стул"
- Аналог: Selection.Find.Text = "стул"
- Чтение свойства объекта по имени:
- S = CallByName(Selection.Find, "Text", vbGet)
- Аналог: S = Selection.Find.Text
- Вызов метода объекта по имени:
- CallByName Selection.Find, "Execute", vbMethod, "стул", True
- Аналог: Selection.Find.Execute "стул", True
- Удаляя параграф, вы удаляете прикрепленные к нему рисунки, надписи и другие объекты.
- При работе с рисунками (объекты Shape и InLineShape ) надо серьезно учитывать версию Word. Результат работы одного и того же кода, в разных версиях Word, может существенно отличаться.
- Объекты типа Shape
, привязывается не к параграфу, а к месту в параграфе. Соответственно работает и ShapeRange
.
- Пример. Знак "разрыв страницы" делит параграф на две части (не на два параграфа). Первая часть будет на одной странице, вторая - на другой. И рисунки можно будет вставлять как на одну страницу, так и на другую, с привязкой к одному и тому же параграфу. Аналогично действует знак "разрыв колонки".
- Параметр Anchor
, при создании Shape
, зачастую игнорируется. Помогает вырезание и вставка Shape
. В этом случае, Anchor
всегда совпадает с местом вставки, что позволяет привязать Shape
даже к одному знаку.
- Пример вставки и привязки фигуры "Сердце":
Dim R as Range, SH as Shape
Set R = Selection.Range " место привязки
R.Collapse wdCollapseStart
Set SH = ActiveDocument.Shapes.AddShape(msoShapeHeart, 0, 0, 100, 100, R) " глючит
If R.Start <> SH.Anchor.Start Then " проверка и коррекция
SH.Anchor.Cut
R.Paste
Set SH = R.ShapeRange(1)
End If
- Пример вставки и привязки фигуры "Сердце":
- При позиционировании Shape на странице - при изменении свойств Top и Left , используйте переменные типа Variant . Иначе, позиция Shape может скакать. Например, при использовании типа Single .
ФОРМА, ПАНЕЛЬ, МЕНЮ
- Параметр TakeFocusOnClick , у элементов немодальной формы (ShowModal=False ), всегда оставляйте True . Иначе, форма будет либо не получать фокус, когда она не активна, либо терять фокус, когда элемент формы вызывает другой диалог.
- При создании элементов панели инструментов (кнопок, меню и др.), в команде CommandBarControls.Add параметр Temporary игнорируется. Temporary всегда False , как бы.
РАЗНОЕ
- При проверке кода символа учитывайте, что функция AscW()
может выдать отрицательное число, так как диапазон Unicode от -32768 до 65535.
- Например, надо проверить, что код символа от 0 до 32:
if AscW(S) <= 32 then " ошибка!
if AscW(S) >= 0 and AscW(S) <= 32 then " правильно
- Например, надо проверить, что код символа от 0 до 32:
- Команды Copy , Cut , Paste и другие, работающие с буфером обмена, дополняйте командой DoEvents . Иначе, может возникнуть ошибка "в буфере отсутствуют данные или они имеют неверный формат". Особенно актуально при использовании буфера в цикле.
- При открытии документа в режиме "только для чтения", в нем, тем не менее, могут произойти изменения. При этом, свойство Document.Saved станет равно False . Это происходит из-за параметров документа и Word. Например, при активном параметре "автоматически обновлять связи при открытии".
- Коллекция Application.Documents включает в себя и скрытые документы, которые нельзя сделать активными (ActiveDocument ).
- Учитывайте, что Range.Start и Range.Characters.First.Start не всегда совпадают. Например, когда Range.Start внутри перекрестной ссылки, гиперссылки и т.п.
- Даже когда область Range
схлопнута Range.Characters.Count=1
. Поэтому, нулевую длину области надо проверять так:
If Range.Start = Range.End Then ... - Не путать Len(Range.Text) c Range.Characters.Count . Один Character может содержать несколько символов, а значит возможна ситуация когда: Len(Range.Text) > Range.Characters.Count
- Функция InRange вернет False , если проверяемая область схлопнута и стоит в конце области-родителя. Но вернет True , если схлопнутая область в начале. Такая хитрая логика, не прописанная в документации.
- Команда Application.Run
не возвращает параметры типа Variant
. Задавайте тип явно.
- Пример с ошибкой:
Sub AAA()
Dim V As Variant " надо писать As Long
Application.Run MacroName:="BBB", VarG1:=V
MsgBox V
End Sub
Sub BBB(ByRef V)
V = 123
End Sub
- Пример с ошибкой:
- Команда InsertParagraphBefore/After иногда не срабатывает. Помогает ее замена на: InsertBefore Text:=vbCr .
- Область с последним символом документа ведет себя нестандартно, что может привести к зацикливанию.
- Пример:
ActiveDocument.Range.Characters.Last.Select
Selection.Collapse Direction:=wdCollapseEnd " глюк здесь
- Пример:
- Оператор With ... End With
аналогичен объявлению и освобождению новой переменной. Имя переменной как бы пустое, а для доступа к ее свойствам достаточно напечатать точку.
- Пример с ошибкой:
Dim C As Cell, i As Long
With Selection
For i = 1 To Selection.Cells.Count " ячеек несколько
.Cells(i).Range.Text = "X"
Next i
End With - Исправленный пример:
Dim C As Cell, i As Long
With Selection.Cells
For i = 1 To .Count
.Item(i).Range.Text = "X"
Next i
End With
- Пример с ошибкой:
- Переход в начало N-ой страницы документа:
ActiveDocument.GoTo(wdGoToPage, wdGoToAbsolute, N).Select
или
Selection.GoTo(wdGoToPage, wdGoToAbsolute, N) - Когда одновременно запущено несколько приложений Word, использующих одну надстройку, невозможно выполнить команду Document.Save для этой надстройки, ее будут блокировать остальные Word-приложения. То есть, если вы храните какие-то данные в теле надстройки, например в переменных (Variables ), сохранить их не получится. Возможно это и хорошо, но если сохранять нужно, используйте ini-файл, реестр или др.
При работе с большими текстами, поиск и замена в Ворде играют огромную роль. Например, когда нужно проверить содержание на наличие определенных слов или исправить слово, которое встречается в тексте несколько раз – функции поиска и замены выполняют почти всю работу за Вас. Давайте посмотрим, как это работает.
Все примеры я привожу с помощью MS Word 2013. Если у Вас другая версия программы, описанный функционал может немного отличаться.
Поиск в MS Word
Чтобы начать поиск, выполните на ленте Главная – Редактирование – Найти (или нажмите комбинацию Ctrl+F ).
На экране область задач «Навигация», которая организует пользовательский интерфейс при поиске. Найдите поле «Поиск в документе», запишите туда искомое слово или фразу, после чего нажмите Enter. В области задач появится список найденных совпадений, а на листе они будут выделены цветом.
Если навести на любой пункт результатов, программа покажет на какой странице и в каком разделе находится найденное слово.
Если кликнуть по любому из результатов – курсор переместится к этому слову на листе, и оно будет выделено. В таком случае его легко будет сразу заменить другим текстом.
Расширенный поиск в Ворде
Если нужно задать более строгие параметры поиска – выполните на ленте: Главная – Редактирование – Найти – Расширенный поиск . В открывшемся окне «Найти и заменить» нажмите «Больше».
В окне появятся дополнительные опции, которые позволят сделать гибкую настройку поиска. Можно задавать такие параметры:
- Направление – выбрать направление поиска от текущего положения курсора. Везде – во всем документе, Назад – двигаться к началу документа, Вперед – двигаться к концу;
- Учитывать регистр – учитывает прописные и заглавные буквы. По умолчанию регистр не учитывается;
- Только слово целиком – исключить результаты, где искомое слово будет частью другого слова. Если не установить эту галку, то, например, поиск слова «кот» отберет для Вас и слово «кот лета», поскольку оно включает в себя искомый текст;
- Подстановочные знаки – позволяют искать с учетом непечатаемых символов или когда искомая фраза известна не полностью. Например, Вы могли написать «клён», а могли «клен». Чтобы найти это слово в любом случае – используйте подстановочный знак «^?», который обозначает любой символ. Т.е. в строке поиска напишите «кл^?н». Запоминать подстановочные символы необязательно, их cписок открывается по нажатию кнопки «Специальный» в окне «Найти и заменить»;
- Произносится как – используется только для англоязычных слов, позволяет искать слова, которые одинаково произносятся, но пишутся по-разному;
- Все словоформы – для поиска слова в любой его словоформе;
- Учитывать префикс, учитывать суффикс – ищем слова, начинающиеся или заканчивающиеся определенным текстом;
- Не учитывать знаки препинания – игнорирует запятые, точки и другие знаки препинания
- Не учитывать пробелы – игнорирует пробелы;
- Формат – задать поиск по формату текста
Записывайте текст поиска в поле «Найти», устанавливайте нужные параметры поиска и нажимайте «Найти далее». Если результат будет найден – он сразу отобразится на экране. В противном случае, программа сообщит, что по Вашему запросу нет результатов.
Замена текста в Microsoft Word
Часто нужно заменить часть текста другим. Например, изменилось наименование организации, и его нужно исправить во всем документе. Конечно, Вам не придется менять все вручную, воспользуемся встроенными инструментами Ворда.
Сначала откроем окно «Найти и заменить» на ленте, или просто нажмем Ctrl+H (буква латинская). Перейдем на вкладку «Заменить» и в поле «Найти» запишем фразу, которую нужно заменить. Здесь, как и в поиске, можно использовать те же расширенные параметры.
В поле «Заменить на» укажем, каким текстом заместить найденное словосочетание. Если нужно заменить только ближайший результат поиска – жмите «Заменить». Если замену делаем по всему документу – выберите «Заменить все».
В итоге, программа укажет, сколько было сделано замен, либо предупредит, что искомый текст не найден.
Советую попрактиковаться с поиском и заменой, используя описанные инструменты. Если Вы будете решать сложные задачи в Word, днями работать с огромными текстами – эти навыки станут полезными уже с первого дня применения. Они входят в «джентльменский набор» любого пользователя, экономят уйму времени и снижают вероятность ошибки при ручных исправлениях.
Вот и все о поиске. А впереди Вас ждет . Прочтите, и никакая досадная ошибка больше не проберется в ваш текст. До встречи в следующей статье!
Microsoft Word предоставляет необыкновенно мощный инструмент для поиска и замены. Умение грамотно им пользоваться существенно упрощает редактирование и правку документов. В этом разделе подробно освещается использование специальных знаков в операциях поиска и замены; приведен ряд примеров.
Рассмотрим простой случай поиска и замены. Требуется заменить во всем документе фамилию Иванов на Петров . Это легко производится с помощью стандартной процедуры поиска и замены. Однако, поскольку фамилия Иванова в документе может быть в разных падежах и числах , то придется выполнить последовательно много замен.
Использование специальных знаков позволяет выполнить поставленную задачу сразу за один прием .
Другой пример. В документе очень много десятичных дробей. Часть дробей набрана через точку, часть - через запятую. Требуется произвести такую замену, чтобы сделать написание всех дробей единообразным.
Оказывается, для этого надо выполнить всего одну операцию поиска и замены с использованием специальных знаков .
Более сложный пример видоизменения текста. Дан большой документ, содержащий текст словаря компьютерных терминов следующего вида:
Документ без названия
В тексте нет никаких текстовых выделений. Общее число словарных статей - например, около 30000.
Требуется:
1. Найти все переводимые английские термины и выделить их полужирным начертанием. При этом все другие английские слова оставить в неприкосновенности.
2. Дефис между английским термином и его переводом заменить на тире . При этом все другие дефисы оставить в неприкосновенности.
3. Абзацы с английским термином отодвинуть от предыдущего на 2 пункта и обеспечить выступ этих абзацев на 0.25 см.
Для выполнения задачи нужно найти все 30000 фрагментов текста, отвечающих вышеприведенным условиям, сделать 30000 выделений полужирным начертанием и 30000 замен дефиса на тире, а также осуществить сдвиг абзацев.
Можно ли это сделать менее, чем за 1 минуту?
Да можно. Для этого надо выполнить одну операцию поиска и замены с использованием специальных знаков.
Решение этих задач приводится в конце раздела.
В Microsoft Word существуют два типа специальных знаков - специальные символы и подстановочные знаки . Те и другие удобно вводить в строки поиска и замены, используя кнопку «Специальный» в диалоге поиска и замены.
Специальными символами называют символы, которых нет на клавиатуре и/или которые невозможно непосредственно вписать в строку поиска или замены. Например, принудительный обрыв строки, мягкий перенос, неразрывный пробел и т. п.
Подстановочные знаки используются для формирования по определенным правилам сложных условий поиска и замены. С их помощью можно задавать диапазоны символов и выражения, отвечающие ряду условий. Чтобы получить возможность использовать подстановочные знаки, следует включить опцию «Подстановочные знаки» в диалоге поиска и замены.
Приведем полный список символов и знаков и примеры их использования.
Документ без названия
Документ без названия
Спец. символы |
Что обозначают |
Символ табуляции (→) |
|
Комментарий |
|
|
|
Неразрываемый пробел (°) |
|
Неразрываемый дефис (-) |
|
Мягкий перенос (¬) |
Документ без названия
Спец. знаки |
Что обозначают |
Пример строки поиска |
Что будет находить |
Один любой символ |
бак , бок , бук , б5к , б¶к и т. п. |
||
Любое число любых символов |
бык
, бардак
, белый.¶ |
||
Один из указанных символов |
бак , бок , бук |
||
Один символ из диапазона. |
Любая строчная русская буква |
||
Любая прописная русская буква |
|||
Любая цифра |
|||
Один любой символ не указанный после восклицательного знака |
бак , бок и т. п., но не бык |
||
Один любой символ не входящий в диапазон указанный после восклицательного знака |
Бок , Док и т. п., но не бок , док |
||
Любой символ кроме цифр |
|||
Строго n штук предыдущего символа или выражения. Выражением является все то, что заключено в круглые скобки. Выражение может состоять как из конкретных символов, так и содержать спец. знаки. |
1000 , но не 100 , 10000 |
||
102020 , но не 1020 , 10202020 |
|||
n и более штук предыдущего символа или выражения |
1000 , 10000 , 100000 и т. д., но не 100 |
||
От n до m штук предыдущего символа или выражения |
1000 , 10000 , но не 100 , 100000 |
||
один или более штук предыдущего символа или выражения |
10 , 100 , 1000 , 10000 и т. д. |
||
Начало слова |
бок сер, но не колобок |
||
Конец слова |
колобок , но не бок сер |
Документ без названия
Спец. символы |
Что обозначают |
Символ конца абзаца (¶) |
|
Символ табуляции (→) |
|
Любой ANSI или ASCII символ с кодом nnn |
|
Содержимое буфера обмена |
|
Содержимое строки поиска (или то, что найдено) |
|
Разрыв колонки (···Column Break···) |
|
Принудительный разрыв строки () |
|
Принудительный разрыв страницы (--Page Break--) |
|
Длинное тире (-). Символ с кодом 0151. |
|
Короткое тире (–). Символ с кодом 0150. |
|
Неразрываемый пробел (°) |
|
Неразрываемый дефис (-) |
|
Мягкий перенос (¬) |
Документ без названия
Знаки |
Что обозначают |
Выражение номер n из строки поиска |
Точка с запятой в операторах {n;} и {n;m} - это не просто точка с запятой, а, так называемый List separator (Разделитель элементов списка). В США - это запятая, в России - точка с запятой. Чтобы точно узнать, какой символ играет роль разделителя элементов списка в вашей конфигурации, загляните в Панель управления\Язык и стандарты\Числа\Разделитель элементов списка.
Для поиска в документе знаков, которые в строке поиска используются как специальные, необходимо набирать перед ними обратный слэш (\). Например, если включена опция «Подстановочные знаки», то, чтобы искать восклицательный знак, надо в строке поиска набрать обратный слэш и за ним восклицательный знак (\!).
Опция «Подстановочные знаки» должна быть включена в диалоге поиска и замены. Это условие должно соблюдаться для всех приведенных ниже примеров.
Документ без названия
Строка поиска |
Что будет находить |
[!^0013]^0013[!^0013] |
Одиночный конец абзаца в окружении двух любых других символов.(Подробный разбор см. ниже). |
Два и более конца абзацев |
|
Два и более символов пробела |
|
Любой знак препинания (. , : ; ! ?) |
|
Две любые цифры разделенные пробелом |
|
^0032 |
Цифра и буква (английская или русская), разделенные пробелом. (Подробный разбор см. ниже). |
Дефис и цифра |
|
<@-@> |
Два целых числа, разделенные дефисом |
Цифра в круглых скобках |
|
Целое число (точнее, непрерывная последовательность цифр) |
|
<@,@> |
Десятичная дробь, набранная через запятую |
Английское слово |
|
<[А-яЁё]@> |
Русское слово |
<[А-ЯЁ][а-яё]@> |
Русское слово, набранное строчными буквами, но с прописной. (Подробный разбор см. ниже). |
[!^0013]^0013[!^0013]
Документ без названия
1-й символ строки поиска |
2-ой символ |
3-й символ |
Конец абзаца |
Любой символ, но не конец абзаца |
|
Конец абзаца (символ с кодом 0013). |
В квадратных скобках указан символ с кодом 0013 (конец абзаца). |
|
Таким образом, мы указали поиску, что будем искать последовательность из трех символов. Средний должен быть концом абзаца, а первый и третий могут быть любыми, но не концами абзаца. |
^0032
Документ без названия
1-й символ строки поиска |
2-ой символ |
3-й символ |
Любая цифра |
Любая буква (английская или русская) |
|
В квадратных скобках указан диапазон знаков от 0 до 9, т. е. цифры. |
Пробел (символ с кодом 0032). |
Допустимый символ определен тремя диапазонами и двумя конкретными символами. |
Таким образом, мы указали поиску, что будем искать последовательность из трех символов. Первый может быть любой цифрой, второй - только пробелом, а третий - любой английской или русской буквой. |
<[А-ЯЁ][а-яё]@>
Документ без названия
1-я позиция строки поиска |
2-я позиция |
Любая русская прописная буква |
Любые русские строчные буквы |
В квадратных скобках указан диапазон знаков от А до Я и Ё (т. е. любая русская прописная буква). |
Диапазон в квадратных скобках определяет все русские строчные буквы. |
Таким образом, мы указали поиску, что будем искать последовательность из двух символов. Первый может быть любой прописной русской буквой, а второй - любой строчной русской буквой. |
Для работы с выражениями включите опцию «Подстановочные знаки».
В строке поиска выражением является все то, что заключено в круглые скобки, которые в этом случае выступают в роли специальных знаков. Выражение может состоять как из конкретных символов, так и содержать подстановочные знаки или специальные символы. Порядок следования выражений определяет их нумерацию.
В строке замены выражения представляются в виде: \n, где n - номер выражения в строке поиска.
Будем редактировать предложение: Настя ест яблоки.
Документ без названия
Документ без названия
Строка поиска |
Строка замены |
Результат поиска и замены |
([!^0013]^0013)([!^0013]) |
Вставка пустой строки между теми абзацами, между которыми ее не было. |
|
Удаление пустых строк |
||
Замена двух или более пробелов на табуляцию |
||
^0032([.,:;\!\?]) |
Удаление пробела перед знаком препинания (. , : ; ! ?) |
|
()^0032() |
Замена пробела между цифрами на неразбиваемый пробел |
|
()^0032() |
Замена пробела между цифрой и буквой (английской или русской) на неразбиваемый пробел |
|
Замена дефиса перед цифрой на минус |
||
Замена круглых скобок вокруг цифры на квадратные |
1. Замена в документе фамилии Иванов на фамилию Петров сразу во всех падежах:
Документ без названия
Конечно, такая замена возможна только с фамилиями, у которых одинаковые падежные окончания .
2. Требуется произвести такую замену, чтобы сделать написание всех дробей единообразным, когда часть дробей набрана через точку, часть - через запятую.
Вот два варианта этой замены:
Документ без названия
3. Обработка текста словаря компьютерных терминов.
Вот как это решается за минуту:
Сначала весь текст форматируется так: Формат->Абзац->Отступ слева 0.25 см. Для строки замены с помощью кнопки «Формат» необходимо предварительно установить: «Шрифт » начертание Полужирный, «Абзац » Отступ слева 0 см, «Абзац » Интервал перед 2 пт.
Затем производится установка в строках поиска и замены:
Документ без названия
Строка поиска |
Строка замены |
(^0013@)^0032- |
После этого следует нажать на кнопку «Заменить все». В результате:
Все переводимые английские термины выделяются полужирным начертанием. При этом все другие английские слова остаются в неприкосновенности.
Дефис между английским термином и его переводом заменяется на тире. При этом все другие дефисы остаются в неприкосновенности.
Абзацы с английскими терминами отодвигаются вниз от предыдущих абзацев с объяснением термина и выдвигаются влево.
Т. е., во всех, например, 30000 фрагментах текста, отвечающих вышеприведенным условиям, производится 30000 требуемых изменений и получается следующее:
Документ без названия
Alpha
(nu
)
meric
display
-
буквенно-цифровой (символьный) дисплей. 6. Воронин А. Простая вёрстка в Word. Microsoft Word 2002 XP. - М.: «СПАРРК», 2003. - 352 с. 7. Технология полиграфического производства. Часть 1. Издательские и наборные процессы. Лабораторные работы для специальности 051900 «Графика». М.: МГУП, 2002. - 60 с. |
Способы, как узнать код символа без программирования
1. Можно в интернете поискать таблицу "ASCII", "ANSI" или "Юникод".
2. Использование "Вставка" - "Символ".
Показать
Для некоторых символов можно попробовать такой способ: выделите символ, для которого нужно узнать код, - вкладка "Вставка" - группа "Символы" - Другие символы... - появится диалог - если в этом диалоге выделен тот же символ, что вы выделили в ворде, то в правом нижнем углу, в поле "Код знака" будет код символа.
В поле "Код знака" код символа может быть в десятичной и шестнадцатеричной системе счисления. Чтобы узнать, в какой системе счисления находится код в поле "Код знака", посмотрите справа поле "из" и что написано на конце в скобках. Там может быть или "(дес.)" или "(шестн.)".
Если "дес", то просто подставляйте код знака, как есть в поле "Найти", добавив спереди символ "^". Если "шестн", то сначала переведите число в десятичную систему счисления (попробуйте найти в интернете онлайн-переводчики), а затем подставляйте в поле "Найти", добавив спереди "^". Если этот символ есть только в таблице "Юникод", то спереди добавьте "^u".
Если в диалоге выделен другой символ, значит в этом диалоге нет информации по данному символу. Такое может быть, например, со спецсимволами, например, с символом "знак абзаца" - ansi-код 13; в этом диалоге коды начинаются с большего кода.
В этом диалоге используется три таблицы символов:
1) ASCII
2) ANSI. Для русского языка таблица "ANSI" в этом диалоге называется "Кириллица".
3) Юникод
Способы, как узнать код символа с помощью программирования
1. Во встроенной vba-справке есть раздел: VBA language reference > Visual Basic language reference > Character Sets.
2. Можно выделить нужный символ в программе "Word", затем нужно перейти в VBA и в окне "Immediate Window" нужно использовать такие коды:
Print Asc(Selection.Text)
или
Print AscW(Selection.Text)
Для кода, полученного первым способом, спереди нужно подставить "^", а во втором случае "^u".
3. Если второй способ даёт неправильный код (такое может быть иногда по непонятным причинам), то тогда такой способ. Скопируйте символ, для которого нужно узнать код, - отобразите окно "Найти и заменить" - вставьте в поле "Найти" скопированный символ - включите запись макросов - щёлкните "Найти" - отключите запись макросов - перейдите в VBA и возьмите код символа из записанного макроса.
В некоторых случаях нельзя вставить скопированный символ в поле "Найти". Не могу объяснить, почему это происходит.
Примечания
В ворде при поиске и замене нужно спереди кода символа ещё добавлять нули, чтобы было четыре цифры, например: ^0013. Это такой синтаксис. Если просто указать "^13", то не будет работать, если после "^13" будет ещё какой-то текст.
Поиск по документу
Word
осуществляется функцией «Найти». Смотрите статью «Поиск в документе Word ». Но поиск в Word можно осуществлять не только по словам, но и с учетом регистра, по шрифту, стилю, с помощью подстановочных знаков, т.д.
Если в тексте много похожих слов, то нужно будет искать в результатах поиска среди них. Чтобы найти одно конкретное слово, есть в Word расширенный поиск
. В нем можно найти данные по более точным, детальным данным - с учетом регистра (строчные или прописные буквы), слово по полному совпадению, найти слово не только по тексту, но и по оформлению этого слова, по другим условиям.
Итак, на закладке «Главная» в разделе «Редактирование» нажимаем кнопку «Найти». Внизу появившегося окна нажимаем на кнопку «Больше>>>». Появится окно расширенного поиска.
Рассмотрим его.
«Направление» - это поиск по документу Word, направление поиска в документе. Например, если выберем направление «Вперед», то поиск будет проходить от курсора только вниз по документу. Если выберем «Назад»- вверх по документу. В ссылках и колонтитулам в этих случаях поиск осуществляться не будет. Если выберем поиск «Везде», то Word будет искать везде по документу, в т.ч. в колонтитулах, в ссылках.
Поиск по словам в
Word.
«Учитывать регистр» - это значит, если в строке поиска напишем слово маленькими буквами, то и искать Word будет только слова, написанные маленькими буквами. Если напишем слово с большой буквы, то будет искать слова, написанные с большой буквы.
«Только слова целиком» - будет искаться только слово, которое написали в строке поиска. Например, в строке поиска мы написали слово «мам». Простой поиск выдаст слова – мам, мамочка, мамуля, т.д. Все слова, в которых содержится слово «мам». Расширенный поиск выдаст только слово «мам».
«Подстановочные знаки» - это знаки, которые обозначают определенные значения в слове. Например, мы поставили галочку у функции
Word «Подстановочные знаки»
, а в строке поиска написали так «С?ло».Это значит, что нужно найти все слова с этими буквами, но вторая буква (где стоит знак вопроса) может быть любая. Поиск нашел такие слова – сало, село.
Рассмотрим несколько подстановочных знаков.
Подстановочные знаки
Word
.
? (вопросительный знак
– любая буква.
*(звездочка)
– несколько символов. Например, написали – «Л*сь», найдет – лось, лосось.
(квадратные скобки)
- найдет все слова с символами, указанными в квадратных скобках. Например, написали в строке поиска «С[ае]ло», найдет – сало, село. [ - ] (буквы через тире, в квадратных скобках)
– будет искать все слова с буквами, которые написаны в диапазоне в квадратных скобках. Например, написал «С[а-е]ло», найдет – сало, село, т.д.
[!] (восклицательный знак в квадратных скобках)
– будет искать слова, кроме слов с буквой с восклицательным знаком. Написали в строке поиска «С[!а]ло», найдет – село. А слово «Сало», показывать в результатах поиска не будет, хоть и есть это слово в тексте, п.ч. мы написали в строке поиска условие, чтобы слова, в которых будет после буквы «С» буква «а», не искал.
>(знак больше)
– это как стрелка, показывает, в какой части слова искать. Этот знак будет искать слова, которые оканчиваются на указанные в поиске буквы. Например, написали так, «(ист)>». Найдет и покажет в результатах поиска слово - лист, п.ч. оно оканчиваются на «ист». А слово «источник» не покажет.
<(знак меньше) –
будет искать слова, которые начинаются с букв, которые мы укажем в поиске. Например, мы написали «<[лис]». Найдет слово – лис, не будет искать и не покажет слово, полис.
@ («собака» – в разговорном русском языке)
– повторяющиеся символы. Например, написали «»С@ыпать». Найдет слово ссыпать.
{
n} (фигурные скобки с числом n)
– в фигурные скобки ставим число (n), которое укажет, с каким количеством повторений указанного символа нужно искать слова. Например, написали так, «*е{2}». Здесь мы указали такое условие поиска – искать слова, которые имеют несколько символов (*), конкретно букву «е», которая будет в словах повторяться 2 раза. Word нашел такое слово – «смелее». А слово «короче» не покажет в результатах поиска, п.ч. в нем одна буква «е».
{
n,} (фигурная скобка с числом
n и запятой) – пишем
количество повторений символов от указанного числа и более. Например, написали – «*е{2,}». Поиск выдал слова – смелее, змееед.
Чтобы поставить квадратные скобки в Word
, нужно переключить клавиатуру на английскую раскладку. Квадратные скобки находятся на кнопках русских букв «х» и «ъ».
Фигурные скобки в Word
ставим, как квадратные, только сначала нажимаем клавишу «Shift».
Функция поиска «Произносится как»
позволяет найти слова, которые пишутся по-разному, но произносятся одинаково. Эта функция работает только с английским текстом.
Функция «Все словоформы»
ищет все словоформы, например, времена глаголов, т.д.
Поиск в документе Word по формату
.
В диалоговом окне «Найти и заменить» нажимаем на кнопку «Формат»
, расположенную внизу окна. Выбираем нужное из появившегося списка.
Кнопка «Специальный» тоже имеет перечень функций.
Поиск и замена в Word.
В Word можно не только найти расширенным поиском, но и заменить. Переходим в диалоговом окне «Найти и заменить» на закладку «Заменить», и в строке «Заменить» пишем подробные условия замены.
Как удалить в Word слово с ошибкой, которое мы внесли случайно, смотрите в статье "