Контакти

Використання символів узагальнення

У Word є дуже потужний інструмент пошуку, за допомогою якого можна знаходити інформацію практично з будь-якого типу умов. Існують спеціальні символи узагальнення, які дозволяють шукати інформацію за певним шаблоном або заданій послідовності символів.

Пошук з підстановочних знаками здійснюється в діалоговому вікні Find and Replace (Знайти і замінити). Ми познайомимо Вас з основними правилами використання цього інструменту, щоб Ви навчилися знаходити в документах Microsoft Word практично все, що завгодно.

Відкрийте файл Word і натисніть клавіші Ctrl + H, Щоб відкрити діалогове вікно Find and Replace(Знайти і замінити). Клацніть по More(Більше), щоб розгорнути діалогове вікно і отримати доступ до додаткових параметрів.

Примітка:Якщо замість кнопки More(Більше) Ви бачите кнопку Less(Менше), натискати нічого не потрібно. Діалогове вікно вже розгорнуто.

Поставте галочку навпроти опції Use wildcards(Символи узагальнення). Зверніть увагу, що під полем Find what(Знайти) з'явилася відповідна напис.

Примітка:коли параметр Use wildcards(Символи узагальнення) включений, Word шукає тільки точний збіг із заданим текстом. параметри Match case(Враховувати регістр) і Find whole words only(Тільки слово цілком) недоступні і затінені сірим, щоб продемонструвати, що вони включені автоматично і їх не можна відключити, поки ви обрали Use wildcards(Символи узагальнення).

Для прикладу знайдемо всі повторення тексту, що починається на "t" і закінчується на "e" з будь-якою кількістю символів між цими буквами. Для цього введіть "t" в поле Find what(Знайти) і натисніть кнопку Special(Спеціальний) внизу діалогового вікна. В меню оберіть 0 or More Characters(Будь-яке число знаків) або зірочку (*).

Примітка:Якщо Ви знаєте, який саме спеціальний символ потрібно використовувати, можете ввести його безпосередньо в полі Find what(Знайти). кнопка Special(Спеціальний) дає підказку на той випадок, якщо Ви не пам'ятаєте, які спецсимволи доступні і яке їхнє призначення.

Пошуковий запит надійде в обробку. Коли знайдеться перший збіг, натискайте кнопку Find Next(Знайти далі), щоб знайти такі фрагменти тексту, відповідні запиту.

Щоб відшукати текст, що містить один будь-який символ, використовуйте знак питання (?). Наприклад, якщо ввести запит "d? G" в поле Find what(Знайти), будуть знайдені всі слова, що складаються з трьох букв, Що починаються на "d" і закінчуються на "g", наприклад, "dig", "dug", "dog".

Ще можна визначити конкретні літери для пошуку, вказавши їх у квадратних дужках "". Наприклад, якщо ввести запит "bt" в поле Find what(Знайти), будуть знайдені слова "bat", "bet", "bit", "bot" і "but".

якщо параметр Use wildcards(Символи узагальнення) включений, а Вам потрібно знайти один з символів, який використовується як підстановлювальний, поставте слеш (/) перед цим символом і запустіть пошук. Наприклад, щоб знайти знак питання при включеному параметрі Use wildcards(Символи узагальнення) потрібно ввести запит "/?" в полі Find what(Знайти).

Крім того, групові символи можна використовувати для заміни тексту. Наприклад, підстановлювальний символ "/ n" (тут n - це номер слова, яким замінюємо) можна використовувати для пошуку виразу і подальшої його заміни іншим виразом. Наприклад, ми ввели "(Kaufman) (Lori)" в поле Find what(Знайти), а в полі Replace with(Замінити на) - "/ 2/1" (не забудьте поставити пробіл між цифрою 2 і другим символом "/"). В результаті Word знаходить "Kaufman Lori" і замінює на "Lori Kaufman".

Microsoft Wordнадає надзвичайно потужний інструмент для пошуку і заміни. Уміння грамотно ним користуватися істотно спрощує редагування та правку документів. В цьому розділі детально висвітлюється використання спеціальних знаків в операціях пошуку і заміни; наведено ряд прикладів.

Розглянемо простий випадок пошуку і заміни. Потрібно замінити у всьому документі прізвище Іванов на Петров. Це легко проводиться за допомогою стандартної процедури пошуку і заміни. Однак, оскільки прізвище Іванова в документі може бути в різних відмінках і числах, То доведеться виконати послідовно багато замін.

Використання спеціальних знаківдозволяє виконати поставлене завдання відразу за один прийом.

Інший приклад. У документі дуже багато десяткових дробів. Частина дробів набрана через точку, частина - через кому. Потрібно зробити таку заміну, щоб зробити написання всіх дробів однаковим.

Виявляється, для цього треба виконати всього одну операцію пошуку і заміни з використанням спеціальних знаків.

Більш складний приклад видозміни тексту. Дан великий документ, який містить текст словника комп'ютерних термінів такого вигляду:

Документ без назви

У тексті немає ніяких текстових виділень. Загальна кількість словникових статей - наприклад, близько 30000.

потрібно:

    1. Знайти всі перекладні англійські терміни і виділити їх жирним шрифтом. При цьому всі інші англійські слова залишити в недоторканності.

    2. Дефіс між англійським терміном і його перекладом замінити на тире. При цьому всі інші дефіси залишити в недоторканності.

    3. Абзаци з англійським терміномвідсунути від попереднього на 2 пункти і забезпечити виступ цих абзаців на 0.25 см.

Для виконання завдання потрібно знайти всі 30000 фрагментів тексту, що відповідають вищенаведеним умовам, зробити 30000 виділень жирним шрифтом і 30000 замін дефіса на тире, а також здійснити зрушення абзаців.

Чи можна це зробити менш, ніж за 1 хвилину?

Так можна. Для цього треба виконати одну операцію пошуку і заміни з використанням спеціальних знаків.

Вирішення цих завдань наводиться в кінці розділу.

У Microsoft Word існують два типи спеціальних знаків - спеціальні символи і символи узагальнення. Одні й другі зручно вводити в рядки пошуку і заміни, використовуючи кнопку «Спеціальний» в діалозі пошуку і заміни.

спеціальними символаминазивають символи, яких немає на клавіатурі і / або які неможливо безпосередньо вписати в рядок пошуку або заміни. Наприклад, примусовий обрив рядка, варіант переносу, нерозривний пробіл і т. П.

символи узагальненнявикористовуються для формування за певними правилами складних умов пошуку і заміни. З їх допомогою можна задавати діапазони символів і вирази, які відповідають ряду умов. Щоб отримати можливість використовувати символи узагальнення, слід включити опцію «Символи узагальнення» в діалозі пошуку і заміни.

Наведемо повний список символів і знаків і приклади їх використання.

Документ без назви

Документ без назви

Спец.символи

що позначають

Символ табуляції (→)

коментар


Якщо опція Use wildcards включена, то будуть знаходитися і примусовий розрив сторінки, і розрив розділу.

Нерозривний пробіл (°)

Нерозривний дефіс (-)

М'який перенос (¬)

Документ без назви

Спец. знаки

що позначають

Приклад рядка пошуку

Що буде знаходити

Один будь-який символ

бак, пліч, бук, б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

Цифра і буква (англійська або російська), розділені пропуском. (Докладний розбір див. Нижче).

Дефіс і цифра

<@[Email protected]>

Два цілих числа, розділені дефісом

Цифра в круглих дужках

Ціле число (точніше, безперервна послідовність цифр)

<@,@>

Десяткова дріб, набрана через кому

англійське слово

<[А-яЁё]@>

Російське слово

<[А-ЯЁ][а-яё]@>

Російське слово, набране малими літерами, але з великої. (Докладний розбір див. Нижче).

[!^0013]^0013[!^0013]

Документ без назви

1-й символ рядка пошуку

2-ий символ

3-й символ

кінець абзацу

Будь-який символ, але не кінець абзацу

Кінець абзацу (символ з кодом 0013).

У квадратних дужках вказано символ з кодом 0013 (кінець абзацу).
Знак «!» вказує на те, що в цій позиції може знаходиться будь-який символ, крім кінця абзацу.

Таким чином, ми вказали пошуку, що будемо шукати послідовність з трьох символів. Середній повинен бути кінцем абзацу, а перший і третій можуть бути будь-якими, але не кінцями абзацу.

^0032

Документ без назви

1-й символ рядка пошуку

2-ий символ

3-й символ

Будь-яка цифра

Будь-яка буква (англійська або російська)

У квадратних дужках вказано діапазон знаків від 0 до 9, т. Е. Цифри.

Пропуск (символ з кодом 0032).

Допустимий символ визначений трьома діапазонами і двома конкретними символами.
A- Z- англійські малі літери;
а-z- англійські малі літери;
А я- російські великі та малі літери;
ЇЇ- прописна і рядкова е(Щоб охопити весь російський алфавіт).

Таким чином, ми вказали пошуку, що будемо шукати послідовність з трьох символів. Перший може бути будь-якою цифрою, другий - тільки пропуском, а третій - будь-якої англійської або російською буквою.

<[А-ЯЁ][а-яё]@>

Документ без назви

1-я позиція рядка пошуку

2-я позиція

Будь-яка російська прописна буква

Будь-які російські малі літери

У квадратних дужках вказано діапазон знаків від А до Я і Е (т. Е. Будь-яка російська прописна буква).
знак «<» указывает на то, что прописная буква должна быть в начале слова.

Діапазон в квадратних дужках визначає всі російські малі літери.
Знак «@» говорить про те, що число російських малих літер може бути рівним або більше нуля.
Знак «>» вказує на кінець слова.

Таким чином, ми вказали пошуку, що будемо шукати послідовність з двох символів. Перший може бути будь-який прописаний російською буквою, а другий - будь-який малої російською буквою.

Для роботи з виразами включите опцію «Символи узагальнення».

У рядку пошуку виразом є все те, що укладено в круглі дужки, які в цьому випадку виступають в ролі спеціальних знаків. Вираз може складатися як з конкретних символів, так і містити символи узагальнення або спеціальні символи. Порядок проходження виразів визначає їх нумерацію.

У рядку заміни вираження представляються у вигляді: \ n, де n - номер вираження в рядку пошуку.

Будемо редагувати пропозицію: Настя їсть яблука.

Документ без назви

Документ без назви

Рядок пошуку

рядок заміни

Результат пошуку і заміни

([!^0013]^0013)([!^0013])

Вставка порожнього рядка між тими абзацами, між якими її не було.

Видалення порожніх рядків

Заміна двох або більше пробілів на табуляцію

^0032([.,:;\!\?])

Видалення пробілу перед знаком пунктуації (.,:;!?)

()^0032()

Заміна пробілу між цифрами на неразбіваемий пробіл

()^0032()

Заміна пробілу між цифрою і буквою (англійської або російської) на неразбіваемий пробіл

Заміна дефіса перед цифрою на мінус

Заміна круглих дужок навколо цифри на квадратні

1. Заміна в документі прізвища Іванов на прізвище Петров відразу у всіх відмінках:

Документ без назви

Звичайно, така заміна можлива тільки з прізвищами, у яких однакові відмінкові закінчення.

2. Потрібно зробити таку заміну, щоб зробити написання всіх дробів однаковим, коли частина дробів набрана через точку, частина - через кому.

Ось два варіанти цієї заміни:

Документ без назви

3. Обробка тексту словника комп'ютерних термінів.

Ось як це вирішується за хвилину:

Спочатку весь текст форматується так: Формат-> Абзац-> Лівий відступ 0.25 см. Для рядки заміни за допомогою кнопки «Формат» необхідно попередньо встановити: «Шрифт» накреслення Жирний, «Абзац» Лівий відступ 0 см, «Абзац» Інтервал перед 2 пунктів.

Потім проводиться установка в рядках пошуку і заміни:

Документ без назви

Рядок пошуку

рядок заміни

(^[Email protected])^0032-

Після цього слід натиснути на кнопку «Замінити все». В результаті:

    Все перекладні англійські терміни виділяються напівжирним шрифтом. При цьому всі інші англійські слова залишаються в недоторканності.

    Дефіс між англійським терміном і його перекладом замінюється на тире. При цьому всі інші дефіси залишаються в недоторканності.

    Абзаци з англійськими термінами відсуваються вниз від попередніх абзаців з поясненням терміну і висуваються вліво.

Т. е., У всіх, наприклад, 30000 фрагментах тексту, що відповідають вищенаведеним умовам, проводиться 30000 необхідних змін і виходить наступне:

Документ без назви

Alpha(nu) mericdisplay - буквено-цифровий (символьний) дисплей.
Дисплей, призначений для роботи з буквеної, цифровий і супутньої
символьної інформацією.
Alpha(nu) merickeyboard - буквено (алфавітно) -цифрова клавіатура.
Клавіатура для введення кодових уявлень цифр і букв, що має маркування
символьного набору.
Alternatekey - альтернативний ключ.
Ключ пошуку в базі даних, не зазначений в якості первинного ключа.
Alternate Mark Inversion(AMI) -чергується інверсія одиниць .; http://members.xoom.com/sergeymh

6. Воронін А. Проста верстка в Word. Microsoft Word 2002 XP. - М .: «СПАРРК», 2003. - 352 с.

7. Технологія поліграфічного виробництва. Частина 1. Видавничі і складальні процеси. Лабораторні роботи для спеціальності 051900 «Графіка». М .: МГУП, 2002. - 60 с.

Пошук по документу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 слово з помилкою, яке ми внесли випадково, дивіться в статті "

Займався ось нещодавно усілякими сексуальними збоченнями з текстами чергових аффтар від медицини в MS Word. І потрібно мені було шукати і заміняти купу всякої нецензурщини і тарабарщини, бо аффтар, по більшій своїй частині, російській мові зовсім не навчені погано (все на аглицьку кирилицею норовлять писати та інше) і тексти форматувати читабельно не вміють. Замінювати і просто міняти там потрібно було дуже багато чого, а стандартних загальновідомих вбудованих в редактор засобів пошуку стало не вистачати, потрібно було вдаватися до використання. А як? На відомі мені раніше маски чарівна програма Word стала брудно лаятися матом. Як завжди виручив Гугл. Трохи покопавшись я виявив, що геніальні дрібном'який напісателі MS Office і тут пішли своїм шляхом, обізвавши такі вирази wildcards і трохи змінивши їх синтаксис. В цілому розібратися можна.


Виявилося все досить просто (у мене Office 2007, але, думаю, буде справедливо і для попередніх версій, хіба що будуть незначні відмінності в назвах пунктів, але ви розберетеся, я вірю;)). І не потрібно було, за великим рахунком, нікуди лізти шукати. Поряд зі відразу видимими, якщо викликати в Word "е вікно« Пошук »(Ctrl + F) або« Пошук і заміна »(Ctrl + H), поставити курсор в поле« Знайти »і натиснути кнопочку« Більше », а після" Спеціальний », спецсимволами, є і ще одна опція, про яку мало ніже.Оказалось все досить просто (у мене Office 2007, але, думаю, буде справедливо і для попередніх версій, хіба що будуть незначні відмінності в назвах пунктів, але ви розберетеся, я вірю;)). І не потрібно було, за великим рахунком, нікуди лізти шукати. Поряд зі відразу видимими, якщо викликати в Word "е вікно« Пошук »(Ctrl + F) або« Пошук і заміна »(Ctrl + H), поставити курсор в поле« Знайти »і натиснути кнопочку« Більше », а після« Спеціальний », спецсимволами, є і ще одна опція, про яку трохи нижче.
Спершу про стандартні масках пошуку:
^? - будь-який знак
^ # - будь-яка цифра
^ $ - будь-яка буква
^ P - Знак абзацу (¶) (якщо вибрано "Символи узагальнення» слід замінити на ^ 13)
^ T - знак табуляції (→) (якщо вибрано "Символи узагальнення» слід замінити на ^ 9)
^ + - довге тире (-)
^ = - коротке тире (-)
^^ - знак кришки (^)
^ L - примусовий розрив рядка (символ ↵ або 0xBF), такий буває якщо натиснути Shift + Enter (якщо вибрано "Символи узагальнення» слід замінити на ^ 11)
^ N - розрив колонки (якщо вибрано "Символи узагальнення» слід замінити на ^ 14)
^ 12 - Розрив розділу або сторінки (при заміні додає розрив сторінки)
^ M - Примусовий розрив сторінки (застосовується також для пошуку і заміни розривів розділів, якщо вибрано "Символи узагальнення»)
^ S - нерозривний пробіл (º) (Ctrl + Shift + Space)
^ ~ - нерозривний дефіс (≈)
^ - - варіант переносу (¬)
Тепер перейдемо до поля «Замінити на», тут з'являються дві специфічні опції:
^ & - шуканий текст
^ C - вміст буфера обміну
Як це можна використовувати? Наприклад так - нехай потрібно знайти текст «Achtung!» і «Achtung.»? пофарбувати його в зелений і замінити на «Achtung, minen! »(Саме червоного кольору). Причому в тексті у вас є і просто слово «achtung» з маленької літери, яке змінювати не потрібно. Рішення:
Написати червоним «minen! »І вирізати в буфер обміну
Знайти (зазначивши галочку «Враховувати регістр»): Achtung
Замінити на (переставити курсор на це поле і натиснути кнопку «Формат», потім вибрати «Шрифт» і там зелений):
Тепер Знайти: Achtung ^?
Замінити на: Achtung, ^ c

З цим все дійсно просто і зрозуміло. А якщо потрібно в величезному списку літератури виду
Reynolds J. V., Murchan P., Leonard N. et al. High-dose interlenkin-2 promotes bacterial translocation from the gut // Brit. J. Cancer.-1995. -Vol. 72, N 3. - P. 634-636.
привести все до нормального вигляду
Reynoldsº J.V., Murchanº P., Leonardº N. etº al. High-dose interlenkin-2 promotes bacterial translocation from the gut // Brit. J. Cancer.º- 1995.º- V.72 (3) .º- P.º 634- 636.
Як бути? Ручками правити в кожному рядку все це буде дуже довго і виснажливо. Але це теж можна зробити пошуком і заміною.
Якщо відзначити у вікні пошуку і заміни галочку «Символи узагальнення», то вміст кнопки «Спеціальний» для поля «Знайти» прийме дещо інший вигляд:
? - будь-який знак
[-] - знак в діапазоні
< — в начале слова
> - в кінці слова
() - діапазон
[!] - НЕ
(;) - число входжень
@ - попередній 1 або більше
* - будь-яке число знаків
А для поля «Замінити на» з'явиться додатковий пункт
\ N - шукане вираз
Як цим користуватися? Просто. Почну майже по порядку.
? і * - по суті одне і те ж, але вираз ?? сабуде для пошуку означати «[пробіл] оса», «коса», «лисиця» і ще купу всього, що містить два символи попереду «са». А вираз * савиділить вам весь текст від положення курсора в тексті до першого-ліпшого «са», в тому числі і «[курсор] По полю бігло тварина з номером 25, це була лисиця».
Близький за змістом до попередніх і символ @. Тут фантазії на приклад у мене не вистачило, запозичую у дрібном'який: [Email protected] допоможе знайти «lot» або «loot», [Email protected] допоможе знайти «ful» або «full» і т.д. :)
Майже з тієї ж опери символи< и > : <ок допоможе знайти всі «близько», а ок>- всілякий «шок».
Вираз допоможе знайти будь-яку букву англійського алфавіту в верхньому регістрі, а - будь-яку букву і російської та англійської. Нерозривно з цим використовується і вираз (;). Виглядає це так: припустимо, потрібно знайти всі слова, що починаються з великої літери і довжиною від 4 до 5 букв і закінчуються знаком. Рішенням буде шукати їх за такою маскою:
{1;1}{3;4} \?
тобто знайти одну велику літеру і ще 3 або 4 наступних за нею малих плюс знак питання. Тут є одна маленька тонкість - так як символ «?» використовується як підстановлювальний, то, щоб пошук його сприйняв за знак питання, а не будь-який символ перед ним потрібно поставити «\». Якщо потрібно знайти сам символ «\» в тексті, то це буде виглядати як \\ , Ну і т.д.
За допомогою [!] Можна знайти наприклад все крім заголовних букв: [! A-Я].
Тепер про сам напевно цікавому операторі пошуку - (). При його допомозі можна знаходити кілька різних виразів і групувати їх за допомогою оператора \ n. Простий приклад: нехай вам потрібно по всьому тексту замінити «Прізвище І О» на «І.О.ºФамілія». Рішення:
знайти: ({1;1}{2;11} ) ({1;1} ) ({1;1} )
Замінити на: \ 2. \ 3. ^ s \ 1
Тобто кожен вираз в дужках у полі «Знайти» відповідає по порядку оператору \ n в поле «Замінити на».
Тепер із заданою вище завданням я думаю ви впораєтеся й самі;)

ОПТИМІЗАЦІЯ КОДА

  • Для визначення кількості символів в частині документа використовуйте властивість StoryLength або функцію Len (), але не команду Characters.Count, яка виконується досить довго, якщо символів багато.
  • У перевірках (If, Select і ін.) Порівнюйте з перевіряється значенням - з тим, що повинно бути.
    • Приклад. При перевірці на True правильно писати:
      If N<>True Then
      Часто помилково пишуть:
      If N = False Then
      Якщо N має тип відмінний від boolean, код може не спрацювати.
  • Оптимізація перебору масиву (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 в початковий стан.
  • Вкрай повільно працює звернення до елементу документа по його індексу. Мова про символи, словах, пропозиціях, абзацах і ін. Чим більше елементів в документі, тим "гальма" більш помітні.
    • Приклад. Замість прямого звернення до знаку:
      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 ...
  • Якщо контроль помилок відключений і відбувається привласнення змінної, то при помилку змінна збереже старе значення. Тому, попередньо, треба скинути значення змінної.
    • Приклад з помилкою:
      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
  • Selection поводиться по-різному в різних режимах перегляду документа.
  • При обробці макросами, намагайтеся використовувати режим перегляду "Звичайний" (wdNormalView). Це підвищує швидкодію. Особливо при роботі з таблицями.
  • При перемиканні режиму перегляду, може зміниться Selection.Range, тому що є режими, де відображаються не всі елементи документа.
    • Приклад. У режимі перегляду "Звичайний" / "Черновик" (wdNormalView) не помітні об'єкти. І якщо, в режимі "Розмітка сторінки" (wdPrintView), вибрати текст всередині написи, то, при зміні режиму на "Звичайний", схлопнется Selection.Range.

ПОШУК (Range.Find)

  • символи узагальнення
    • По одному і тому ж шаблону, з підстановочних знаками, пошук вперед і назад може дати різні результати. Тестируйте пошукові шаблони, що б знати, які підходять для пошуку вперед, а які тому.
    • Пошук з підстановочних знаками "@" і "(1;)"
      • Дає не одне і теж.
        • Приклад. При пошуку вперед в тексті "111 + 222 + 333":
          • за шаблоном " [Email protected]"Буде знайдений один символ" 1 ", а по" 1 (1;) "- ланцюжок символів" 111 "
          • за шаблоном "[! 2] @ +" буде знайдений текст "111+", а за шаблоном "[! 2] (1;) +" нічого не буде знайдено
      • При складному пошуку, особливо в зворотному напрямку, більше підходить "@".
        • Приклад. Пошук назад в тексті "Один Два Три" за шаблоном "<[А-Я]{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"
    • Спецсимвол ^ d (він же ^ 19 - початок поля, є ще ^ 21 - кінець поля) дозволяє шукати як будь-які поля, так і поля певного типу. Більш того, можна знайти, виділити і обробити строго відфільтровані, потрібні поля.
      • Приклад обробки полів типу AUTOTEXT:
        • Включимо режим відображення коду полів (Alt + F9)
        • Відкриємо вікно розширеного пошуку (Ctrl + F, Ctrl + H)
        • В поле "Знайти" водимо текст: ^ d ^ wAUTOTEXT ^ w
        • Активуємо прапор "Виділити всі елементи ..."
        • Виконаємо пошук. В результаті, будуть виділені всі поля типу AUTOTEXT. Причому, виділяються не шукані фрагменти коду полів, а саме поля цілком!
        • Виділену групу полів можна вирізати, скопіювати, видалити, форматувати і ін.
        • Можна переключитися назад - в режим відображення значень полів (Alt + F9). При цьому, поля залишаться виділеними.
    • якщо виставити 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
  • У стилі таблиці програмно (макросом) не можна задати:
    • Вертикальне вирівнювання тексту осередків.
    • Значення полів осередків за замовчуванням (для всієї таблиці) (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 " правильно
  • Команди 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-файл, реєстр або ін.


Сподобалася стаття? поділіться їй