Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Інформатика. Частина 4

.pdf
Скачиваний:
14
Добавлен:
23.02.2016
Размер:
2.75 Mб
Скачать

ЛАБОРАТОРНА РОБОТА № 17

Вивчення основ VBA Word

Мета: ознайомитися з основами програмування в VBA Word

1.Завдання

1.1.Вивчити основи програмування в VBA Word.

1.2.Написати простий макрос із автоматичним введенням рядків.

1.3.Увести зміни до готового макросу.

1.4.Робота зі змінними й операторами.

1.5.Робота з операторами умовного переходу.

1.6.Робота з циклами.

1.7.Робота з процедурами і функціями.

1.8.Оформити звіт.

2.Матеріали та обладнання

Персональний комп’ютер, програмний продукт Microsoft Word, методичні рекомендації до виконання роботи.

3.Вказівки до роботи

Впроцесі виконання роботи рекомендується користуватися довідкою програмного продукту Microsoft Word.

4.Теоретичні відомості

VBA (Visual Basic for Applications) — це діалект мови Visual Basic, який розширює його можливості і призначений для роботи із застосуваннями Microsoft Office й іншими застосуваннями від Microsoft і третіх фірм.

Word — старе і найпопулярніше застосування, що входить до складу

Microsoft Office.

11

У більшості організацій користувачі готують документи саме в 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

12

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

5.Порядок виконання роботи

5.1. Написання макросу

Напишіть за допомогою макрорекордера макрос, який би автоматично створював такі рядки (замість "Петрова М. М." підставте ваші дані).

Створений макрос має бути доступний для всіх створюваних вами документів. Він повинен запускатися після натиснення кнопки зі смайликом, зображеним на малюнку.

Створіть новий документ, запустіть макрос на виконання і переконайтеся, що він працює.

Рис 1. Кнопка для користувача

13

Відкрийте новий документ у Word. У меню Сервіс виберіть Макрос Почати запис. У вікні Запис макросу в полі Ім'я макросу введіть "Підпис" (без лапок), переконайтеся, що в полі Макрос доступний для пошуку значення Всіх документів (Normal.dot), і натисніть кнопку Позначити макрос панелі.

2.У вікні «Налаштування» на вкладці «Команди» перетягніть елемент Normal.NewMacros Підпис у потрібне місце на панелі управління. Потім клацніть по переміщеному елементу правою кнопкою миші, в контекстному меню виберіть пункт Вибрати значок для кнопки, потім виберіть зображення «веселої» кнопки. Ще раз клацніть правою кнопкою миші по цьому елементу і в контекстному меню виберіть «Основний стиль». Натисніть на кнопку «Закрити вікна» «Налаштування». Почнеться запис макросу.

3.Уведіть потрібний текст, а потім натисніть на кнопку Зупинити запис (або в меню Сервіс | Макрос виберіть команду Зупинити запис).

4.Створіть новий документ Word і переконайтеся, що нова кнопка працює і там.

5.2.Введення змін до макросу

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

додайте спочатку коди макросу (над першим рядком selection.TypeText) такі рядки:

Dim slnput As String

slnPut = InputBox("Уведіть прізвище відповідального виконавця"

"Запит даних")

? замінити рядок:

Selection.TypeText Text:=("Відп. виконавець Петрова М. М.") (прізвище має бути ваеа) на рядок:

Selection.TypeText Text:=("Відп. виконавець " & slnPut)

Збережіть змінений макрос, закрийте вікно редактора коду і переконайтеся, що макрос тепер працює по-новому.

Відкрийте Word і натисніть клавіші <Alt>+<Fll>. У вікні Microsoft Visual Basic, що відкрилося, знайдіть вікно Project Explorer,

14

розкрийте в нім вузол Normal | Modules | NewMacros, виділіть NewMacros і натисніть клавішу <F7>. Відкриється вікно з кодом

NewMacros.

Знайдіть вашу процедуру sub підпис () і внесіть необхідні зміни. Загальний текст процедури може бути, наприклад, таким (зверніть увагу: код цілком може не збігатися з вашим текстом — все залежить об того, які дії ви виконували в макрорекордері):

Sub Підпис()

!

'Підпис Макрос

'Макрос записаний 02.05.2004 R

Dim slnPut As String

slnPut = InputBox("Введіть прізвище відповідального

виконавця" _

"Запит даних") Selection.TypeText Text:="Генеральный директор:" & vbTab & vbTab _

& vbTab & "Іванов A. A." Selection.ParagraphFormat.Alignment

=wdAlignParagraphCenter Selection.TypeParagraph Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft

Selection.TypeText Text:=("Отв. виконавець " & slnPut)

Selection.TypeParagraph Selection.TypeText Text:="T. 55-55" End Sub

Натисніть клавіші <Ctrl>+<S>, щоб зберегти зміни, і <Alt>+<Q>, щоб повернутися в Word. Виконайте макрос, щоб переконатися, що він працює відповідно до завдання.

5.3. Робота зі змінними й операторами

Підготовка:

1. Створіть нову книгу Excel і збережіте її як

C:\LabVariablesOperators.xls. Введіть в осередки Al, А2 і A3 цієї книги будь-які значення.

2.Відкрийте редактор Visual Basic в Excel і створіть в цій книзі новий стандартний модуль (див. розд. 2.2).

3.За допомогою меню Tools | References додайте у ваш проект посилання на Бібліотеку Microsoft Word 11.0 Object Library.

4.Введіть в створеному вами стандартному модулі наступний код:

Public Sub FromExcelToWord() MsgBox Range("A1").Text MsgBox Range("A2").Text MsgBox Range("A3").Text

15

Dim oWord As Word.Application Dim oDoc As Word.Document

Set oWord = CreateObject("Word.Application") oWord.Visible = True Set oDoc = oWord.Documents.Add() oDoc.Activate oWord.Selection.TypeText Текст" End Sub, що "вставляється

Цей код повинен виводити у вікна повідомлень значення осередків A1, A2 і A3, а потім відкрити Word і удрукувати на початок нового документа рядок /текст, що "Вставляється".

5. Переконайтеся, що код працює без помилок.

ЗАВДАННЯ:

Змініть код цієї процедури так, щоб замість рядка "Вставлений текст" виводилися значення комірок A1, A2 і A3 разом.

Підсумковий код може виглядати так:

Public Sub FromExcelToWordAnswer()

Dim sA1, sA2, sA3, sText As String sA1 = Range("A1").Text sA2 = Range("A2").Text sA3 = Range("A3").Text

sText = sA1 + " " + sA2 + " " + sA3

Set oWord = CreateObject("Word.Application") oWord.Visible = True Set oDoc = oWord.Documents.Add() oDoc.Activate oWord.Selection.TypeText sText End Sub

5.4. Робота з операторами умовного переходу

Підготовка:

1.Створіть нову книгу Excel і збережіть її як

C:\LabCondConstructions.xls.

2.Відкрийте редактор Visual Basic в Excel і створіть у цій книзі новий стандартний модуль.

3.Уведіть у цей модуль такий код:

Public Sub IfThenSub()

Dim nResult As Integer

nResult = MsgBox("Натисніть кнопку", vbYesNo, "Вікно повідомлення")

ThisWorkbook.Worksheets(l).Range("Al").Value = _ "Ви натиснули кнопку: " & nResult

ThisWorkbook.Worksheets(1).Range("Al").Columns.AutoFit End Sub

4. Запустіть цей код на виконання і переконайтеся, що він виконується без помилок. Цей код повинен вставляти в осередок A1 першого листа вашої книги текстове значення вигляду "Ви

16

натиснули кнопку: 6", залежно від того, яка кнопка була натиснута у вікні повідомлення.

Примітка :

Отримати інформацію про те, які значення при натисненні якої кнопки повертаються з вікна повідомлення, можна за допомогою довідки по функції MsgBox().

ЗАВДАННЯ 3.2, А:

Змініть код цієї процедури так, щоб замість чисел в осередок вписувалося рядкове значення натиснутої кнопки (наприклад, "Ви натиснули кнопку: Так"). Використовуйте при цьому синтаксичну конструкцію

If...Then...Else.

Відповідь до завдання 3.2, А:

Підсумковий код для вашої процедури може бути таким:

Public Sub IfThenSubAnswer() Dim nResult As Integer

nResult = MsgBox("Натисніть кнопку", vbYesNo, "Вікно повідомлення") If nResult = vbYes Then

sResult = "Та" ElseIf nResult = vbNo Then sResult = "Ні" Else

sResult = "Невідома кнопка" End If ThisWorkbook.Worksheets(1).Range("A1").Value = "Ви натиснули кнопку: " _

& sResult ThisWorkbook.Worksheets(1).Range("A1").Columns.AutoFit End Sub

ЗАВДАННЯ 3.2, Б:

Замініть у вашій процедурі рядок:

nResult = MsgBox("Натисніть кнопку", vbYesNo, "Вікно повідомлення")

на:

nResult = MsgBox("Натисніть кнопку", vbAbortRetryIgnore, "Вікно повідомлення")

Змініть вашу процедуру так, щоб вона вставляла в осередок A1 значення "Перервати", "Повторити" або "Пропустити", залежно від того, яка кнопка у вікні повідомлення була натиснута. Використовуйте при цьому синтаксичну конструкцію Select Case.

Відповідь до завдання 3.2, Б:

Підсумковий код для вашої процедури може бути таким:

Private Sub SelectCaseAnswer()

17

nResult = MsgBox("Натисніть кнопку", vbAbortRetryIgnore, "Вікно повідомлення")

Select Case nResult Case vbAbort sResult = "Відмінити" Case vbRetry sResult = "Повторити" Case vbIgnore sResult = "Пропустити" Case Else

sResult = "Невідома кнопка" End Select ThisWorkbook.Worksheets(1).Range("A1").Value = "Ви натиснули кнопку: " _

& sResult ThisWorkbook.Worksheets(1).Range("A1").Columns.AutoFit End Sub

5.5. Робота з циклами

Підготовка:

1.Створіть новий документ Word з ім'ям C:\LabLoops.doc. Уведіть у цей документ кілька пропозицій з текстом.

2.Відкрийте редактор Visual Basic і створіть у цьому документі новий стандартний модуль.

ЗАВДАННЯ 3.3, А:

Створіть у цьому стандартному модулі процедуру ForNextSub(), яка виводила б послідовно 10 вікон повідомлень з цифрами від 1 від 10.

Відповідь до завдання 3.3, А:

Підсумковий код процедури може бути таким:

Public Sub ForNextSub() Dim i As Integer

For i = 1 To 10 MsgBox i Next End Sub

або таким:

Public Sub ForNextSub2() Dim i As Integer i = 1 Do While i <= 10 MsgBox i

i = i + 1 Loop End Sub

ЗАВДАННЯ 3.3, Б:

Створіть у цьому програмному модулі процедуру ForEachSub (), яка виводила б у вікна повідомлень послідовно кожне слово у вашому документі LabLoops.doc.

18

Колекцію (масив) усіх слів документа можна отримати за допомогою конструкції ThisDocument.Words. Значення кожного слова можна набути за допомогою властивості Text елементу цієї колекції.

Відповідь до завдання 3.3, Б:

Підсумковий код процедури ForEachSub () може бути таким:

Public Sub ForEachSub()

For Each oWord In ThisDocument.Words MsgBox oWord.Text Next End Sub

5.6. Робота з процедурами та функціями

ЗАВДАННЯ:

1.Створіть у модулі NewMacros шаблону Normal.dot нову функцію fMuitiply(), яка б:

• приймала як вхідні параметри два числа;

• перемножувала їх і повертала набуте значення.

2.Створіть у модулі NewMacros шаблону Normal.dot нову процедуру AutoNew() з таким кодом:

Public Sub AutoNew() Dim nMult1 As Integer Dim nMult2 As Integer Dim nResult As Integer

nMult1 = CInt(InputBox("Введіть перше число: ")) nMult2 = CInt(InputBox("Введіть друге число: ")) nResult = 10

Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd End Sub

3.Змініть процедуру AutoNew() так, щоб вона передавала значення змінних nMult1 і nMult2 функції fMultiply() і набувала від неї значення для змінної nResult (це значення повинне використовуватися замість конкретного значення 10).

4.Створіть в Word новий документ і переконайтеся, що створена вами процедура і функції працюють правильно.

5.Щоб створена вами процедура AutoNew() не заважала подальшій роботі, закоментуйте весь її код.

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

19

1.Запустіть Word і натисніть клавіші <Alt>+<F11>. У вікні Project Explorer розкрийте вузол Normal | Modules і клацніть двічі лівою кнопкою миші по рядку NewMacros.

2.Уставте в модуль NewMacros такі рядки для функції fMultiply():

Public Function fMultiply(nM1 As Integer, nM2 As Integer) fMultiply = nM1 * nM2 End Function

3.Код для процедури AutoNew() може виглядати так (змінений код виділений напівжирним):

Public Sub AutoNew()

Dim nMult1 As Integer Dim nMult2 As Integer Dim nResult As Integer

nMult1 = CInt(InputBox("Введіть перше число: ")) nMult2 = CInt(InputBox("Введіть друге число: ")) nResult = fMultiply(nMult1, nMult2) Selection.InsertAfter nResult Selection.Collapse wdCollapseEnd End Sub

4.Для того, щоб закоментувати код AutoNew(), виділіть весь код цієї процедури (включаючи Public Sub AutoNew() і End Sub) і натисніть кнопку Comment Block на панелі інструментів Edit.

6. Вимоги до звіту

Оформити звіт в електронному вигляді у pdf - форматі. До звіту внесити назву, мету, завдання, хід роботи, отримані результати, необхідні графічні зображення та висновки.

Звіт подати на електронному носії.

7.Контрольні запитання та завдання

7.1.Як розпочати роботу з редактором Visual Basic?

7.2.Як працювати з довідкою для програмування в Office?

7.3.Як відкрити вікно з кодом макросу?

7.4.Назвіть сім арифметичних операторів у VBA.

7.5.Назвіть вісім операторів порівняння у VBA.

7.6.Назвіть два оператори строково зєднання у VBA.

7.7.Наведіть приклад роботи із змінними у VBA?

7.8.Як визначаються константи у VBA?

7.9.Назвіть два оператори умовного переходу у VBA.

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

20