Команди visual basic в слово. Програмування на VBA Word. Використання VBA під час вирішення завдань у 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 читайте у наступній статті.

Малишев С.А.

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

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

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

Виконаємо такі дії:

1) натиснемо на кнопку Запис макросу, ні кнопку, ні клавіші макросу можна не призначати, поставимо, де буде зберігатися текст макросу: Макрос доступний для поточного документа;

2) перемістимося в кінець документа з поточної позиції (була не в кінці), натиснувши клавіші Ctrl+End;

3) натиснемо клавішу Enterі напишемо слово «Привіт!»;

4) ще раз повторимо операцію пункту 3;

5) виділимо останнє слово, натиснувши Shift+Home і натисніть клавішу Delete;

6) перейдемо на початок першого рядка «Привіт!», натиснемо Shift+End і потім клавішу Delete;

7) на вкладці Розробник спочатку натисніть кнопку Зупинити запис, потім кнопку Visual Basic;

8) у вікні редактора Visual Basic, що відкрилося, зліва на панелі Project зробимо подвійне клацання мишкою на розділі Progect() - Modules - NewMacros і побачимо праворуч вікно з текстом програми на мові VBA, яке показано на малюнку 5.43.

При збереженні документа, в якому присутні програмні модулі, системі Microsoft Office 2007 слід вибрати тип файлу Документ Word з підтримкою макросів, інакше текст програм не буде збережено.

У тексті макросу малюнку 5.43 Selection - одне з основних об'єктів, які містить головний об'єкт Application - додаток Word.

Малюнок 5.43. Текст макросу на мові VBA


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

Спливаючий список властивостей та методів можна отримати також, натиснувши комбінацію клавіш Ctrl+пробіл.


Крім того, при написанні тексту програми для стандартних процедур і функцій з'являються підказки щодо їх синтаксису (див. малюнок 5.45).

МsgВоА(Рrотрt [ШстеЛз VbМsgВохStуlе = vbОКОпlу], [,default] [,xpos] [,ypos])

Аргументи:


повідомлення– рядковий вираз, що відображається як повідомлення у діалоговому вікні. Може містити кілька рядків. Для поділу рядків допускається використання символу повернення каретки (chr(13)), символу перекладу рядка (chr(10)) або комбінації цих клавіш (chr(13) & chr(10));

Заголовок

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

Xpos- числове вираз, що задає відстань по горизонталі між лівою межею діалогового вікна та лівим краєм екрана;

Ypos– числове вираз, що задає відстань по вертикалі між верхньою межею діалогового вікна та верхнім краєм екрана.

Щоб передати цю інформацію (введене значення у поле введення) програмі, надайте повернене функцією InputBox значення рядкової змінної (рис. 75), наприклад:

strA=InputBox("Які місця віддаєте перевагу?","РЖД","У вікна")

Мал. 75.Результат функції InputBox


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

Синтаксис:

MsgBox (повідомлення [, кнопки] [, заголовок] [, файл_довідки, розділ])

Аргументи:

повідомлення– рядковий вираз, що відображається як повідомлення у діалоговому вікні;

кнопки –числове вираз, що представляє суму значень, які вказують число і тип кнопок, тип використовується значка, основну кнопку і модальність вікна повідомлення. Значення за умовчанням дорівнює 0. Усі значення даного аргументу див. 17, 18;

Заголовок– рядковий вираз, що відображається у рядку заголовка діалогового вікна. Якщо цей аргумент опущено, у рядок міститься ім'я програми;

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

розділ –числове вираз, що визначає номер відповідного розділу довідкової системи.


Таблиця 17


Примітка.Перші кнопки активні за промовчанням.


Таблиця 18

Значення аргументу кнопки процедури MsgBox

Якщо у вікні повідомлення всього дві кнопки, для з'ясування, на якій із кнопок було клацання, чудово підходить оператор If...then. Наприклад:

If MsgBox («Починати?», vbYesNo)= vbYes then

Оператори на дію цієї кнопки

Оператори на дію іншої кнопки

Приклад 35 . Створити програму таким чином, щоб під час запуску форми, введення імені в текстове поле та натискання на кнопку «Виведення тексту» з'являлося діалогове вікно, що запитує дозвіл вивести текст (мал. 76).



Мал. 76.Форма прикладу 35 у режимі конструктора


Лістинг роботи форми

Private Sub CommandButton1_Click()

If MsgBox(«Вивести текст?», vbYesNo) = vbYes Then

If Documents.Count = 0 Then Documents.Add Selection.Text = «Вивчення роботи з текстом у документі Wordє важливою складовою вміння програмувати в VBA, „+ TextBox1.Text + “, і відповідає запитам всіх програмістів!“

Selection.Font.Color = wdColorBlue

Selection.Font.Bold = wdToggle

Selection.Font.Italic = wdToggle

В результаті запуску програми (рис. 77) у документі Word з'явиться пропозиція:

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

Мал. 77.Форма прикладу 35 у робочому режимі

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

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

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

1. Створіть форму для реалізації цієї гри.

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

Кнопка Кидання монети

Private Sub CommandButton1_Click()

монета = Int (2 * Rnd)

If OptionButton1.Value = True Then

If монета = 0 Then MsgBox «не щастить. Займися краще вивченням VBA»

If монета = 1 Then MsgBox «щасливчик. Вітаю, ти виграв»

If OptionButton2.Value = True Then


Мал. 78.Розроблена форма прикладу 36 у робочому стані та діалогове вікно, що реагує на результат гри

If монета = 1 Then MsgBox «не щастить. Займися краще вивченням VBA»

If монета = 0 Then MsgBox «везунчик. Вітаю, ти виграв»

Кнопка Вихід із гри

Private Sub CommandButton2_Click()

Dim ima As String

intA = MsgBox(« Натисніть кнопку!», vbYesNoCancel +

vbExclamation + vbDefaultButton3, «VBA для чайників!»)

If MsgBox(«починати?», vbYesNoCancel) = vbYes Then

ima = InputBox("введіть Ваше ім'я", "Приклад вікна введення")

If ima<>"" Then

MsgBox "Привіт," & ima, vbInformation, "Приклад вікна повідомлення"

MsgBox "Невігла, ти забув ввести своє ім'я" & ima, vbExclamation, "ще один приклад вікна повідомлення" End If

If MsgBox(«ти точно подумав?», vbYesNoCancel) = vbNo Then

MsgBox («ха-ха»)

Else: MsgBox «Ну, нарешті!»

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

Передбачити усі необхідні діалогові вікна.

Приклад 38. Змоделювати повну гру в орел і решітки. Гравець вносить у банк певну суму. Під час гри не можна додавати гроші до банку. Гра складається з послідовності кроків, апріорі кінцевих. На черговому етапі гравець загадує або орел, або решку. Комп'ютер "кидає" монету. Якщо "монета падає тією ж стороною", яку задав гравець, то банк збільшується на одиницю, інакше - зменшується на одиницю. Гра закінчується або за бажанням гравця, або коли величина банку стає банкрутом або більше 10 000 руб. (Певна сума). Гравець забирає собі вміст банку. Можна передбачити максимальні та мінімальні суми, які були у банку протягом усієї гри.

Примітка. Можна змоделювати кидання гральної кістки, використовуючи функцію Int(6*Rnd)+1. Правила змінюються: виграв той, хто більше покинув.

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

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

1. Нехай під час запуску програми з'являється перше діалогове вікно (рис. 79). При натисканні на кнопку «Почати гру» з'являються діалогові вікна, які запитують ім'я гравця та підтвердження розпочати гру (див. мал. 80). Після цього з'являється форма введення ставок (рис. 81).

Private Sub CommandButton1_Click()

imya = InputBox(«введіть ваше ім'я», «Реєстрація», «????»)

If MsgBox(«Починати?», vbYesNo, «Ви не передумали?») =

Ця форма здійснює початковий вибір ставки і запускає головну форму прикладу 38.


Мал. 79.Діалогове вікно запуску гри прикладу 38


Мал. 80.Діалогові вікна початку гри


Мал. 81.Діалогове вікно вибору ставки


Кнопка Кидокімітує підкидання монети гравцем, здійснює розрахунок виграшу та програшу гравця, виводячи відповідні значення у текстові вікна з повідомленням рахунку гри (рис. 82).


Мал. 82.Головна форма прикладу 38, що імітує гру в орел і решку


Кнопка Кидок

Private Sub CommandButton1_Click()

TextBox1.Value = TextBox1.Value + 1

If b = Fix(Rnd * 2 + 1) Then

TextBox4.Value = TextBox4.Value + 1

TextBox5.Value = TextBox5.Value + 1

TextBox4.Value = TextBox4.Value – 1

TextBox6.Value = TextBox6.Value + 1

If TextBox4.Value< 1 Then

MsgBox («Ви програли!»)

If Val(TextBox2.Text)< Val(TextBox4.Text) Then

TextBox2.Value = Val(TextBox4.Text)

If Val(TextBox3.Text) > Val(TextBox4.Text) Then

TextBox3.Value = Val(TextBox4.Text)

OptionButton1.Value = False

OptionButton2.Value = False

CommandButton1.Enabled = False

Кнопка Вихідзавершує гру, видає підсумкові повідомлення (див. мал. 83).

Private Sub CommandButton2_Click()

MsgBox («Партій» + TextBox1.Value + (Chr(13)) + «у банку „+ TextBox4.Value + (Chr(13)) + „ваш максимум“ + TextBox2.Value + (Chr(13)) + „ ваш мінімум“ + TextBox3.Value + (Chr(13)) + „рахунок“ + TextBox5.Value +“:» + TextBox6.Value)

Private Sub UserForm Initialize()

Unload UserForm2

OptionButton1.Value = True

TextBox4.Value = a

Label6.Caption = imya

TextBox2.Value = TextBox4.Value

TextBox3.Value = TextBox4.Value

Мал. 83.Підсумкові розрахунки гри прикладу 38


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



Мал. 84.Оголошення глобальних змінних та створення модуля запуску головної форми гри на прикладі 38

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

Створення VBA-програм

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

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

Інтерфейс шаблону та програми

Як інтерфейс спочатку розглянемо найпростішу форму програми, що відповідає умовам завдання і включає відповідні текстові полявведення та робочі кнопки (рис. 85).


Мал. 85.Форма прикладу 39 у робочому стані


Почнемо з опрацювання бланка стандартного документа (друкованої форми). Цю форму можна зробити на базі шаблону з текстовими полями, в які будуть заноситись відомості, що змінюються. Для цього виконайте такі команди: Файл + Створити.У правій частині вікна нового документа виберіть розділ Шаблонита гіперпосилання На моєму комп'ютері(Рис. 86). Після чого з'явиться діалогове вікно Шаблони(Рис. 87), в якому на вкладці Загальнінеобхідно виділити піктограму новий документта поставити перемикач Шаблону рамці Створити.

Увімкніть панель Форми(Вигляд + Панелі інструментів + ​​Форми). Для подальшої роботизнадобиться лише один елемент цієї панелі – Текстове поле

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



Мал. 87.Діалогове вікно Шаблони


Створіть шаблон документа, дотримуючись рис. 88.


Мал. 88.Шаблон документа Word, до якого вносяться дані для друку


У деяких полях (поля виділені сірий фон) можна ввести значення за промовчанням. Значення за промовчанням встановлюється за допомогою діалогового вікна Властивості, яке можна вивести на екран таким чином:

клацнути правою кнопкою миші по потрібному текстовому полю;

у контекстному меню вибрати Властивості ;

вказати значення за замовчуванням (рис. 89).

Значення за замовчуванням дають змогу змінювати лише ті дані, які мають змінюватися нечасто. Наприклад, оплата за навчання в основному одна і та ж - 1500 руб., Тому значення цього поля буде змінюватися не дуже часто.



Мал. 89.Встановлення параметрів текстового поля "сума_опл"


Розглянемо інші необхідні елементи робочого вікна «Параметри текстового поля». В полі Типвказується тип значення, яке можна розміщувати у полі. Можна заповнити поле Максимальна довжина хоча найбільш важливим для подальшого використання кодом VBA є поле Закладка. Значення цього поля буде міткою, в яку повинен встановлюватись курсор, перед поміщенням у документ чергової порції інформації. Тому, як тільки всі необхідні поля визначені, потрібно вказати кожному з них осмислені мітки. Для бланка документа Word наведеного на рис. 86, поставимо (послідовно) такі мітки:

Прізвище – прізвище студента;

Ім'я – ім'я студента;

По-батькові – по-батькові студента;

Група - найменування групи;

Місяць_опл - назва місяця, за який вноситься оплата;

Сума_опл – внесена сума;

ПІБ_бух - прізвище бухгалтера, що прийняв;

Дата_опл – дата оплати.

Після закінчення розробки форми документа збережемо його під назвою Оплата за навчанняв каталозі Шаблони. На рис. 88 представлений шаблон створеного документа з полями, що змінюються.

Створення модуля Друк для шаблону документа

У лістингу представлений код процедури друку бланка квитанції про оплату, супутні та налагоджувальні процедури.


Лістинг(занести до Модуль1 проекту Оплата за навчання)

" змінні форми програми

Public фам1 As String

Public ім'я1 As String

Public по батькові1 As String

Public груп1 As String

Public місяць As String

Public сума As String

Public бух As String

Public дата As String

" змінні форми шаблону документа

Public прізвище As String

Public ім'я As String

Public по батькові As String

Public група As String

Public місяць_опл As String

Public сума_опл As String

Public фіо_бух As String

Public дата_опл As String

Dim book(8) As String

Dim dataMas(8) As String

Dim i As Integer

Sub Друк() "процедура друку бланка

"Заносимо інформацію до масивів bookmarmas, datamas

book(1) = «прізвище»: dataMas(1) = прізвище

book(2) = "ім'я": dataMas(2) = ім'я

book(3) = по батькові: dataMas(3) = по батькові

book(4) = "група": dataMas(4) = група

book(5) = «місяць_опл»: dataMas(5) = місяць_опл

book(6) = «сума_опл»: dataMas(6) = сума_опл

book(7) = "фіо_бух": dataMas(7) = фіо_бух

book(8) = "дата_опл": dataMas(8) = дата

"заповнення полів квитанції:

ActiveDocument.FormFields(ActiveDocument.Bookmarks(book(i)).Name).Result = dataMas(i)

ActiveDocument.PrintPreview Виконується попередній перегляд друку.

"Для того, щоб реально роздрукувати документ, застосовується метод PrintOut об'єкта Application (див. Help)

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

Тут всі дані мають тип String. Такі однотипні дані дозволяють записувати їх у поля форми в циклі, що містить лише два оператори (див. опис лістингу).

Створення модулів роботи кнопок форми програми

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

Private Sub CommandButton1_Click()

прізвище = прізвище1

ім'я = ім'я1

по батькові = по батькові1

група = груп1

місяць_опл = місяць

сума_опл = сума

фіо_бух = бух

дата_опл = дата

Call Друк

Процедури надання змінним форми додатка введених значень у текстові поля форми.

Private Sub textBox1_change()

фам1 = TextBox1.Value

Private Sub textBox2_change()

ім'я1 = TextBox2.Value

Private Sub textBox3_change()

по батькові1 = TextBox3.Value

Private Sub textBox4_change()

груп1 = TextBox4.Value

Private Sub textBox5_change()

місяць = TextBox5.Value

Private Sub textBox6_change()

сума = TextBox6.Value

Private Sub textBox7_change()

бух = TextBox7.Value

Private Sub textBox8_change()

дата = TextBox8.Value

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

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

Приклад 40. Розробити форму бланка поштового переказу для полегшення праці працівників, пов'язаних із частим оформленням грошових переказів.

Готовий шаблон документа та форма даються на рис. 90 та 91.


Мал. 90.Приклад спрощеного бланка поштового перекладу з текстовими полями, що змінюються (шаблон документа)



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

Найбільш важливою особливістюРобота на 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, Світлана, та відповідає запитам усіх програмістів!”.

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

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
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub TextBox1_Change()
scet
End Sub

Private Sub TextBox2_Change()
scet
End Sub

Private Sub TextBox3_Change()
scet
End Sub

Private Sub TextBox4_Change()
scet
End Sub

Private Sub TextBox5_Change()
scet
End Sub

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
Else
TextBox6.Text = ""
CommandButton1.Enabled = False
End If
End Sub

Під час роботи з текстом на робочому аркуші 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- Покриває об'єкт мозаїкою з малюнка.

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

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

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

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

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

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

Subcounter()

userForm1.Show

EndSub

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

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

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

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

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

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

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

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

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

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


Лабораторна робота №5


Подібна інформація.