Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DIC_VBA.doc
Скачиваний:
2
Добавлен:
11.08.2019
Размер:
685.06 Кб
Скачать

Робота з об’ектом Selection

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

Перший об'єкт, який ми розглянемо, — це об'єкт Selection. Зазвичай перед тим, як що-небудь зробити у вікні документу Word, користувач або виділяє потрібний фрагмент тексту, або переставляє покажчик вставки тексту в потрібне місце. Об'єкт Selection представляє саме таку виділену ділянку тексту (а якщо нічого не виділено користувачем, то місце, де знаходиться покажчик вставки). Річ у тому, що об'єкт Selection в документі може бути тільки один. Він створюється автоматично при запуску Word і завжди доступний. Звертатися до нього можна так:

Application.Selection.Text =" текст, що Вставляється "

чи просто:

Selection.Text = "текст, що Вставляється"

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

Робота з об'єктом Range, його властивості і методи

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

Рекомендується завжди використовувати об'єкт Range замість об'єкту Selection. Тим самим ви захистите себе від можливих помилок, пов'язаних з діями користувача (наприклад, якщо користувач в мить, коли програмно вводиться текст, клацне мишею по якому-небудь місцю в документі). Об'єктів Range в кожен момент часу може бути скільки завгодно, а об’єктів Selection — тільки один Об'єкт Range можна створити декількома способами :

  1. перший спосіб — скористатися методом Range() об'єкту Document. В цьому випадку вам потрібно буде передати номери початкового і кінцевого символів діапазону, а також текст документу, в який будуть отсчиты-ваться ці символи. Наприклад, створити діапазон, який включатиме перші 10 символів документу, можна так:

Dim rngDoc As Range

Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)

  1. другий спосіб — скористатися властивістю Range, яка передбачено для великої кількості об'єктів (Bookmark, Selection, Table — Row — Cell, Paragraph і т. п.). В цьому випадку за допомогою цієї властивості ми отримуємо об'єкт Range, що представляє цей об'єкт;

  2. третій спосіб — скористатися великою кількістю допоміжних властивостей (Characters, Words, Sentences і т. п.), які ділять текст на відрізки, — об'єкти Range. Ці властивості повертають колекції об'єктів Range.

  3. четвертий спосіб — перевизначити існуючий об'єкт Range. Звичайно для цієї мети використовується метод SetRange() об'єкту Range;

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

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

Об'єкт Bookmark

Об'єкт Bookmark — це просто закладка. На практиці це найзручніший спосіб навігації за документами, створених за допомогою шаблонів (наприелад, звітів). Принципова відмінність його від об'єктів Selection і Range полягає в тому, що усі виділення і діапазони втрачаються при закритті документу (об'єкти Range взагалі існують тільки під час роботи процедури, що створила їх, а закладки зберігаються разом з документом. Якщо документ створений на основі шаблону, то усі закладки, які були визначені в цьому шаблоні, будуть визначені і в створеному на його основі документі.

Створити закладку (за допомогою меню Вставка | Закладка) набагато простіше, ніж рахувати кількість символів для об'єкту Range від початку документу, абзацу або пропозиції або виконувати операції Move() (MoveDown(), MoveRight(), MoveNext()) для об'єкту Selection. Крім того, якщо ви виправлятимете шаблон (а робити це доводиться дуже часто), вам, швидше за все, не доведеться правити код для визначення місця вставки (що знадобиться для об'єктів Selection і Range).

Функціональність об'єкту Bookmark невелика. Властивостей і методів у цього об'єкту набагато менше, ніж у об'єктів Selection і Range. Проте зазвичай ніхто і не намагається використовувати об'єкт Bookmark для роботи з текстом. З об'єкту Bookmark (усі закладки зібрані в колекцію Bookmarks, документу) дуже просто отримати об'єкт Selection (за допомогою ме-тода Select()) або об'єкт Range (за допомогою властивості Range), і далі мож-но користуватися вже властивостями і методами цих об'єктів, наприклад:

ThisDocument.Bookmarks("Bookmark1").Select

MsgBox Selection.Text

Створювати об'єкти Bookmark програмним способом необов'язково, але якщо є необхідність, то можна використовувати метод Add() колекції Bookmarks :

ThisDocument.Bookmarks.Add Name :="temp", Range:=Selection.Range

У цього методу усього лише два параметри, які і використовуються в прикладі.

Деякі важливі властивості об'єкту Bookmark представлені далі.

  1. 􀂈Empty — якщо ця властивість повертає True, то закладка вказує на вказівник вставки, а не на текст;

  2. 􀂈Name — ім'я закладки. Дуже зручно, що знайти потрібну закладку в колекції Bookmarks можна не лише за допомогою індексу (номеру) закладки, але і по її імені.

Методів у об'єкту Bookmark всього три.

  1. 􀂈Copy() — створює закладку на основі існуючої.

  2. 􀂈Delete() — видаляє закладку.

  3. 􀂈Select() — виділяє те, на що посилається закладка.

Завдання для самостійної роботи 10: Програмне формування документу в Word

Ситуація:

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

Мал. 10.2. Так повинен виглядати створений програмно договір

ЗАВДАННЯ:

  1. 1. Створіть в шаблоні Normal.dot призначену для користувача форму з ім'ям FormDog і заголовком Ці договори, аналогічну представленій на мал. 10.3.

Мал. 10.3. Форма для занесення даних договору

  1. 2. Створіть макрос, по якому повинна відкриватися ця форма, і призначте цьому макросу кнопку на панелі інструментів Word.

  2. 3. Створіть і збережете шаблон на диску з ім'ям C :.dot, в який підставлятимуться необхідні дані, і додайте в нуж-ные місця закладки.

  3. 4. Створіть для кнопки Сформувати договір на формі програмний код, за допомогою якого на основі шаблону і підставлюваних даних з форми формувався б новий документ з текстом договору.

Відповідь до завдання 10

До пункту 1 завдання (створення призначеної для користувача форми) :

  1. 1. Відкрийте вікно редактора Visual Basic для Word і клацніть правій кноп-кой миші за проектом Normal в Project Explorer, а потім виберіть в кон-текстном меню Insert | UserForm.

  2. 2. У дизайнерові форм сконструюйте форму, аналогічну представленій на мал. 10.3 (про роботу з дизайнером форм розповідалося в гл. 5). Нехай в нашому прикладі елементи управління на формі називаються так:

  1. • txtNumber — текстове поле для введення номера договору;

  2. • txtCity — текстове поле для введення міста;

  1. txtDate — текстове поле для введення дати;

  2. • txtOrg — текстове поле для введення найменування організації;

  3. • txtPerson — текстове поле для введення представника організації;

  4. • txtTitle — текстове поле для введення його посади;

  5. • txtLaw — текстове поле для введення юридичної основи;

  6. • cmdDog — кнопка для формування договору;

  7. • cmdСancel — кнопка Відміна.

  1. 3. Настройте оформлення для елементів управління за вашим смаком. Уста-новите значення для властивості Caption для форми як "Ці договори". Для кнопки cmdDog встановите True для значення властивості Default, а для кнопки cmdCancel встановите True для значення властивості Cancel. Для свой-ства Name самої форми введіть значення FormDog.

До пункту 2 завдання (створення макросу і кнопки для відображення форми) :

  1. 1. У стандартному модулі NewMacros проекту Normal створіть нову про- цедуру з ім'ям FormDog(). Код її може бути таким:

Public Sub FormDogShow()

FormDog.Show

End Sub

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

  1. 2. У Word в меню Сервіс виберіть Налаштування, а потім перейдіть на вкладку Команди. У списку Категорії виберіть Макроси, а потім перетягнете на будь-яку панель інструментів макрос Normal.NewMacros.FormDogShow. Настройте для створеної кнопки

  1. •txtDate — текстове поле для введення дати;

  2. • txtOrg — текстове поле для введення найменування організації;

  3. • txtPerson — текстове поле для введення представника організації;

  4. • txtTitle — текстове поле для введення його посади;

  5. • txtLaw — текстове поле для введення юридичної основи;

  6. • cmdDog — кнопка для формування договору;

  7. • cmdСancel — кнопка Відміна.

  1. 3. Налаштуйте оформлення для елементів управління за вашим смаком. Установіть значення для властивості Caption для форми як "Ці договори". Для кнопки cmdDog встановите True для значення властивості Default, а для кнопки cmdCancel встановите True для значення властивості Cancel. Для властивості Name самої форми введіть значення FormDog.

До пункту 2 завдання (створення макросу і кнопки для відображення форми) :

  1. 1. У стандартному модулі NewMacros проекту Normal створіть нову про- цедуру з ім'ям FormDog(). Код її може бути таким:

Public Sub FormDogShow()

FormDog.Show

End Sub

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

  1. 2. У Word в меню Сервіс виберіть Налаштування, а потім перейдіть на вкладку Команди. У списку Категорії виберіть Макроси, а потім перетягніть на будь-яку панель інструментів макрос Normal.NewMacros.FormDogShow. Налаштуйте для створеної кнопки

  1. bDate — закладка для введення дати;

  2. • bOrg — закладка для введення найменування організації;

  3. • bPerson — закладка для введення представника організації;

  4. • bTitle — закладка для введення його посади;

  5. • bLaw — закладка для введення юридичної основи.

  1. 3. Збережіть цей файл як шаблон Microsoft Word з ім'ям C :.dot.

До пункту 4 завдання (створення програмного коду для кнопок на формі) :

  1. 1. Для події Click кнопки cmdCancel введіть наступний програмний код:

Private Sub cmdCancel_Click()

FormDog.Hide

End Sub

  1. 2. Для події Click кнопки cmdDog можна використовувати наступний програмний код:

Private Sub cmdDog_Click()

Dim oDoc As Document

Set oDoc = Application.Documents.Add("C:\DogovorTemplate.dot")

oDoc.Bookmarks("bNumber").Range.Text = txtNumber.Value

oDoc.Bookmarks("bCity").Range.Text = txtCity.Value

oDoc.Bookmarks("bDate").Range.Text = txtDate.Value

oDoc.Bookmarks("bOrg").Range.Text = txtOrg.Value

oDoc.Bookmarks("bPerson").Range.Text = txtPerson.Value

oDoc.Bookmarks("bTitle").Range.Text = txtTitle.Value

oDoc.Bookmarks("bLaw").Range.Text = txtLaw.Value

FormDog.Hide

oDoc.Activate

End Sub

19

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]