Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Візуал Бейсік 2010 Глінський.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.12 Mб
Скачать

Складніші задачі*

  1. Перевірити, чи задане число (або слово) є паліндромом.

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

  3. Із цифр заданого числа утворити найбільше число.

  4. Визначити числа Армстронга серед першої тисячі чисел.

  5. Визначити п— 5 наборів з трьох чисел — «чисел Піфагора».

  6. Скільки пар чисел-близнят є в першій сотні натуральних чисел.

  7. Для заданого п обчислити 1! + 2! + 3! + ... + n!

  8. Визначити всі цифри у числі 2100.

  9. Скільки різних чисел є в заданому числовому масиві?

  10. Визначити моду в масиві — дане, яке найчастіше повторюється.

  11. Два упорядковані масиви (або файли) «злити» в третій так, щоб він був упорядкованим.

  12. Визначити частоти входження голосних букв у заданий текст.

  13. Є п міст, з’єднаних дорогами. Відстані між містами відомі. Визначити мінімальний шлях між двома заданими містами.

  14. Скільки метрів огорожі треба, щоб загородити сад? Дерева (їх є п) за­дані координатами у площині.

  15. На шахівниці стоять два ферзі. З’ясувати, чи вони б’ють один одного.

  16. Є n підприємств, які заборгували одне одному. Виконати взаємозалік боргів на максимальну суму.

  17. Розробити тренажер зорової пам’яті. Шість двозначних чисел показу­вати по черзі протягом 1 с. Користувач має ввести їх з клавіатури і отримати повідомлення, чи числа збігаються.

  18. Лабіринт змоделювати двовимірним масивом чисел з такими значен­нями: 0 — коридор, 1 — стіна. Чи може турист вийти з лабіринту?

______________

*) потрібні дані знайти у мережі

Розділ 4. Vba у програмах пакету ms office

§ 33. Застосування vba у ms word

У цьому параграфі ознайомимося з поняттям макросу і у про­грамі MS Word різними способами створимо декілька макросів, застосовуючи VBA. Розробимо макрос для перетворення тексту, набраного на клавіатурі в помилково заданій мовній розкладці, у текст потрібного мовою. Розглянемо об’єктну модель докумен­та MS Word і способи керування документом засобами VBA-команд і VBA-процедур. Продемонструємо можливість розв’язуван­ня задач з програмування безпосередньо у документі MS Word.

1. VBA у MS Office. Поняття макросу. Середовище програмуван­ня Visual Basic for Application (VBA) було створене корпорацією Microsoft на базі середовища MS Visual Basic 3.0 для Windows з метою використання у програмах MS Excel, MS Project, MS Word, MS Access, MS PowerPoint, MS Visio тощо. Сьогодні компілятори-аналоги VBA є у складі й інших не менш популярних програм, на­приклад, 1C, OpenOffice.org тощо.

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

Макросу користувач може поставити у відповідність (призначи­ти) деяку комбінацію клавіш на клавіатурі або кнопку на панелі інструментів, чи команду в меню. Щоб виконати створений макрос, достатньо на клавіатурі натиснути відповідну комбінацію клавіш чи кнопку на панелі. Запуститься створений код макросу, який повто­рить записані дії (команди) користувача.

Макрос — це VBA-код, який створюється або автоматично в ре­зультаті записування програмою дій користувача, або «вручну» і який починає виконуватися після настання деякої події: натискан­ня комбінації клавіш на клавіатурі, кнопки на панелі інструментів чи після вибору команди в меню.

Розв’язки деяких задач одержати шляхом автозаписування мак­росу іноді або складно, або неможливо. На допомогу знову прихо­дить VBA, але тепер користувачеві уже потрібно знати правила мо­ви, елементи керування і властивості об’єктів, за допомогою яких

можна створити проект «вручну».

Зауваження. Якщо робота у VBA заблокована з повідомленням «Макроси недоступні», то потрібно понизити рівень захисту ком­п’ютера від макросів.

2. Записування макросів. Розглянемо автоматизований процес створення і використання макросів у MS Word шляхом записування дій користувача у пам’ять документа.

Задача 1. Розробити макрос для автоматизації процесу створен­ня таких математичних формул:

1) s = а1 + а2 + а3 + ... + ап; 2) z = b + b 2 + b 3 + b 4 + b 5.

Розв’язування. Спочатку текст формули наберемо на клавіатурі так: s = а1 + а2 + а3 +...+ an. Виберемо за порядком літери s, п та а і перетворимо їх накреслення на курсив. Отримаємо: s = а1+ а2 + а3 +...+ ап. (Для цього щоразу натискатимемо на клавіатурі комбі­націю клавіш Shift + Ctrl + І, яка є стандартною комбінацією для перетворення звичайного накреслення на курсив).

Для створення індексів і показників степенів призначимо власні

комбінації клавіш.

У виразі а1 виберемо одиницю і виконаємо команди створення макросу: Сервіс => Макрос => Почати запис... Відкриється діалогове вікно «Запис макросу» (рис. 4.1). У ньому потрібно клацнути на зобра­женні клавіатури, якщо хочемо призначити макрос комбінації клавіш.

Рис. 4.1. Записування макросу

В ідкриється вікно «Налаштування клавіатури». У ньому курсор треба встановити у полі «Нове сполучення клавіш» і ввести це спо­лучення «вручну» або, що краще, одночасно натиснути на клавіату­рі потрібне сполучення клавіш, наприклад, Alt + Ctrl + «.». Далі треба натиснути на кнопки «Призначити» і «Закрити». З цього моменту розпочинається записування макросу, про що свідчить панель «Зупинити записування» з двома кнопками: «Зупинити» (ліворуч) і «Пауза» (праворуч).

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

  1. Виконаємо команди з меню Формат => Шрифт...

  2. У діалогову вікні «Шрифт» виберемо видозміну — «підрядковий».

  3. Натиснемо ОК і отримаємо а1.

Зупинимо записування макросу натисканням на кнопку «Зупи­нити» — макрос створено. Як видно на рис. 4.1, макрос у нашому випадку має назву Макрос8.

Аналогічно запишемо наступний макрос для створення надряд­кових текстів і призначимо його іншій комбінації клавіш, напри­клад, Alt + Ctrl + «ю» тощо.

Щоб використати створений макрос, у виразі а2 виберемо число 2 і натиснемо на клавіатурі Alt + Ctrl + «.» — отримаємо а2 та ін.

Зауваження 1. Можна переглянути VBA-код макросу, виконав­ши команди Сервіс => Макрос => Макроси... => Макрос8 => Змінити.

Зауваження 2. Програма MS Word має великий набір «внутріш­ніх макросів», які призначені стандартним комбінаціям клавіш. Користувач може перепризначити стандартні комбінації клавіш. Щоб не втратити корисних стандартних комбінацій клавіш, макро­си треба створювати не для всіх документів (не у шаблоні Nor­mal.dot), а для поточного документа, щоб їх локально використову­вати (див. рис. 4.1).

3. Задача про перекодування тексту. Цю задачу розв’яжемо шля­хом створення макросу вручну, тобто без автозаписування дій ко­ристувача, а безпосередньо використовуючи VBA.

Задача 2. Створити макрос для перетворення тексту, набраного на клавіатурі в помилково заданій мовній розкладці, у текст потріб­ного мовою.

Розв’язування. Нехай користувачеві треба ввести текст українсь­кою мовою, а він не звернув увагу, що ввімкнуто режим вводу анг­лійською мовою. Змоделюємо цю ситуацію: перемкнемо клавіатуру у режим введення тексту англійською мовою, а текст наберемо, не дивлячись на екран, українською мовою. Таке трапляється часто. Щоб не витирати текст і не вводити його заново, створимо макрос з

назвою Convertor, який автоматично перетворюватиме текст до по­трібного вигляду. Алгоритм дій такий.

  1. Спочатку виконаємо команди Сервіс => Макрос => Макроси... В от­риманому діалоговому вікні введемо слово Convertor як назву макро­су і натиснемо кнопку «Створити». Відкриється добре відоме нам вік­но VBA із заготовкою процедури Convertor, що є у модулі NewMacros серед модулів Modules документа Normal (тобто в шаблоні докумен­та, отже, макрос діятиме у всіх документах).

  2. Командами Insert => UserForm вставимо у проект форму UserForml. Підпишемо форму так: «Перетворення тексту». На форму треба вставити дві кнопки «ОК» і «Cancel», а також індикатор ста­ну (елемент керування ProgressBar), як показано на рис. 4.2.

Рис. 4.2. Форма «Перетворення тексту»

Як вставити індикатор стану, адже його немає серед елементів керування у вікні інструментів Toolbox? Для цього виконайте ко­манду Additional Controls... (додаткові елементи) контекстного меню вікна інструментів чи головного меню. У діалоговому вікні, що з’я­виться, виберіть пункт Microsoft ProgressBar Control Version 6, OK. Еле­мент ProgressBar з’явиться у вікні Toolbox. Тепер його можна вставити у форму. Вигляд індикатора стану можна змінювати за допомогою його властивості Scrolling.

  1. Зв’яжемо форму з макросом. Вікно, що на рис. 4.2, має від­криватися відразу після запуску макросу. Для цього в заготовку процедури Convertor вставимо першу команду — UserForml.Show.

  2. Призначимо макрос комбінації клавіш Ctrl + Shift + С. Для цього повернемося у вікно Microsoft Word (командами View => Micro­soft Word) і виконаємо команду головного меню Вигляд => Панелі інст­рументів => Настройка... У вікні «Настройка» на закладці «Команди» клацнемо на кнопку «Клавіатура...». В отриманому вікні «Настрой­ка клавіатури» у списку категорій виберемо «Макроси», а у списку «Макроси» — макрос Convertor. Клацнемо у полі «Нове сполучення клавіш» => натиснемо на клавіатурі комбінацію Ctrl + Shift + С => натиснемо на кнопки «Призначити» і «Закрити».

  3. Переконаємось, що в MS Word вікно «Перетворення тексту» відкривається комбінацією клавіш Ctrl + Shift + С.

  4. Зв’яжемо процес перетворення тексту з подією натисканням на кнопку ОК у цьому вікні. Запрограмуємо кнопку «ОК» (CommandButtonl) так:

Private Sub CommandButton1_Click()

Dim і As Long 'Номер символу

Dim b As String

Dim newword As String 'Перетворений рядок

word = Selection 'Виокремлений текст

For і = 1 To Len(word)

Select Case Mid(word, i, 1)

Case "q": b = "й": GoTo fin

Case "w": b = "ц": GoTo fin

Case "e": b = "y": GoTo fin

Case "r": b = "до": GoTo fin

… і т. д. див. клавіатуру.

Case "m": b = "ь": GoTo fin

Case Else:

'В інших випадках символи не міняємо:

b = Mid(word, і, 1)

End Select

fin:

newword = newword + b

'Пересуваємо смужку індикатора стану:

ProgressBarl.Value = Int(100 * і / Len(word))

Next і

ActiveDocument.Insert newword

End 'Закриваємо форму

End Sub

  1. Змінна word є глобальною. У ній є значення об’єкта Selection, що містить виокремлений текст поточного документа MS Word. Цю змінну треба описати у коді командою Dim word As String у розділі Declarations. Змінна newword є локальною. Вона містить перетворе­ний текст, який вставляється в об’єкт ActiveDocument (поточний до­кумент) методом Insert. Кнопка «Cancel» закриває вікно без перетво­рення тексту командою End.

Застосування макросу. Якщо текст набрано неправильно, його треба вибрати і натиснути комбінацію клавіш Ctrl + Shift + С.

4. Об’єктна модель MS Word. В ієрархії об’єктів програма MS Word є об’єктом найвищого рівня. Назва цього об’єкта — Application. Об’єкт Application складається з великої кількості інших об’єктів. Ві­домості про об’єкти, колекції об’єктів, методи і властивості, необ­хідні для розв’язування різноманітних задач, можна почерпнути з довідкової системи VBA (Microsoft Word Visual Basic Reference, рис. 4.3) на вашому комп’ютері, а також в інтернеті.

Рис. 4.3. Об’єктна модель MS Word

ідкриті документи, з якими працює програма, утворюють ниж­чий рівень, який називають колекцією документів Documents. Окре­мий відкритий документ є об’єктом Documents(<номep у колекції>) або Documents(<назва>), а поточний — ActiveDocument.

Об’єктами третього рівня є розділи, що утворюють колекцію Sections, абзаци (Paragraphs), речення (Sentences), слова (Words), симво­ли (Characters). Нумерація об’єктів у колекціях починається від оди­ниці. Наприклад, Application.ActiveDocument.Sentences(2) — це друге ре­чення у поточному документі; ActiveDocument.Character(10) — десятий символ в активному документі.

До третього рівня належать також об’єкти Bookmark (закладка), Shape (фігура), Frame (рамка), Hyperlink (гіперпосилання), Раде (сто­рінка), Fild (поле), Table (таблиця) і відповідні їм колекції об’єктів, англійські назви яких закінчуються літерою «s».

Колекції володіють методом Count, який дає змогу визначити кіль­кість об’єктів, що належать до них, методами Add (додати), Select (вибрати) та іншими.

Якщо у документі фрагмент тексту вибрати мишею, то отримає­мо об’єкт Selection, повна назва якого ActiveDocument.Selection. Створи­ти такий об’єкт можна програмним шляхом, застосувавши до об’єк­та метод Select. Виокремлений об’єкт стає об’єктом типу Selection, з ним можна виконувати певні дії.

Дії можна виконувати не тільки з одним виокремленим фрагме­нтом, а й з будь-яким, який можна створити як об’єкт класу Range. Наприклад, другий абзац тексту як об’єкт myRangel класу Range можна опрацьовувати після виконання такої команди:

Set myRangel = ActiveDocument.Paragraph(2).Range.

Об’єкт myRange2, що містить перші 20 символів тексту, можна створити так:

Set myRange2 = ActiveDocument.Range (Start := 0, End := 20).

Символи := використовують для ініціалізації значень параметрів Start і End конструктора класу Range. Назви цих параметрів стан­дартні, тому їх можна записувати в довільному порядку.

Абзаци від другого до п’ятого можна розглядати як об’єкт myRange3, якщо спочатку виконати таку команду:

Set myRange3 = ActiveDocument.Range(Start := _

ActiveDocument. Paragraph(2).Range.Start, _

End := ActiveDocument.Paragraph(5). Range.End)

Реалізувати найпростіші дії за допомогою VBA-команд можна у вікні Immediate. Наприклад, виконавши одну за одною команди

MsgBox Application.Name

MsgBox Application.Version

отримаємо два вікна повідомлень з текстами «Microsoft Word» : «11.0» чи з текстом про номер версії MS Word на вашому комп’ютері.

Нехай у MS Word відкрито один документ. Відкрити для читан­ня (чи з іншою метою) другий документ, якщо відома його назва ; шлях до нього, наприклад, «d:\name.doc», можна такою командою:

Documents.Open FileName := "d:\name.doc", Readonly := True

У цьому випадку до колекції відкритих документів застосоване метод Open з двома параметрами, з яких обов’язковий лише пер­ший. Параметрів може бути більше (див. довідку про метод Open). Цей документ отримає номер 2.

Закрити другий документ можна так:

Application. Documents(2).Close.

Дії з документами і їхнім вмістом зазвичай виконують за допо­могою команд мови VBA, оформлених у процедури, що належать модулям документа. Розглянемо приклади таких команд.

До об’єкта Selection і об’єкта myRange1 класу Range можна засто­сувати дії зміни шрифтів чи стилю тексту, наприклад, так:

With myRangel.Font

.Bold = True

.Name = ’Tahoma"

.Size = 20

End With

Замінити виокремлений текст у myRange2 текстом «Привіт, сві­те!» можна за допомогою методу TypeText так:

Option. ReplaceSelection = True

myRange2.Select

Selection.TypeText = "Привіт, світе!"

Selection.TypeParagraph.

Вставити текст «Привіт!»на початку документа можна так:

myRange2.InsertBefore "Привіт!"

Щоб вивести у кінці поточного документа список назв шрифтів, які є на комп’ютері, треба скласти і виконати процедуру з таким тілом:

For Each myfont In FontNames

ActiveDocument.Range.InsertAfter myfont + vbCr

Next myfont

Виконавши команду myRange3.Hyperlinks(1).Follow, активізуємо пер­ше гіперпосилання, яке, як ми сподіваємося, має бути в myRange3.

Задача 3. Ділові документи можуть потребувати захисту від сто­роннього втручання. З метою захисту документа після кожного се­ансу роботи з ним варто виводити в кінці документа статистичні да­ні про документ: хто автор, коли був створений, останній раз реда­гований, скільки в ньому абзаців, символів тощо. Ці дані назива­ють властивостями документа. Треба створити метод, який під час закривання документа дописуватиме в його кінець назви властивос­тей документа та їхні значення.

Розв’язування. Відкрийте свій діловий документ і заповніть за­кладки з властивостями документа деякими даними: назва докумен­та, хто створив, назва компанії, рівень секретності тощо. У MS Word 2003 таких властивостей є 24. Кожна властивість належить до колекції BuiltInDocumentProperties і має свій номер, назву і значення.

Перейдіть у середовище VBA, відкрийте модуль ThisDocument, клацнувши на дереві проекту на значку документа ThisDocument, і введіть такий код:

Sub Document_Close()

Dim n As Long

Dim st1 As String

Dim st2 As String

For і = 1 To 24

st1 = ActiveDocument.BuiltlnDocumentProperties(i).Name

st2 = ActiveDocument.BuiltlnDocumentProperties(i).Value

Debug.Print i, st1, st2 'Контрольне виведення

ActiveDocument.Paragraphs.Add

n = ActiveDocument.Paragraphs.Count

ActiveDocument.Range.Font.Color = wdColorBlue

ActiveDocument.Range.InsertAfter (Str(i)+ "" + st1 +" = " + st2)

Next і

End Sub

Завдання 1. Відлагодьте, виконайте код і ознайомтеся з влас­тивостями вашого ділового документа.

Завдання 2. Задайте колір довідки червоний (wdColorRed) : розмір символів довідки 10 пунктів. Вилучіть з коду команду, які дублює виведення у вікно Immediate. Закрийте свій документ і ще 1 раз його відкрийте, щоб переконатися, що довідку програма виводить у кінці документа.

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

5 . Програмування в MS Word. У MS Word (та інших офісних програмах) можна програмувати без створення макросів. Будь-яку задачу з першого, другого чи третього розділів можна розв’язати без форми безпосередньо на аркуші документа. Для цього в документ потрібно вставити і запрограмувати звичним способом кнопки та інші потрібні за змістом задачі елементи керування, які можна взяти з панелі елементів керування. Цю панель отримують за допомогою додаткової панелі інструментів Visual Basic і кнопки «Панель елементів керування» . Щоб елемент керування вставні ти у документ у точку вставки (де розташований курсор), потрібно клацнути на елементі у панелі елементів.

В иведення результатів зручно виконувати в об’єкт table (таблиця). Для цього спочатку треба вставити ті документ потрібну кількість таблиць з потрібною кількістю клітинок, зокрема, одною, якщо треба вивести лише одне значення. Якщо вставити таблицю з декількома рядками і стовпцями, то отримаємо модель гріду. Таблиці є особливо зручними для розв’язування задач про табулювання функцій, побудову числової по­слідовності, для роботи з одновимірними і двовимірними масивами.

Доступ до першої клітинки першої таблиці дає така команда:

ActiveDocument.Tables(1).Cell(1, 1).Select.

Змінити вміст вибраної клітинки на число 7 можна командою присвоєння Selection.Text = 7.

Задача 4. Додати два двовимірні масиви 3x3 (чи виконати кон­солідацію двох таблиць А і В за операцією сума).

Розв’язування. Вставимо у документ три таблиці 3x3, кнопку «Додати масиви» і тексти, як показано на рисунку:

Розміри таблиць зменшимо «вручну» або надавши їхній власти­вості Автодобір значення Автодобір за вмістом. Спочатку таблиці будуть порожніми. Перші дві таблиці можна заповнити числами «вручну» і (це ще один спосіб введення даних). Ми ж заповнимо їх програм­ним способом випадковими цілими числами з діапазону від 0 до 10. Двічі клацнемо на кнопці і введемо код розв’язування задачі.

Private Sub CommandButton1_Click()

Dim a As Integer

Dim b As Integer

Dim с As Integer

For і = 1 To 3

For j = 1 To 3

ActiveDocument.Tables(1).Cell(i, j).Select 'Вибираємо клітинку в табл. 1

Selection.Text = Round(10 * Rnd(1)) 'Вводимо в неї дане

a = Val(Selection.Text) 'Перетворюємо текст у число

ActiveDocument.Tables(2).Cell(i, j).Select 'Вибираємо клітинку в табл. 2

Selection.Text = Round(10 * Rnd(1))

b = Val(Selection.Text)

с = a + b

ActiveDocument.Tables(3).Cell(i, j).Select 'Вибираємо клітинку в табл.3

Selection.Text = с 'Поміщаємо в неї результат

Next j

Next і

End Sub

Виконаємо код, натиснувши на кнопку Run. Тепер натиснемо на кнопку «Додати масиви» і переконаємося, що задачу розв’язано.

Висновок. Наведений код демонструє принципи прямого програ­мування в документі MS Word.

Вправи

  1. Запрограмуйте кнопку «Cancel» у задачі 2.

  2. Модифікуйте проект розв’язування задачі 2. Забезпечте двостороння заміну фрагментів тексту для двох мов Українська => Англійська : Англійська => Українська так: будь-яку українську букву виокрем­леного фрагмента тексту макрос має замінити відповідною на клавіа­турі англійською і навпаки. Це доцільно, оскільки весь фрагмент тексту користувач може набрати у невідповідній розкладці клавіа­тури: англійській чи українській.

Для цього продовжіть список замін у команді Case процедури СоmmandButton1_Click() так:

Case "й": b = "q": GoTo fin

Case "ц": b = "w": GoTo fin

Case "y": b = "e": GoTo fin

Case "до": b = "r": GoTo fin

  1. Вставте у форму ще одну кнопку «Вставити» й елемент класу «напи­си». Після перетворення тексту змінений фрагмент має з’явитися у вікні «Перетворення тексту» у написі (з метою перевірки правиль­ності перетворення), а після натискання на кнопку «Вставити» він має вставитися в основний текст Microsoft Word.

  2. В умові вправи 3 замініть об’єкт класу Label (напис) на TextBox (поле редагування). Це дасть змогу перед натисканням на кнопку «Встави­ти» внести додаткові зміни у перетворений текст «вручну».

  3. Вставте у форму кнопку «Очистити», яка очистить поле редагуван­ня, що містить змінений текст, тобто замінюватиме перетворений фрагмент тексту порожнім рядком. Це дасть змогу користувачеві ви­рішувати, чи замінювати фрагмент тексту перетвореним, чи просте вилучити його, якщо перетворення невдале.

6*. Вставте у форму кнопку «Повернути назад», за допомогою якої ска­совується перетворення тексту.

7. Створіть макрос, який для виокремленого фрагмента тексту виконує такі дії: задає розмір шрифту — 20 пунктів, накреслення — напів­жирний курсив, видозміна — підкреслений.

8. Опишіть дію команди MsgBox Documents(2).Sentences.Count.

9. Створіть об’єкт myRange4, що складається з перших трьох абзаці; тексту, і змініть три властивості шрифту в myRange4.

10. Дослідіть і застосуйте код для вилучення з документа стилів, ство­рених користувачем, які виявилися зайвими:

For Each styl In ActiveDocument.Styles

If Not styl.Builtln = True Then styl.Delete

Next styl

11. Відкрийте декілька документів і дослідіть, що отримаєте після ви­конання такого коду:

For Each myDoc In Documents

myNames = myNames & myDoc.Name & vbCr

Next myDoc

MsgBox myNames.

12. Розв’яжіть задачу 1 чи іншу з розділу «Задачі» безпосередньо в до­кументі MS Word, застосувавши одноклітинні таблиці для введення і виведення даних, або вставивши відповідні елементи керування у документ.