
- •§ 1. Поняття про інформаційне моделювання
- •Опорний конспект
- •§ 2. Етапи розв’язання задач на комп’ютері
- •§ 3. Середовища розробки проектів
- •§ 4. Властивості елементів керування
- •§ 1. Поняття про інформаційне моделювання 2
- •Контрольна робота № 1
- •§ 5. Створення проектів
- •§ 6. Основні поняття мови програмування
- •9. Процедура кнопки «Обчислити» для задачі про калькулятор.
- •§ 7. Алгоритм та його властивості
- •Запитання
- •§ 8. Різновиди алгоритмів
- •Запитання
- •§ 9. Типи даних
- •§ 10. Лінійні програми
- •Запитання та вправи
- •Контрольна робота № 2
- •§11. Введення даних і виведення результатів
- •§ 12. Текстові файли даних
- •§ 13. Програми з розгалуженням
- •§ 1. Поняття про інформаційне моделювання 2
- •Запитання
- •§ 14. Елементи керування прапорці і перемикачі
- •§ 15. Алгоритмічна конструкція вибір
- •Контрольна робота № 3
- •§ 16*. Списки
- •§ 17. Підпрограми. Функції користувача
- •§ 18. Підпрограми. Процедури користувача
- •§ 19. Цикли. Цикл з параметром
- •§ 20. Задачі пошуку даних. Цикл «доки»
- •§ 21. Застосування циклів
- •Контрольна робота № 4
- •Розділ 2. Складені структури даних
- •§ 22. Одновимірні масиви. Створення масивів
- •§ 23. Пошук даних в одновимірному масиві
- •1. Пошук даних у масиві за заданим критерієм.
- •5. Проект «На метеостанції». Застосування масивів і процедур користувача у vb.
- •§ 24. Впорядкування одновимірного масиву
- •§ 1. Поняття про інформаційне моделювання 2
- •4. Моделювання предметних областей за допомогою масивів.
- •§ 25. Двовимірні масиви. Створення масивів
- •§ 26*. Опрацювання двовимірних масивів
- •1. Елементи керування DataGridView (vb) та DataGrid (vba).
- •Контрольна робота № 5
- •§ 27. Опрацювання текстових даних
- •§ 28. Структури даних (записи)
- •§ 1. Поняття про інформаційне моделювання 2
- •§ 29. Файли даних прямого доступу
- •5. Vb. Команди для роботи з файлами даних прямого доступу.
- •§ 30. Застосування файлів даних послідовного доступу
- •§ 31. Графіка у vb
- •§ 32. Поняття про об’єктно-орієнтоване програмування
- •Розділ 3. Задачі
- •Складніші задачі*
- •Розділ 4. Vba у програмах пакету ms office
- •§ 33. Застосування vba у ms word
- •§ 34. Vba у програмі ms excell
- •§ 35. Задача про облік товарів на складі
- •§ 36. Розв’язування математичних задач
- •§ 37. Робота 3 базами даних
- •Список літератури
- •§ 1. Поняття про інформаційне моделювання 2
§ 34. Vba у програмі ms excell
У цьому параграфі розглянемо об’єктну модель програми MS Ехcell і застосування VBA з метою створення процедур для виконання дій з об’єктами електронної таблиці (ЕТ). За допомогою VBA електронну таблицю можна створити, відкрити, виконати зміни в ній, переслати дані в базу даних MS Access і навпаки. Розглянемо задачу, яка моделює автоматичне заповнення ЕТ даними.
1. Об’єктна модель програми MS Excell. Об’єктом найвищого рівня ієрархії є Application. Він позначає власне програму MS Excell, забезпечуючи доступ до її ресурсів засобами своїх властивостей і методів. Об’єктами нижчого рівня є відкриті робочі книги, що належать колекції WorkBooks. Об’єктами робочої книги є аркуші Worksheets. Головними об’єктами аркуша є діапазони (Range), вибрана область (Selection), стовпці (Columns), рядки (Rows), клітинки (Cells), коментарі (Comments).
Назви колекцій закінчуються літерою «s». Назва без цієї літери позначає об’єкт з цієї колекції.
Об’єкт WorkBook є об’єктом, що належить колекції WorkBooks. Нумерація об’єктів у колекціях MS Excell починається з одиниці. За допомогою методів Open та Close нові робочі книги можна створювати, відкривати чи закривати. Активна книжка є об’єктом ActiveWorkBook. Властивість Author визначає автора книги. Книги складають з аркушів Worksheets або Sheets.
Кожний об’єкт у колекції Worksheets є аркушем робочої книги. За допомогою методів цієї колекції Add, Delete, Activate можна створювати, вилучати чи активізувати аркуші. ActiveSheet є посиланням на активний аркуш.
Об’єкт Range задає діапазон клітинок на аркуші. Це може бути окрема клітинка, рядок, стовпець, прямокутна зв’язана або незв’язана область, області на декількох аркушах.
Об’єкт Range("A1:B2") задає діапазон А1:В2.
Об’єкт Range("A1") задає одну клітинку електронної таблиці.
Range("3:3") — це третій рядок таблиці.
Range(“A”:”D”) — стовпці від А до D;
Range("A":"A") — стовпець А;
Range(',A1":"C5'', "D8":"F10")— незв’язані діапазони.
Range(“l :4”) — перші чотири рядки аркуша;
Range("1:1", "3:3", "5:5") — рядки 1, 3, 5 аркуша.
Виокремити діапазон можна методом Select:
Range(<діапазон>).Select |
Наступна команда вилучає вміст діапазону:
Range(<діапазон>).ClearContents |
Об’єкт Range володіє методами, які дають змогу розв’язувати типові для електронних таблиць задачі опрацювання даних, як ось: Sort (упорядкувати), DataSeries (створити прогресію), AutoFill (автозаповнити), AutoFilter (застосувати фільтр), Find (знайти), Consolidate (консолідувати) та ін. Ці методи описані у довідниках.
Клітинки Cells (<рядок>,<стовпець>) можуть бути властивостями об’єктів Application, Worksheets(), ActiveSheet, Range, Selection та ін.
Cells(1,2) позначає елемент першого рядка і другого стовпця таблиці, тобто клітинку В1 активного аркуша. Властивість Value містить значення клітинки, a Formula — формулу у клітинці. Метод Activate робить клітинку активною (створює об’єкт ActiveCell). Метод Font дає змогу форматувати текст у клітинці та діапазоні, а метод Borders — форматувати межі. Властивість NumberFormat забезпечує форматування чисел (ось приклад її значення: "##,##грн").
Доступ до деякої клітинки діапазону Range дає об’єкт
Range(<діапазон>).Cells(<номер рядка>, <номер стовпця>) |
Нумерація тут відносно діапазону, а не всієї таблиці.
Для створення кодів корисним є спосіб задания діапазонів із застосуванням додаткових змінних. Наприклад, діапазон A1:D3 у деякому об’єкті можна задати так:
n = 1 : <o6’єкт>.Range(Cells(n, 1), Cells(3, 4)).
Вираз Cells(3,4) означає адресу клітинки D3.
Доступ до окремого символу чи декількох символів тексту в клітинці можна отримати за допомогою властивості Characters(<початок>, <кінець>) клітинки.
2. Команди для дій з об’єктами. Розглянемо VBA-команди для дій з об’єктами ЕТ. Ці команди можна використати в процедурах модулів або у вікні Immediate.
Створити нову порожню книгу можна командою
Workbooks.Add.
Відкрити книгу можна так:
Workbooks.Open FileName := "myBook.xls".
Активізувати другий аркуш можна так:
Workbooks("my Book.xls").Worksheets("Аркуш2"). Activate.
Щоб у клітинку С1 ввести число 12.3, треба виконати таку команду:
ActiveSheet.Cells(1, 3).Value = 12.3
Команда задання у діапазоні А1 :С5 шрифту Arial має вигляд
Range(Cells(1, 1), Cells(5, 3)).Font.Name = "Arial".
У клітинку С5 формулу =if(a1 = 1; а2; а3) вводять командою
Worksheets("Sheet1).Cells(5, 3). Formula = "=if(a1 = 1; а2; а3)".
Якщо клітинка С5 є першою у діапазоні C5:D8, то попередню команду можна записати так:
Worksheets(1).Range(C5:D8).Cell(1,1).Formula = "=if(a1 = 1; а2; а3)".
Заховати перший аркуш можна так:
Worksheets(1).Visible = False
Заховаємо стовпець В:
Worksheets(1).Columns("B").Hidden = True
Задати шрифт-курсив для тексту клітинки А1 можна так:
Worksheets(1).Range("A1").Font.Italic = True.
Зробимо шрифт жирним у другому слові, що є в клітинці А1:
Range("A1"). Value = "Заголовок таблиці"
Range("A1 ").Characters(11,17).Font.Bold = True.
Клітинка може містити коментар. Щоб створити коментар чи змінити його, застосовують метод Text об’єкта Comment. Наступна команда-метод створить коментар у клітинці А1:
Worksheets(1 ).Range(“A1”).Comment.Text "Студент Квакін"
Наступний код зробить всі коментарі невидимими:
For Each myCom In Worksheets(1).Comments
myCom.Visible = False
Next
Наступна команда у клітинку В1 поміщає гіперпосилання:
Activesheet.Hyperlinks.Add Range("B1"), "http://hlynsky.lviv.ua"
А ця команда вибирає наступну клітинку після активної:
ActiveCell.Next.Select
Наступна команда визначає кількість (п) значень, більших від 100, у деякому числовому діапазоні:
For myCell In Range(<діапазон>).Cells
If myCell.Value >100 Then n = n +1
Next myCell
Розглянемо код, який дає змогу в діапазоні А1:С5 змінити колір всіх від’ємних чисел на червоний:
For r = 1 То 5
For s = 1 То 3
With Worksheets(1).Cells(r, s)
If .Value < 0 Then .Font.Color = vbRed
End With
Next s
Next r
Вставити на аркуш кнопку можна одною командою
Activesheet.OLEObjects.Add "Forms.CommandButton.1", _
Left := 100, Top := 20, Height := 20, Width := 100
Наступна команда змінює підпис на кнопці:
ActiveSheet.Commandbuttonl. Caption = "Обчислити"
Зауважимо, що такі команди зручно виконувати у вікні Immediate. Це дає змогу керувати ЕТ в консольному режимі (вручну).
3. Події робочої книги. Розглянемо події робочої книги Workbook: BeforeClose (перед закриттям), BeforePrint (перед друком), Open (під час відкривання), а також приклади кодів — можливих реакцій на них.
Нехай реакція на першу подію така: якщо книга не збережена, то її треба зберегти. Відповідна процедура має такий вигляд:
Sub Workbook_BeforeClose()
If Me.Saved = False Then Me.Save
End Sub
Реакція на другу подію: перед друком переобчислити всі формули в таблиці.
Sub Workbook_BeforePrint(Cancel As Boolean)
For Each mySheet In Worksheets
mySheet. Calculate
Next
End Sub
Реакція на третю подію: під час відкривання книги вікно максимізувати.
Sub Workbook_Open()
Application.WindowState = xlMaximized
End Sub
4. Створення електронної таблиці засобами VBA з вікна Immediate. Розглянемо створення ЕТ командним способом.
Об’єкт WorksheetFunction дає доступ до функцій робочого аркуша MS Excel. Наступний код демонструє застосування функції max.
myMax = Application.WorksheetFunction.Max(Range(<діапазон>))
MsgBox myMax
Задача 1. Змоделювати діяльність підприємства, що має філіали в п’ятьох містах, протягом перших шести місяців року. Створити таблицю з доходами підприємства, заповнивши її випадковими цілими числами з діапазону від -50 до 50 (млн грн). Обчислити суму всіх доходів.
Розв’язування. Відкриємо MS Excel і перейдемо у режим VBA. Розглянемо код, який у перший стовпець, починаючи з клітинки А2, виводить назви міст, взяті з деякого масиву towns(5), а в пер-ший рядок, починаючи з клітинки В1, — назви місяців, взяті з масиву months(12). Далі заповнимо діапазон B2:G6 випадковими числами від -50 до 50 і обчислимо суму всіх чисел.
For t = 1 То 5 : Cells (t + 1, 1).Value = towns(t): Next t
For m = 1 To 6 : Cells(1, m + 1) = months(m): Next m
Application. Range("B2:G6").Formula =_
"=Round(RAND() * 100 - 50,0)"
Application.Range("b2:h6").Value =_
Application.Range("B2:G6").Value
suma = Application.WorksheetFunction.Sum(Range("B2:G6"))
MsgBox suma
Спростимо задачу. Замінимо назви міст і місяців їхніми номерами і введемо всі команди у вікні Immediate. Нагадаємо, що у цьому випадку команду циклу вводять в одному рядку так:
For t = 1 То 5 : Cells (t + 1, 1).Value = t: Next t
Друга команда Application у цьому коді потрібна лише, якщо електронна таблиця перебуває в режимі «формули».
Команду MsgBox suma можна замінити командою ?suma.
Розглянемо ще один спосіб спрощення і автоматизації робіт, що реалізується за допомогою властивості Value об’єкта Range. Наступні дві команди заповнюють стовпець назвами міст, а рядок — назвами шести місяців:
Range("A2:A6") = Array(“'Київ”, "Львів", "Харків", "Одеса", "Рівне")
Range("B1 :G6") = Array("Січень", "Лютий", "Березень", "Квітень", 'Травень", "Червень")
Завдання 1. Визначіть максимальний прибуток підприємства і найбільший збиток.
Завдання 2. Створіть процедуру з наведеним кодом і модифікуйте код, щоб визначити кількість місяців, коли філія з першого міста мала прибутки.
Завдання 3*. Розв’яжіть задачу № 12 свого варіанта з розділу «Задачі» засобами VBA та електронних таблиць.
5. Створення макросу. Розглянемо задачу про створення макросу і призначення його кнопці.
Рис. 4.4 Рис. 4.5
Задача 2. Створити макрос мовою VBA для виведення кодової таблиці символів ASCII (рис. 4.5) у діапазон клітинок електронної таблиці MS Excel. Призначити макрос кнопці, розташованій на аркуші електронної таблиці.
Розв’язування. Виконайте команди Сервіс => Макрос => Макроси (Excell 2003) чи Вигляд => Макроси (Excell 2007) з головного меню MS Excel. У вікні, що з’явиться, у рядку «Ім’я макросу» введіть назву макросу (наприклад, Ascii) і натисніть кнопку «Створити». Відкриється вікно «Microsoft Visual Basic» із заготовкою процедури Ascii. Введіть такий код:
Sub Ascii()
Dim і, j As Integer
For і = 0 To 25 'у рядках - одна чи дві цифри коду символу
For j = 0 То 9 'у стовпцях - остання цифра коду символу
If і * 10 + j < 256 Then 'кодів є до 255
Cells(i + 2, j + 2) = Chr(i * 10 + j) 'розміщуємо символ
End If
Next j
Next і
End Sub
Нагадаємо, що функція Chr(<код символу>) повертає відповідний символ таблиці кодів ASCII — односимвольне дане.
Тепер розграфимо діапазон клітинок А1:К27, як показано на рис. 4.4. Заповнимо вручну стовпець А і рядок 1. Задамо необхідні формати клітинок та ширину стовпців. Під таблицею розташуємо кнопку «Заповнити таблицю». Для вставляння кнопки треба увімкнути панель інструментів «Форми» (Forms) і вибрати в ній елемент «Кнопка». Обведемо контур для кнопки у потрібному місці робочої сторінки ЕТ. З’явиться вікно «Призначити макрос об’єкту». Виберемо макрос Ascii => Ok. Змінимо напис на кнопці, скориставшись її контекстним меню.
Клацнемо на кнопці «Заповнити таблицю» й отримаємо таблицю кодів ASCII (рис. 4.5).
Переконайтеся, що латинській літері «А» відповідає код 65, а малій літері «а» — 117. Літері «Б» відповідає код 214, а «б» — 246.
Вправи
1. Запишіть макрос форматування вмісту клітинки так: розмір шрифту — 18 пунктів, колір — синій, написання — жирний курсив. Призначте макрос комбінації клавіш Ctrl + Shift + М.
2. Змініть код макросу Ascii так, щоб після натискання кнопки в таблицю виводилися лише малі (або великі) латинські символи.
Ключ. Знайдіть перше входження, наприклад, латинського символу «а» в таблицю ASCII і виведіть лише наступні 26 символів. Для цього в подвійному циклі For макросу Ascii використайте команду
If Chr(i * 10 + j) = ”a” Then ...
3. Змініть код макросу Ascii так, щоб у таблицю виводилися лише малі (або великі) символи кирилиці.
4. Розв’яжіть задачу № 7 з розділу «Задачі» з виведенням результатів в електронну таблицю.
5. Розв’яжіть задачу № 9 з розділу «Задачі» з виведенням результатів в електронну таблицю.
6. Розв’яжіть задачу № 14 (про вибори) з розділу «Задачі» з виведенням результатів в електронну таблицю.