Vba excel приклади для роботи з словом. VBA у додатку до Excel, Word та Power Point. Лістинг роботи форми

Ціль лабораторної роботи

Лабораторна робота служить для отримання практичних навичок щодо використання можливостей мови Visual Basic for Applications під час створення процедур обробки тексту за допомогою властивостей та методів об'єктів Microsoft Word.

Основні відомості про об'єктиWord, їх властивості та методи

Visual Basic for Applications підтримує набір об'єктів, які відповідають елементам Word. Використовуючи властивості та методи цих об'єктів, можна автоматизувати всі операції в Word. Проте доцільно автоматизувати виконання тих операцій, реалізації яких немає стандартних засобів Word або їх виконання стандартними засобами є трудомісткою або рутинною роботою.

Найбільш важливими є:

Об'єкт Document являє собою новий або створений раніше відкритий документ.

Основними властивостями об'єкту Document є:

Count - кількість відкритих у Наразідокументів;

ActiveDocument - активний документ.

Деякі методи об'єкту Document та колекції Documents :

Open - відкриває файл, що містить існуючий документ і автоматично додає його до колекції;

Add - додає новий порожній документ;

Save - зберігає зміни у існуючому документі без закриття;

Save As (тільки для об'єкта) - зберігає активний новостворений документ у поточній папці;

Item - дозволяє отримати доступ до елемента колекції;

Activate (тільки для об'єкта) – активізує відкритий документ;

PrintOut (тільки для об'єкта) – друк документа;

Close - закриває документ.

Об'єкти Character (Символ). Word (Слово). Sentence (пропозиція), Параграф (Абзац). Section (Розділ документа), що задають структуризацію тексту документа.

Всі ці об'єкти мають властивості:

Count - властивість повертає кількість елементів у колекції;

First - властивість повертає об'єкт, який є першим елементом колекції;

Last - властивість повертає об'єкт, що є останнім

елементом.

Колекції Characters , Words , Sentences мають єдиний метод Item(Index) .

Колекція Paragraphs має всі вищезгадані для цієї групи колекцій властивості та безліч властивостей, значення яких визначають формат абзацу.

Формат абзацу може бути визначений за допомогою методів. Наведемо деякі методи колекції Paragraphs:

Item - визначає елемент колекції;

Add - додавання нового порожнього абзацу(параметр методу вказує точку вставки, задається об'єктом Range);

InsertParagraph , InsertParagraphAfter , InsertParagraphBefore - здійснюють вставку порожнього абзацу замість тексту або після або перед текстом, що задається об'єктом. Selectionабо Range;

Reset - видаляє форматування вручну, застосовуючи до абзацу формат, заданий стилем абзацу;

Indent , Outdent - збільшують, зменшують відступ абзацу від краю листа;

TabHangingIndent ( Count ), TabIndent ( Count ) - збільшують ( Count>0), зменшують ( Count<0) выступ или отступ абзаца от края листа на заданное количество позиций;

Space 1, Space 2, Space 15 - встановлюють міжрядковий інтервал (одинарний, подвійний, полуторний).

Об'єкти Range (діапазон) та Selection (Виділення), що представляють частини документа.

Об'єкт Rangeдозволяє задати довільний діапазон, що є послідовністю індексованих елементів і може бути отриманий через метод Rangeабо властивість Rangeінших об'єктів.

Властивості об'єкта Range є:

Start - Початкова символьна позиція діапазону.

End - кінцева символьна позиція діапазону.

Text - дозволяє отримати або змінити вміст об'єкта.

Об'єкт Selectionзадає виділену в документі область (фрагмент). Виділений у документі фрагмент визначає безперервну область елементів, але не є діапазоном, заданим своїм початком і кінцем. Виділити можна лише один фрагмент, тому один об'єкт Selection може бути активним на даний момент часу. Об'єкт Selectionможе бути отримано за допомогою властивості Selectionабо методу Selectінших об'єктів.

Нижче наведено деякі методи властиві об'єктам Selection і Range :

Move - метод переміщення точки вставки;

MoveStart , MoveEND - методи зміни значення властивостей Start та End;

Collapse - згортає діапазон до початку або кінця.

Next - метод отримання посилання на черговий елемент колекції об'єктів у діапазоні чи виділеному фрагменті;

Delete - видаляє текст, що входить у діапазон.

InsertAfter , InsertBefore вставляє текст до або після тексту, що входить до діапазону. Після вставки тексту діапазон розширюється, включаючи вставлений текст.

Copy - копіює об'єкт у буфер обміну;

Cut - переміщає об'єкт у буфер обміну;

Paste - дозволяє помістити вміст буфера в область, задану об'єктом Range або Selection.

10. Програмуванняу Word

10.1 Навіщо програмувати у Word

Створення програм VBA в Word, типові ситуації

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

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

Автору доводилося створювати додатки зі звітами, розробленими в різних програмних продуктах - Microsoft Access, Crystal Reports, Microsoft Reporting Services і т.п. Якщо ваш додаток генерує звіти до баз даних у Microsoft Word, то, швидше за все, такі звіти будуть не найшвидшими з точки зору їх формування та не найпростішими з точки зору програмування. Зате абсолютно точно вони будуть найдружнішими по відношенню до кінцевого користувача. Чому?

Дуже часто на підприємстві виникає необхідність виправити у формі звіту всього кілька рядків – наприклад, замість "Директора" поставити "В.О. Директора". Якщо звіт створено в Crystal Reports або Microsoft Reporting Services, доведеться терміново звертатися до розробника. А через якийсь час І.О. затвердять на посаді директора, і розробнику доведеться правити звіт знову.

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

Виготовлення звітів у Word є й інші переваги. Як правило, при виготовленні звітів у Word значення бази даних підставляються в шаблон звіту, який зберігається в базі даних або файловій системі (у файлі *.dot). Якщо формат звіту складний, з великою кількістю специфічного оформлення (приклад - оголошення на внесок готівкою), то набагато простіше підготувати його шаблон Word, ніж, наприклад, Crystal Reports або Reporting Services.

Ще одне програмне застосування Word – робота з різними форматами документів. Word вміє працювати з документами різних форматів. Ці можливості цілком можна застосувати для масової обробки документів.

Випадок із практики: у каталозі на диску у нас зібралося кілька сотень "різнокаліберних" документів різних користувачів. Частина з них створена в Word різних версій, частина - просто текстові файли, деякі документи у форматах HTML, XML або EML (повідомлення електронної пошти). На підприємстві впроваджено систему документообігу на основі SharePoint Portal Server і нам необхідно привести всі ці документи до єдиного формату (Word 2003) та завантажити їх на SharePoint Portal Server. Звичайно ж, без автоматизації в такій ситуації поратися доведеться дуже довго.

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

Модуль пошуку не встановлено.

VBA Word, як це робиться

(Закінчення. Початок у №7)

Події

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

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

Можна по-різному запрограмувати реакцію на клацання мишею по полю Форми і за Командною кнопкою у цій формі, процедури обробки, начебто, однієї події будуть різними, т.к. належатимуть різним об'єктам. Також існує черговість виникнення подій, яку треба враховувати під час їх програмування. Наприклад, події Клацніть миші (Click), передують подію Натискання клавіші миші (MouseDown) та подія Відпускання клавіші миші (MouseUp). Але треба зауважити, що зовсім не обов'язково враховувати всі події під час написання вашої програми, потрібно лише вибрати ті, які вам дійсно необхідні для роботи. Обійтися без програмування обробки подій можна, але тільки-но ви задумаєте писати програму, де присутні форми користувача, ви відразу зіткнетеся з необхідністю програмування процедур обробки подій.

Класи об'єктів

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

Об'єкт, що створюється на основі класу, називають екземпляром класу.

Модель об'єктів програми

Перш ніж розпочати створення програм автоматизації роботи з додатком, необхідно ознайомитися з моделлю об'єктів (ієрархією класів) програми. Ієрархія класів визначає зв'язок між об'єктами та містить відомості про доступ до інших об'єктів. Для цього в VBA використовується вікно перегляду об'єктів.

Вікно перегляду об'єктів виводиться так:

1. Активуйте вікно Редактор Visual Basic.

2. Виберіть команду Вигляд\Перегляд об'єктів (або натисніть клавішу F2).

На екрані з'явиться вікно Перегляд об'єктів (мал. 1).

3. Виберіть потрібну бібліотеку зі списку бібліотек у лівому верхньому кутку.

У вікні Класи з'явиться список усіх класів у вибраній бібліотеці.

4. Виділіть у списку Класи потрібний клас.

У правій частині вікна відтворення з'явиться список компонент обраного класу, тобто. його властивості, константи та методи.

5. Виділіть у списку компонент потрібний рядок.

У вікні довідки внизу з'явиться додаткова інформація.

Якщо потрібна розгорнута інформація про компонент класу, клацніть на піктограмі запитувальний знак на панелі інструментів.

ПРОГРАМУВАННЯ У WORD.
Модель об'єктів Word

У програмі Word ми маємо працювати з його об'єктами. Тож розглянемо їх докладніше.

На рис. 2 наведено повну модель об'єктів Word. Головним об'єктом, що стоїть на вершині ієрархічної піраміди об'єктів, є сам Word, що розглядається як додаток (Application), на наступному рівні представлені набори об'єктів (Documents, Dialogs, Windows та ін) та одиночні об'єкти (н-р, Selection). Кожен також містить велику кількість об'єктів, властивостей і методів. Наприклад, об'єкт Documents включає об'єкти, які пов'язані з ним, такі, як Words (слова), Paragraphs (абзаци), Bookmarks (закладки), Characters (символи), Document (документ) і т.д. Ці об'єкти у свою чергу містять у собі ще об'єкти, властивості та методи. Ті об'єкти, які включають схожі об'єкти, називають наборами або колекціями (Collection), вони відрізняються ім'ям, записаним у множині (наприклад, Documents, Windows, Words). За допомогою властивостей та методів, властивих об'єкту Колекція, можна виділити з нього один конкретний об'єкт для обробки. Різні колекції можуть включати однакові об'єкти, наприклад, об'єкт Words (Слова) належить колекції Documents (Документи), пов'язаний з об'єктом Selection (Вибір) і з об'єктом Range (Діапазон). Об'єкт Words сам, своєю чергою, є колекцією об'єктів. Те, що об'єкт належить до якоїсь колекції, не означає, що він розглядається як частина чогось спільного.

Щоб бачити всю модель об'єктів Word, скористайтеся вікном Перегляд об'єктів у редакторі Visual Basic.

У вікні редактора Visual Basic натисніть кнопку Перегляд об'єктів, у спливаючому меню списку Вибір бібліотеки виберіть Word. У правій частині вікна під заголовком Класи будуть перераховані всі набори об'єктів Word, а зліва - всі властивості та методи вибраного об'єкта.

Перейдемо до опису основних об'єктів та колекцій об'єктів Word, їх методів та властивостей, а також прикладів їх використання.

Об'єкт Application

Як було сказано вище, цей об'єкт представляє програму Word. Об'єкт Application включає властивості та методи, які повертають об'єкти верхнього рівня.

Наприклад, властивість ActiveDocument повертає об'єкт Document, а властивість під назвою Application використовується для повернення об'єкта Application. Наступний приклад показує ім'я користувача Word. Це ім'я записується в меню Сервіс/Параметри у вкладці Користувач. Інструкція MsgBox є функцією VBA, що виводить на екран діалогове вікно із повідомленням MsgBox Application.UserName (рис. 3).

Багато властивостей і методів, які повертають найбільш загальні об'єкти інтерфейсу користувача - такі, як активний документ (властивість ActiveDocument) - можуть використовуватися без специфікатора об'єкта Application.

Наприклад, замість запису Application.ActiveDocument.PrintOut можна записувати просто ActiveDocument.PrintOut. Властивості та методи, які можуть використовуватися без специфікатора об'єкта Application, розглядаються як глобальні. Щоб побачити глобальні властивості та методи у вікні Перегляд Об'єктів, клацніть по рядку<глобальные>у списку в блоці Класи.

Об'єкт Application має більше 80 властивостей, що відображають усі параметри програми. Перелічимо деякі з них (табл. 1).


Як змінити властивості об'єкта Application у програмі під час виконання будь-яких дій? Існує кілька спеціальних процедур, за допомогою яких це можна зробити. Ці процедури мають спеціальні імена та виконуються автоматично, під час деяких операцій (табл. 3).


Вставляючи рядки з інструкціями VBA в ці макроси, можна впливати на об'єкти, наприклад, при створенні нового документа прибрати з екрана смуги прокручування та рядок стану, записавши наступний макрос у модуль Normal:

Public Sub AutoNew()

Application.DisplayScrollBars = False

Application.DisplayStatusBar = False

Загалом зберігати ці макрокоманди можна в будь-якому шаблоні або документі. Виняток становить макрос AutoExec, який працює тільки із шаблону Normal.dot збереженим у папці, вказаній як папка запуску.

Подібні дії можна зробити за допомогою процедур обробки подій об'єкта Application.

Подій об'єкта Application небагато (табл. 4).

Щоб запрограмувати відгук на події об'єкта Application, необхідно виконати ряд дій:

1. Оголосити об'єктну змінну у модулі класу.

2. Записати процедури опрацювання події.

3. Ініціалізувати оголошений об'єкт із іншого модуля.

Як оголосити Об'єктну змінну

Для цього необхідно створити новий модуль класу та оголосити об'єкт типу Application із подіями. Для цього виберіть у меню Вставка рядок Модуль класу, у вікні Програма нового модуля класу введіть наступний код (рис. 4):

Public WithEvents App As Word.Application

Викличте вікно властивості та змініть властивість Name з Клас1 на EventClassModule.

Опис Процедур Події

Після того як новий об'єктбув оголошений з подіями, він з'явиться у вікні Програма в розкривному списку Об'єкти, і можна писати процедури подій для нового об'єкта. (Коли ви вибираєте новий об'єкт у списку Об'єктів, допустимі події для нього перераховані в списку Процедури, що розкривається.) Вибирають подію з розкривного списку Процедури, і порожня процедура додається до модуля класу (рис.5). Можна записати необхідний код для обробки події.

Ініціалізація оголошеного Об'єкту

До того, як процедура буде виконана, необхідно підключити оголошений у модулі класу об'єкт (у нас він називається App) до об'єкта Application. Це робиться наступним кодом із будь-якого модуля.

Dim X As New EventClassModule

Sub Реєстрація()

Set X.App = Word.Application

Тепер залишається лише виконати процедуру Реєстрація. Можна запустити меню або викликати з іншої процедури модуля. Після цього об'єкт App у модулі класу буде вказувати на об'єкт Word Application, і процедури обробки події у модулі класу виконуватимуться у разі виникнення подій.

Колекція об'єктів Documents

Documents - це набір всіх об'єктів Document, які зараз відкриті в Word.

Цьому набору притаманні свої властивості, методи та події.

Властивостей набору Documents небагато (табл. 5).


Можна повернути властивості Documents, щоб повернути набір Documents. Наступний приклад показує назви відкритих документів

For Each aDoc In Documents

aName = aName & aDoc.Name & vbCr "vbCr - це константа, що визначає символ повернення каретки (код 13)

Методів набору Documents трохи більше (табл. 6).


Метод Add використовується для створення нового порожнього документа та додавання його до набору Documents. Наступний приклад створює новий документ, що базується на шаблоні Normal.dot.

Синтаксис методу Add:

вираз.Add(Template, NewTemplate)

вираз - вираз, що повертає об'єкт Documents.

Template – необов'язковий параметр. Містить ім'я шаблону для нового документа. Якщо параметр опущено, використовується Normal.dot.

NewTemplate – необов'язковий параметр. Якщо параметр дорівнює True, документ відкривається як шаблон. За промовчанням значення False.

Метод Item використовується для вибору конкретного елемента набору. Елемент може бути визначений за назвою або за його номером у наборі.

Синтаксис методу:

вираз.Item(Індекс)

Вираз – вираз, який повертає об'єкт Documents.

Індекс – ім'я або індексний номер елемента набору.

Метод Item є за замовчуванням методом для наборів. Тому наступні два рядки коду еквівалентні.

Application.Documents(1)

Application.Documents.Item(1)

Так само еквівалентні наступні рядки:

Application.Documents("Report.doc")

Application.Documents.Item("Report.doc")

Відкривають файли документів за допомогою Open.

Синтаксис методу Open наступний:

вираз.

вираз - це вираз, що повертає об'єкт Documents.

FileName – обов'язковий параметр "ім'я файлу". Цей параметр вказує шлях до документа. Можна записати кілька файлів, відокремлюючи імена файлів пробілами.

ConfirmConversions - необов'язковий параметр, який може приймати значення True, якщо необхідно відобразити діалогове вікно Convert File, якщо файл записаний не у форматі Word.

ReadOnly – необов'язковий параметр. дорівнює True, якщо файл відкривається тільки для читання.

AddToRecentFiles - необов'язковий параметр, якщо дорівнює True, файл додається до списку файлів внизу меню Файл.

PasswordDocument – ​​необов'язковий параметр. Містить пароль для відкриття документа.

PasswordTemplate – необов'язковий параметр. Містить пароль для відкриття шаблону.

Revert – необов'язковий параметр. Якщо FileName містить ім'я файлу вже відкритого документа, то при рівності параметра True документ повторно відкривається без збереження змін. Якщо значення параметра False, активується вже відкритий документ.

WritePasswordDocument – ​​необов'язковий параметр. Містить пароль, що запитується при збереженні змін документа.

WritePasswordTemplate – необов'язковий параметр. Містить пароль для збереження змін шаблону.

Format – необов'язковий параметр. Містить конвертер для перетворення файлу. Може бути записана однією з констант: wdOpenFormatAuto, wdOpenFormatDocument, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, або wdOpenFormatUnicodeText. Значення за промовчанням - wdOpenFormatAuto.

Для визначення зовнішнього формату файлу застосовується властивість OpenFormat об'єкта FileConverter, яка повертає значення, яке записується в цей параметр.

Наступний код відкриває Sales.doc файл. Ім'я файлу вказується у лапках.

Documents.Open FileName:="C:\Мої документи\Sales.doc" " відкривається документ "Sales.doc"

У наступному прикладі документи з набору Documents перебираються, щоб знайти у наборі документ, названий "Report.doc". Якщо цей документ є в колекції Documents, він активізується, якщо ні, документ відкривається.

For Each doc In Documents

If doc.Name = "Report.doc" Then found = True

If found<>True Then

Documents.Open FileName:="C:\Documents\Report.doc"

Documents("Report.doc").Activate

Метод Close використовується для закриття документів та має синтаксис:

вираз.Close(SaveChanges, OriginalFormat, RouteDocument)

вираз - вираз, який повертає об'єкт Document або Documents.

SaveChanges – необов'язковий параметр. Визначає дію за збереження документа. Можливо одна з наступних WdSaveOptions констант:

WdDoNotSaveChanges (не зберігати зміни);

WdPromptToSaveChanges (видавати діалогове вікно із запитом на збереження змін);

WdSaveChanges (зберігати без запитів).

OriginalFormat – необов'язковий параметр. Визначає формат збереження документа. Може бути одна з наступних wdOriginalFormat констант: wdOriginalDocumentFormat, wdPromptUser, wdWordDocument.

RouteDocument – ​​необов'язковий параметр. True, якщо документ надсилається наступному одержувачу.

Наступний рядок коду закриває документ, названий "Report.doc" без збереження зміни. У ній вказується параметр SaveChanges, якому константою надано значення "не зберігати зміни".

Documents("Report.doc").Close SaveChanges: = wdDoNotSaveChanges

Метод Save використовується для збереження одного або всіх документів. Метод має кілька видів запису, залежно від очікуваного результату.

1. Вираз.

Запис у цьому вигляді зберігає вказаний документ чи шаблон. Якщо документ або шаблон не було збережено раніше, діалогове вікно Save As запитує користувача щодо імені файлу.

Тут вираз - вираз, що повертає об'єкт Document або Template.

2. Вираз. Save (NoPrompt, Original Format).

Такий запис зберігає всі документи у наборі Documents. Якщо документ не було збережено раніше, діалогове вікно Save As запитує користувача щодо імені файлу. Також у цьому записі є два необов'язкові параметри.

Параметр NoPrompt. Якщо цей параметр має значення True, Word автоматично зберігає всі документи. Якщо значення параметра False, Word запитує користувача про збереження кожного документа, у якого були зроблені зміни.

Параметр OriginalFormat визначає шлях для збереження документів. Може бути одною з наступних wdOriginalFormat констант: wdOriginalDocumentFormat, wdPromptUser, або wdWordDocument.

3. Вираз. Save (Comment)

Цей запис збереже версію зазначеного документа з коментарями.

Наступний приклад зберігає активний документ.

ActiveDocument.Save

Наступний приклад зберігає кожен документ у наборі Documents без запиту користувача.

Documents.Save NoPrompt:=True, OriginalFormat:=wdOriginalDocumentFormat

Якщо файл Sales.doc відкритий, наступний код зберігає версію файлу з доданими до нього коментарями.

For Each doc in Documents

If Instr(1, doc.Name, "Sales.doc", 1) > 0 Then

doc.Versions.Save Comment:="незначні зміни"

Об'єкт Document

Представляє об'єкт Document – ​​елемент набору Documents. На відміну від набору Documents, об'єкт Document налічує понад сотню властивостей. В основному властивості об'єкта Document використовуються для повернення іншого об'єкта або набору об'єктів, щоб відпрацювати вже з його властивостями та методами. У документі переважно доводиться працювати зі словами, параграфами, символами, закладками, тому розглянемо деякі з властивостей об'єкта Document, що повертають ці об'єкти (табл. 7).


Щоб поставитися до документа з набору вибірково, можна використовувати властивість ActiveDocument об'єкта Application.

Наступний приклад використовує Activate-метод, щоб ініціювати документ, названий "Document 1." Приклад також встановлює горизонтальну орієнтаціюсторінки та друкує документ.

Documents("Document 1").Activate

ActiveDocument.PageSetup.Orientation = wdOrientLandscape

ActiveDocument.PrintOut

Властивість Bookmarks повертає набір Bookmarks, що містить усі закладки в документі.

Цей приклад шукає стартову та кінцеву позиції для першої закладки в активному документі.

With ActiveDocument.Bookmarks(1)

BookStart = .Start

Властивість Characters повертає набір Characters, що містить усі символи у документі.

Наступний приклад показує перший символ у відборі. Якщо відбору немає, то після курсора повертається перший символ.

char = Selection.Characters(1).Text

MsgBox "перший символ - ..." & char

Інший приклад повертає кількість символів у першому реченні (пробіли включаються до підрахунку).

numchars = ActiveDocument.Sentences(1).Characters.Count

Про події та методи об'єкта Document читайте у наступній статті.

Малишев С.А.

Ця книга допоможе освоїти інтегроване середовище розробки VBAі навчитися програмувати в VBA з використанням об'єктів, їх властивостей, методів і подій. Обговорювані прийоми програмування ілюструються прикладами, які можна відразу випробувати практично. Отримані знання ви зможете застосувати як для налаштування та вдосконалення популярний офісних додатків, включаючи програми Office XP, так і для створення власних програм.

Книга розрахована на тих, хто збирається швидко та без зайвих зусильнавчитися програмувати для Windows за допомогою VBA.

Книга:

Робота з текстом у Word VBA

Робота з текстом у Word VBA

Об'єкти Range та Selection є відправними точками для практично будь-яких операцій, які ви зможете виконувати з текстом з допомогою Word VBA. Деякі з цих дій можна застосовувати до документів загалом, але в загальному випадку вам необхідний діапазон або виділення, перш ніж вносити зміни.

У об'єктів Range та Selection досить багато спільного, але є й кілька ключових відмінностей. Обидва об'єкти являють собою безперервні послідовності символів, над якими ви зможете виконувати різні операції. Обидва об'єкти мають багато загальних властивостейта методів. Однак деякі властивості та методи унікальні для виділених областей, інші - для діапазонів. Значні відмінності полягають і в тому, що об'єкт Selection відповідає виділенню в області вікна: тексту, графічному зображеннюабо будь-якому іншому об'єкту, в той час як об'єкти Range існують незалежно від виділеної області та завжди містять текст.

Використовуйте об'єкт Selection у тому випадку, якщо ваша процедура залежить від користувача, наприклад, він повинен вказати текст, з яким будуть проведені певні дії, або в тому випадку, якщо вам необхідно показати користувачеві, який саме текст буде змінено. В інших ситуаціях набагато краще підходять об'єкти Range. Вони забезпечують велику швидкістьвиконання програм і менше відлякують користувача: Word оновлює вміст екрана при кожній зміні вмісту виділеної області, а при зміні діапазону вміст екрана не оновлюється. Крім того, зміни діапазонів не відбиваються на виділених областях, створених користувачем.

Незважаючи на їх відмінності, об'єкти Selection та Range можна створювати один з одного. Ця можливість виявляється надзвичайно важливою, оскільки багато функцій редагування працюють тільки з діапазонами. На противагу цьому, єдиний спосібвідобразити вміст діапазону користувачеві - виділити його. Використовуйте такі прості прийоми.

* Для виділення діапазону використовується його метод Select. Наприклад, для об'єкта RangeR команда має вигляд RangeR. Select.

* Для отримання доступу до діапазону, що представляє той самий вміст, що і виділена область, використовується властивість Range.

Пам'ятайте: якщо метод, що стосується текстових даних, викликається для діапазону, а ви хочете застосувати його до виділеної області, просто включіть у свій код інструкцію Selection . Range. Ім'яМетоду.

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

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

Для додавання до виділеної області слова, яке слідуватиме відразу за нею, використовуйте таку інструкцію:

Selection.Expand(wdWord)

Ви можете використовувати будь-яку з таких констант для розширення об'єкта; wdCharct er, wdWord, wdSent ence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow, wdTable і (тільки для об'єктів Selection) wdLine. За промовчанням використовується константа wdWord.

Тепер нам слід зупинитися на одному делікатному моменті: об'єкти Selection (але не діапазони) також містять метод Expand. Цей метод включає відповідне засіб Word, що дозволяє розширювати виділену область при переміщенні покажчика миші. Щоразу, коли програма викликає метод Extend, виділена область збільшується на блок тексту, який слідує відразу за точкою вставки: поточне слово, пропозиція, абзац, виділений фрагмент або цілий документ. Якщо ви вказали аргумент у вигляді одного символу, наприклад, Selection.Expand ("C"). виділена область буде розширена аж до першого вказаного символу.

Word VBA дозволяє повторно визначати початок і кінець діапазону або виділеної області. Тільки майте на увазі, що методи, в імені яких є слово Move, змінюють розташування діапазону або виділення: вони не переміщують текст, який міститься в зазначеному об'єкті.

Метод Move змінює діапазон або виділену область, починаючи з їхнього стиснення, позначаючи їхнє розташування, а в них вже немає жодного тексту. Розташування збігається із початком вихідного об'єкта. Після цього метод Move переміщає "стислий" об'єкт відповідно до ваших інструкцій. Після закінчення переміщення можна використовувати методи Expand і Mover,nd для наповнення об'єкта текстом.

Наведений нижче приклад переміщує іменований діапазон у документі на два абзаци тому. Ви використовуєте іменовану константу як значення аргументу Uni t (список всіх допустимих іменованих констант наведено в розділі

"Розширення діапазонів та виділених областей" раніше в цьому розділі). Аргумент Count є цілим позитивним числом, якщо ви хочете перемішати об'єкт вперед по документу (тобто до його кінця), або негативне, якщо ви хочете переміщати об'єкт назад по документу. У наведеному нижче прикладі аргументи не укладені в дужки, оскільки повернене методом значення (кількість переміщених елементів) не використовується:

oTheRange .Move Unit: = waParagraph, Count, : = -2

Методи MoveStart. і MoveEnd працюють практично так само, як і метод Move, тільки вони змінюють початкову або кінцеву точку діапазону або виділення відповідно. Наведена нижче інструкція перемішує початок виділеної області на три слова ближче до кінця документа:

Select-on.KoveStart Unit: = wdWord, Count:= 3

Зверніть увагу, що якщо ви переміщаєте початкову точку об'єкта в кінець, Word стисне діапазон або виділену область і перемістить їх відповідно до вказаних інструкцій.

Ще одна пара методів, Start Of або EndOf, перемішує або розширює початок або кінець діапазону або виділення. Метод Start Of переміщує початок об'єкта назад до початку поточного блоку, тоді як метод EndOt перемішує кінець об'єкта вперед до кінця поточного блоку.

Ви можете використовувати аргумент Extend з будь-яким методом контролю над діями Word. Якщо сторона об'єкта, що перемішується, вже знаходиться з того краю, до якого ви намагаєтеся її перемістити, нічию не відбувається. Використовуйте константу wdMove для стискання об'єкта або константу wdExtend для переміщення лише зазначеної сторони. Нижче наведено відповідний приклад:

Selection. Start Of Unit:= wdSentence, Extend:= wdMove

Дуже часто вам необхідно стиснути діапазон або виділену область у точку, яка не містить жодного тексту. З технічної точки зору згорнуті діапазон або виділена область – це такі діапазон або виділена область, початкова та кінцева точки яких збігаються. Стиснення таких об'єктів є важливим у тих ситуаціях, коли вам необхідно вставити поле, таблицю або інший елемент до або після виділення або діапазону, обійшовшись без заміни тексту. (Ви можете вставити звичайний текст, нові абзаци, а також деякі інші елементи в "нестиснені" діапазон або виділену область).

Використовуйте метод Collapse для стиснення діапазону або виділення. Ви можете стиснути об'єкт до початкової або кінцевої точки, використовуючи необов'язковий аргумент Direction. Наведена нижче інструкція стискає виділену область до її початкової точки:

Selection.Collapse

А цей приклад стискає виділену область до її кінцевої точки:

Selection.Collapse(Direction:=wdCollapseEnd)

Якщо ви стиснете діапазон, який закінчується знаком абзацу, до його кінцевої точки (використовуючи константу wdCollapseEnd), Word розмістить стислий діапазон після знаку абзацу (це означає, що стислий діапазон перебуватиме в наступному абзаці). Якщо ж ви хочете розмістити щось перед знаком абзацу вихідного діапазону, ви повинні спочатку перемістити діапазон назад за допомогою методу MoveEnd, використовуючи інструкцію, подібну до цієї:

Діапазон.MoveEnd Unit:= wdCharacter, Count:= -1

Видалити весь текст у діапазоні чи виділеній області зовсім нескладно: просто використовуйте метод Delete відповідного об'єкта. Ви можете використовувати метод Cut, якщо хочете видалити текст і помістити його в буфер обміну. Звичайно, метод Сору копіює текст у буфер обміну, не вплинув на текст у діапазоні або виділеній області.

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

Хоча використання буфера обміну передачі тексту з одного місця до іншого здається цілком звичним, цей метод який завжди виявляється найефективнішим. Набагато зручніше використовувати властивості Textабо FormattedText діапазону або виділення. Залайте ці властивості рівними діапазону або виділення, що містить текст, який ви хочете передати, і все. Об'єкт призначення повинен бути стиснутий до тих пір, поки текст, що передається, не повинен буде замінити існуючий текств об'єкті.

Нижче наведений фрагмент коду передає текст із виділеної області в стислий діапазон, прив'язаний до закладки (операцію передачі виконує четвертий рядок коду). У нове місце розташування потрапляє лише сам текст; будь-яке форматування при цьому втрачається:

With ActiveDocument.Bookmarks("TheBookmark")

ActiveDocument.Range(Start:=.Start, End=.Start)

RangeY.Text = Selection.Text

Для передачі разом із текстом та його форматування просто замініть властивість Text властивістю FormattedText.

Найпростішим для запам'ятовування прийомом додавання тексту є завдання властивості Text діапазону або виділення рівним тексту, який ви вирішили вставити. Це проілюстровано на прикладі, наведеному нижче:

Range2.Text = "Гей, гей! А адже вдома нікого немає!"

Просто запам'ятайте, що використання властивості Text призводить до заміни будь-якого, що існує в об'єкті. Щоб уникнути цього (якщо ви дійсно не хочете замінити існуючий текст), спочатку стисніть об'єкт.

Використовуйте методи Insert Before або Insert After об'єктів Range або Selection для вставлення тексту в певному місці документа, не торкаючись існуючого тексту. Ці методи дозволяють вставити новий текст безпосередньо перед або після вказаного об'єкта відповідно. Word включає вставлений текст у виділену область чи діапазон.

При використанні будь-якого методу єдиним аргументом є текст, який ви хочете вставити. Нижче наведений фрагмент коду вставляє новий абзац, що містить слова Dairy Entry у початок виділеної області (зверніть увагу на використання такої константи VBA, як vbCr, для додавання знаку абзацу). Після цього до кінця додається новий абзац, який починається з поточної дати. Якщо ви виділили цілий абзац до виконання цього коду, абзац містить поточну дату, з'явиться після символу абзацу у виділеній області.

Програмування на VBA у Word

Виведення тексту в документ Word

5.1. Основні об'єкти Word

Об'єкт Word.Application

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

Ключовим у об'єктної моделі Word є об'єкт Application, оскільки він містить решту об'єктів Word. Його елементами на різних рівняхІєрархія складає близько 180 об'єктів. Сам кореневий об'єкт Application має понад сотню елементів: властивостей, методів та подій.

Властивості об'єкта Word.Application

Властивості будь-якого об'єкта поділяються на дві групи: властивості-учасники (об'єкти) та термінальні властивості (звичайні змінні VBA).

Єдину систему організації панелей меню та інструментальних кнопок забезпечує об'єкт CommandBars, довідок – Assistant, пошуку – FileSearch.

Центральними об'єктами Wordє колекції Documents і Templates, які точніше складають їх елементи, сам документ і шаблони.

Розглянемо об'єкти другого плану.

Об'єкт AutoCorrect підтримує роботу з автоматичної корекції текстів, що набираються. Його можливості еквівалентні команді Автозаміна меню Сервіс.

Об'єкт Browser дозволяє переміщати точку вставки, яка вказує на об'єкти в документі.

Колекція об'єктів Dialogs представляє сукупність діалогових вікон, вбудовані в Word. Не можна додавати нові або видаляти елементи цієї колекції програмним шляхом. Але відповідні вікна можна відкрити і показати на екрані дисплея і тим самим організувати користувач користувачем по темі, заданої відповідним вікном.

Три об'єкти, пов'язані з перевіркою граматики та орфографії: Languages, Dictionaries, SpellingSuggestions, - дозволяють встановити потрібна мова, вибрати словник, у тому числі словники користувача, а також працювати зі списком слів, запропонованих для виправлення при виявленні помилки правопису. Команди Правопис та Мова меню Сервіс надають аналогічні, функціональні можливостіпід час роботи з документом вручну.

За допомогою об'єкта Options можна програмним шляхом встановити різні опції програми та документа аналогічно тому, якби ви вибрали команду Параметри в меню Сервіс.

Робота з документами та клас Document

Коли відкривається програма, створюється колекція документів Documents, що містить усі відкриті документи. У початковий момент колекція містить щонайменше один новий або раніше існуючий документ. новий документдодається методом Add, а вже існуючий – методом Open об'єкта Documents. Щоб дістатися до потрібного документа, достатньо вказати його індекс - ім'я файлу, що зберігає документ, або його порядковий номеру колекції. Для тієї ж мети можна використовувати і метод Item, але він зазвичай опускається. Метод Save дозволяє зберегти документ, а метод Close, зберігаючи документ у файлі, закриває його та видаляє з колекції.

Глобальна властивість Dialogs повертає колекцію діалогових вікон. Константа wdDialogFileOpen задає конкретне діалогове вікно – об'єкт класу Dialog.

Класи, що задають структуризацію тексту документа

Текст – основа більшості документів. Його можна структурувати, оперуючи різними одиницями під час вирішення тих чи інших завдань перетворення. Мінімальною одиницеютекст зазвичай символ. Крім цього, існують такі одиниці: слова, речення, абзаци, а також більші освіти: сторінки, параграфи, розділи.

Класи Characters, Words, Statements, Paragraphs, Sections дозволяють працювати з послідовностями (колекціями) символів, слів, речень, абзаців та розділів. Самої великою одиницеюпісля абзацу виступає розділ. Елементом колекцій Characters, Words та Statements є об'єкт класу Range. Об'єкт Range дозволяє працювати з одним елементом, і з довільною послідовністю елементів. Документи, піддокументи, абзаци, розділи – всі вони мають метод або властивість Range, що повертає інтервал, пов'язаний із об'єктом. Тому робота з текстом так чи інакше ведеться через методи та властивості об'єкта Range.

Події об'єкту Document

Об'єкт Document може реагувати на три події, що виникають у результаті дій користувача.

Таблиця 16

Події об'єкту Document Документ та його частини

Розглянемо основні класи, що визначають структуру документа.

1. Subdocuments (Subdocument) – колекція та сам піддокумент. Є деяка розумна межа розміру одного документа. Якщо у документі більше 10–20 сторінок, працювати з ним стає незручно. І тут у ньому виділяють головний документ і піддокументи. Головний документу цьому випадку має колекцію піддокументів, кожен із них є, по суті, документом, з яким можна працювати незалежно.

Метод AddFromRange класу SubDocuments створює піддокумент, виділяючи з головного документа область, задану параметром Range.

2. Tables (Table), TablesOfAuthoritiesCategories (T.O.A.C), TablesOfAuthorities (TableOfAuthorities), TablesOfContents (TablesOfContent), TablesOfFigures (TablesOfFigure). Клас Table визначає «звичайні» таблиці з довільною кількістю рядків та стовпців та довільним заповненням полів. Інші класи задають таблиці спеціального виду.

3. Shapes(Shape), InlineShapes(InlineShape)– ці дві колекції з їхніми елементами дають змогу додавати в документ малюнки, але не лише їх. ActiveX- та OLE-об'єкти також є елементами цих колекцій. Елементи цих двох колекцій відрізняються тим, як вони прив'язані до документа: перші можуть вільно переміщатися, другі жорстко прив'язані до заданої області документа.

4. Lists(List), ListParagraphs(ListParagraph), listTemplates (ListTemplate)- Списки зручно вводити в документ, коли маєш справу з перерахуванням. Списки можна оформляти відповідно до шаблону. Існують дві групи шаблонів: нумеровані списки та списки-бюлетені. Колекція ListTemplates містить шаблони оформлення списків, а клас ListTemplate визначає конкретний шаблон. Шаблон застосовується до списку абзаців та надає йому структуру, задану шаблоном. Колекція Lists містить списки документа (списки абзаців), що оформлені як нумеровані списки або списки-бюлетені. Колекція ListParagraphs надає список абзаців усіх списків документа. Властивістю ListParagraphs, яке повертає об'єкт відповідного класу, має не лише документ, а й об'єкти List та Range. Отже, за наявності списку – об'єкта List можна виділити список абзаців. Найчастіше доводиться виконувати зворотну операцію – застосовувати до списку абзаців один із можливих шаблонів, надавши йому «справжню» структуру списку. Тоді використовують об'єкт ListFormat.

5. Comments(Comment), Bookmarks(Bookmark), FootNotes (FootNote), EndNotes(EndNote), Fields(Field)– ці колекції та його елементи відбивають незалежні, але близькі за духом поняття. Це частини документа, опосередковано пов'язані з ним. При нормальному перегляді документа вони можуть і не видно.

Колекція comments та клас comment задають коментарі. Коментарі, як відомо, вводяться пояснення тих чи інших термінів чи понять документа. Формально вони приписуються до певної області – об'єкту range.

Великий документ, до окремим частинамякого доводиться часто звертатися, варто забезпечити закладками. Колекція bookmarks задає всі закладки цього документа.

Ще один спосіб коментування – виноски. Вони можуть бути двох видів: підсторінкові (внизу сторінки) та кінцеві (наприкінці документа). Перші зібрані в колекцію footnotes, другі – endnotes.

6. Fields (Field) – ця колекція дозволяє працювати з полями документа. Одна з особливостей полів полягає в тому, що їх значення оновлюються автоматично в залежності від зовнішніх умов або контексту, що змінилися.

7. Story Ranges (Range) – ця колекція представляє сукупність частин документа, які називаються фрагментами (Story). Кількість різних фрагментів документа фіксована. Не можна додавати елементи до цієї колекції звичайним способом, використовуючи метод Add. Фрагменти відображаються в колекції, коли створюється відповідна частина документа.

Фрагменти мають тип, що задається константами з переліку wdStoryType. Головний фрагмент – текст документа, тип якого задається константою wdMainTextStory. Коментарі, посилання, колонтитули становлять фрагменти інших типів, т. е. сам фрагмент є об'єктом Range. Тому завдяки фрагментам можна, наприклад, працювати з колекцією коментарів як з єдиною областю.

8. Variables (Variable) – з документом можна пов'язати колекцію змінних типу Variant. Це важлива для програмістів колекція, тому що час життя змінних, що входять до неї, збігається з часом життя документа. Тим самим є можливість зберігати інформацію про роботу тієї чи іншої процедури між сеансами. Наприклад, можна мати лічильники, що підраховують кількість викликів макросу, і залежно від цього по-різному визначати його подальшу роботу.

Об'єкти Range та Selection

Об'єкт Document має метод Range, що повертає об'єкт Range, та метод Select, що створює об'єкт Selection. Метод Range - це функція, що повертає як результат об'єкт Range; метод Select – це процедура без параметрів, що створює об'єкт Selection як побічного ефекту. Об'єкт Range має метод Select, що перетворює область об'єкта Range на виділену. Тим самим метод Select визначає новий об'єкт Selection. Симетрично, об'єкт Selection має властивість Range, що повертає об'єкт Range, що відповідає виділеній області.

Більшість раніше описаних частин документа є частинами (властивостями) об'єктів Range і Selection.

Об'єкт Range нагадує матрьошку: у кожну область вкладена менша область. Ось приклад коректного (хоч і не найефективнішого) завдання об'єкта Range:

ActiveDocument.Range.Sections(1).Range.Paragraphs(l).Range.Sentences(1). Words(1).Characters(1)

Робота з текстом

Об'єкти Range і Selection дозволяють виконувати основні операції над текстом: виділити, додати, замінити, видалити. Наші об'єкти мають великий набір методів, що дозволяють реалізувати ці операції. Усі методи, що розглядаються тут, належать обом об'єктам, якщо не зроблено спеціальне застереження.

Виділення

Виділити деяку частину тексту по суті означає визначити об'єкт Range або Selection. Об'єкти задають деяку область у тексті документа, які властивості Start і End дозволяють встановити початок і кінець цієї області. Змінюючи значення якості, можна задати потрібну областьвиділення.

Move є основним способом переміщення точки вставки. Інші методи цієї групи – тією чи іншою мірою його модифікації. Метод Move(Unit, Count) стискає область у точку, стягуючи її на початок або кінець, а потім переміщує точку вставки. Параметр Unit визначає одиниці переміщення, a Count – кількість цих одиниць (за промовчанням 1). Знак змінної Count задає напрямок стягування та переміщення. Позитивні значення цього параметра задають стягування до кінця та переміщення вперед, негативні – стягування на початок та переміщення назад. Чисте стягування без переміщення точки вставки задається як переміщення однією одиницю. Метод повертає кількість одиниць, яку фактично відбулося переміщення, чи 0, якщо його не здійснено. Параметр Unit приймає значення wdCharacter (за замовчуванням), wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow та wdTable.

Методи переміщення сам текст не впливають – лише змінюють область, задану об'єктами Range та Selection. Тому ці методи можна застосовувати лише до змінних типу Range, але не до фіксованих областей. Наприклад, запис

ActiveDocument.Paragraphs(l).Range.Move

немає ефекту, оскільки область першого абзацу – річ незмінна. Метод Move стягує область в точку, яка і переміщається, тому після його виконання зникає область, залишається тільки точка вставки. Методи MoveStart та MoveEnd переміщують початкову або кінцеву точку області, зазвичай тим самим розширюючи область.

Видалення тексту

Метод Delete дозволяє видалити текст. Викликаний без параметрів, він видаляє об'єкт Range або Selection, що викликає його. Якщо він застосований у формі Delete (Unit, Count), частина тексту видаляється в зазначеній області. Параметр Unit визначає одиниці, але при видаленні можливі лише два значення: wdWord і wdCharacter. Параметр Count задає кількість одиниць, що видаляються. Якщо область стягнута в точку, символи видаляються перед точкою вставки або після неї залежно від знака параметра Count.

Вставка тексту

Група методів Insert об'єктів Range та Selection дозволяє здійснювати вставки в документ. Для вставки тексту використовуються методи InsertBefore(Text) та InsertAfter(Text). Параметр text типу stringзадає текст, що вставляється до або після області, заданої об'єктами range або selection. Після вставки тексту область автоматично розширюється, включаючи текст, що додається.

Властивість Text дозволяє замінювати текст у виділеній області, тому немає потреби викликати метод Insert(Text). Методи InsertBefore та InsertAfter є безпечними, оскільки текст додається, не змінюючи вмісту області. Зовсім інша річ – методи вставки, які далеко не безпечні. При вставці всередину області, наприклад при використанні InsertSymbol або InsertParagraph, замінюється вміст області.

Робота з буфером

Метод Сміття, що не має параметрів, копіює об'єкт (вміст області) у буфер. Метод cut, діючи аналогічно, повинен заодно і видаляти об'єкт. Але сам об'єкт не видаляється - тільки стягується в крапку, тому над ним можливі подальші операції.

Іноді буфер копіюють не текст, а його формат. Цим займається метод CopyFormat, що копіює формат першого символу об'єкта selection. Якщо цей символ є міткою абзацу, копіюється формат абзацу. Метод CopyFormat має лише об'єкт selection.

Метод Paste дозволяє помістити («приклеїти») вміст буфера в область, задану об'єктами Range та Selection. Ця операція небезпечна, тому що відбувається заміна, а не додавання тексту. Тому метод Paste застосовується до об'єктів Range і Selection, попередньо стягнутим у точку вставки. Метод PasteFormat застосовує форматування, що зберігається у буфері, до об'єкта Selection.

Наприклад, створимо макрос, який вставляє список «урок, іспит, склав!», Копіює його і поміщає ще раз на аркуш.

Sub Макрос1()

З Selection.ParagraphFormat

Selection.TypeText Text:="Робота з текстом:"

Selection.TypeParagraph

ListGalleries(wdBulletGallery).ListTemplates(1)._ListLevels(1)

ListGalleries(wdBulletGallery).ListTemplates(1).Name = ""

Selection.Range.ListFormat.ApplyListTemplate

ListTemplate:=ListGalleries(wdBulletGallery).ListTemplates(1), ContinuePreviousList:=False, ApplyTo:= _wdListApplyToWholeList, DefaultListBehavior:=wdWord10ListBehavior

Selection.TypeText Text:="урок"

Selection.TypeParagraph

Selection.TypeText Text:="іспит"

Selection.TypeParagraph

Selection.TypeText Text:="здав"

Selection.TypeParagraph

Selection.Range.ListFormat.RemoveNumbers

NumberType:=wdNumberParagraph

Selection.TypeParagraph

Selection.Font.Bold = wdToggle

Selection.Font.Italic = wdToggle

Selection.TypeText Text:="Робота завершена!"

Selection.WholeStory

Selection.PasteAndFormat (wdPasteDefault)

5.2. Форматування документа

Робота з текстом(продовження)

Найбільш важливою особливістюРобота на VBA в Word є вставляти текст в документ під час роботи з додатками. Для цього є об'єкти Range і Selection, які є головними для практично будь-яких операцій, які можна виконувати за допомогою Word VBA. Деякі з цих дій можна застосовувати до документів загалом, але в загальному випадку вам необхідний діапазон або виділення, перш ніж вносити зміни. Ми, однак, розглянемо дії з документом під час його створення.

Відкритий документ Word вже містить об'єкти Range, які відповідають багатьом його елементам. Кожен абзац, таблиця, комірка таблиці, коментар тощо визначають діапазони. Наприклад, щоб вставити певний текст у вже існуючий документ, необхідно прописати код:

ActiveDocument.Paragraphs(1).Range.Text = "Oxo-xo!!"

Причому цей рядокбуде розташовано наприкінці існуючого параграфа. З іншого боку, використовуючи об'єкт Selection, можна також вставити деякий текст у документ, використовуючи метод Add та присвоєння властивості Text об'єкту Selection:

Selection.Text = "Вивчення роботи з текстом у документі Word є важливою складовою уміння програмувати в VBA, «+TextBox1.Text+», і відповідає запитам всіх програмістів!»

В результаті виконання цього програмного кодуу документі Word буде виведено рядок:

Вивчення роботи з текстом у документі Word є важливою складовою уміння програмувати у VBA, Світлана, та відповідає запитам усіх програмістів!

Тут ім'я Світлана, наприклад, рахується з текстового поля деякої форми, що має лише одне поле введення для імені та кнопку «Виведення тексту» (рис. 64).

Мал. 64.Форма введення даних

Під час роботи з текстом на робочому аркуші Word необхідно знати такі коди:

визначення кольору

Selection.Font.Color =

wdColorRed – червоний

wdColorDarkRed – бордовий

wdColorDarkTeal – бірюзовий

wdColorBlue – синій

wdColorGreen – зелений

wdColorBlack – чорний

wdColorOrange – помаранчевий

визначення жирності

Selection.Font.Bold =

wdToggle – жирність

визначення зображення

Selection.Font.Italic=

wdToggle – курсив

визначення вирівнювання

Selection.ParagraphFormat.Alignment=

wdAlignParagraphRight – вирівнювання з правого краю

wdAlignParagraphCenter – вирівнювання по центру

wdAlignParagraphJustify – вирівнювання по лівому краю

вставка до тексту конкретної пропозиції

Selection.TypeText Text:="Приклад роботи з текстом"

вставка нової порожнього рядка

Selection.TypeParagraph

встановлення розміру букв

Selection.Font.Size = 14

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

Одним із елементів оформлення діалогових вікон є елемент управління Image (малюнок). Його основні властивості:

Autosize – змінює розмір малюнка на формі (автоматично чи ні);

Picture – відображає графічний файл, що виводиться на форму;

pictureSizeMode - встановлює масштабування малюнка (не весь малюнок, вся поверхня об'єкта, повністю всередині об'єкта);

PictureAligment – ​​встановлює розташування малюнка всередині об'єкта (ліворуч, праворуч, згори, знизу);

pictureTilling – покриває об'єкт мозаїкою із малюнка.

Ці властивості або встановлюються у вікні властивостей об'єкта, або прописуються в лістингу.

Приклад 30.Створити програму, яка вироблятиме підрахунок кількості теплоти, що виділяється у провіднику при протіканні в ньому струму. Формула для розрахунку кількості теплоти відома під ім'ям закону Джоуля Ленца:

де Q – кількість теплоти у Джоулях;

U – напруга у вольтах;

t - час у секундах;

S – площа поперечного перерізу провідника у квадратних міліметрах;

l - Довжина провідника в метрах;

р – питомий опір матеріалу провідника Ом? мм 2/м.

Усі вихідні дані вводяться в текстові поляформи. За підсумками обчислення результат у вигляді пояснювальної записки виводиться у документ, а чисельний результат – у спеціальне вікно форми.

Технологія виконання

Створіть форму за наведеним рис. 65.

Мал. 65.Розроблена форма прикладу 30 у робочому стані та виведення результуючих відомостей у документ word

Під час створення форми встановіть необхідні властивості елементів. Встановіть властивість Locked елемента TextBox6 як True, щоб не допустити випадкового введення користувачем тексту в нього.

Опис процедур

Private Sub CommandButton1_Click()

If Documents.Count = 0 Then Documents.Add

Selection.Text = "При проходженні струму напругою в " + TextBox1.Text + "вольт по провіднику довжиною " + TextBox4.Text + " метрів, перетином " + TextBox3.Text + "кв. мм і питомим опором" + TextBox5.Text + " Ом * мм2 / м за " + TextBox2.Text + " секунд виділиться " + TextBox6.Text + « джоулів теплоти»

Selection.Collapse direction:=wdCollapseEnd

Private Sub CommandButton2_Click()

Private Sub TextBox1_Change()

Private Sub TextBox2_Change()

Private Sub TextBox3_Change()

Private Sub TextBox4_Change()

Private Sub TextBox5_Change()

Private Sub scet()

If IsNumeric(TextBox1.Text) = True And

IsNumeric(TextBox2.Text) = True And

IsNumeric(TextBox3.Text) = True And

IsNumeric(TextBox4.Text) = True And

IsNumeric(TextBox5.Text) = True And Not Val(TextBox4.Text)

0 And Not Val(TextBox5.Text) = 0 Then

rez = ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) *

Val(TextBox3.Text)) / (Val(TextBox4.Text) *

Val(TextBox5.Text))

TextBox6.Text = Str$(rez)

CommandButton1.Enabled = True

TextBox6.Text = ""

CommandButton1.Enabled = False

Примітка. При роботі цього додаткувсі значення полів введення мають бути числовими. У VBA є спеціальна функціядля перевірки того, чи є введений рядок записом числа – IsNumeric. Для перевірки відхилення від нуля значень в останніх двох полях введення використовується функція Val, яка переводить рядковий вираз у числове, якщо цей рядковий вираз містить у своєму початку цифри (або все складається з них).

Функція Str робить перетворення, зворотне тому, що робить Val, конвертує числове значеннявирази у рядкове, що дозволяє цьому значенню надалі оброблятися як рядок.

Таким чином, функції Val і Str перетворюють типи даних змінних, що обробляються ними, відповідно, з рядкового в числовий і з числового в рядковий (див. розділ 3).

Створення кнопки або панелі Word

Призначити формі кнопку або пункт меню для безпосереднього виклику програми з Word не можна – це можна зробити лише для модулів. Тому потрібно застосувати наступний спосіб. Створіть макрос (Меню + Insert + Module) у відкритому проекті:

Перейменуйте цей макрос на власний розсуд, наприклад Teplo. І виконайте такі дії.

1. Клацніть правою кнопкою миші будь-де панелі інструментів.

2. У цьому меню виберіть команду Параметри (або Сервіс + Параметри).

3. У діалоговому вікні Параметри клацніть на ярлику вкладки Команди .

4. Перейдіть до Категорії вниз і знайдіть пункт Макроси . Виберіть цей пункт. У списку «Зберегти» виберіть ім'я вашого документа, в якому створено макрос (мал. 66).

Мал. 66.Пошук макросу для створення кнопки

5. У правому вікні знайдіть потрібний макрос (або VBA-програму).

6. Перетягніть назву цього макросу або програми на панель інструментів.

7. Створіть відповідний напис кнопки та, якщо потрібно, малюнок (за допомогою правої кнопки миші).

8. Закрийте діалогове вікно Настройка, щоб завершити роботу.

Після виконання всіх перерахованих пунктів буде створено кнопку запуску програми.

Завдання на закріплення матеріалу

Приклад 31.Створити програму, яка дозволяє заповнювати стандартні заяви студентів навчального закладу, якщо всі необхідні дані заповнюються у відповідних текстових полях форми, а причина пропусків занять вибирається зі списку, що розкривається (рис. 67, 68).

Мал. 67.Розроблена форма прикладу 31 у робочому стані

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

При цьому врахувати наступне: умови поїздки можуть бути: в один бік, туди і назад, можна сісти на чужу машину (дані умови враховуються в списку «умови поїздки», що розкривається, на створюваній формі).

Класному керівнику

групи АС-42

Сидорову О.І.

від студента(ки)

Петренка Олега Івановича

Заява Петренко Олег Іванович18.05.2007

Мал. 68.

Отриманий результат обчислюється за такою формулою:

Результат = відстань* (споживання бензину на 100 км)/100*ціну бензину за літр.

Врахувати, що якщо вибрали умову поїздки "на чужій машині", то ціна бензину дорівнює 0 руб.

Мал. 69.Розроблена форма прикладу 32 у робочому стані

Також врахувати, якщо при обчисленні результат перевищить 400 крб., то видати повідомлення «Може, підемо ринку?».

Під час створення форми дотримуватися рис. 69, при виведенні тексту документ Word – рис. 70.

При поїздці на дачу, що знаходиться на відстані 55 км, за ціни бензину за літр 18,50 руб., Вживання бензину складе 101,75 руб.

Мал. 70.

Приклад 33.Розробити програму, що видає Звіт про доход вкладникана теперішній момент. При цьому врахувати, що в інтерфейсі форми процентна ставка вибирається з списку, що розкривається (передбачити два види відсотків).

Мал. 71.Розроблена форма прикладу 33 у робочому стані

При обчисленні дотримуватися таких формул:

якщо схема обчислення проста, то

Дохід = внесена сума + внесена сума * відсоткову ставку/100*термін/360;

якщо схема обчислення складна, то

Дохід = внесена сума + внесена сума * відсоткову ставку/100 * термін / 360 +0,01 * (внесена сума * процентну ставку / 100 * термін / 360).

Під час створення інтерфейсу форми спиратися на наведений рис. 71, а під час виведення розрахунків у документ Word – рис. 72.

Звіт про доход

На даний момент громадянин Євсєєва Ольга Костянтинівна має на своєму рахунку за простими відсотками при початковій сумі вкладення 1000 руб. за 150 днів при 2% ставці 1008,33 руб.

Мал. 72.Зразковий формат виведення розрахунків у документ word

Результат обчислень з відповідними поясненнями виводиться у документ Word, а полі форми видається числовий результат проведених розрахунків.

Приклад 34.Розробити програму, що дозволяє заповнювати заяву на відновлення студентського квитка при його псуванні (вкрали, втратив, виправ тощо). Причину псування передбачити в списку створюваної форми.

При роботі дотримуватись наведених рис. 73 та 74.

Курсивом виділено вирази, що вставляються програмою після того, як будуть заповнені відповідні текстові поля форми, що розробляється.

Мал. 73.Розроблена форма прикладу 34 у робочому стані

Мал. 74.Зразковий формат виведення заяви у документ word