Перейти до вмісту

VBA

Матеріал з K2 ERP Wiki
AddNumbers = a + b

End Sub

В Excel через VBA можна керувати:

'''Висновок:''' VBA залишається важливим для desktop Office, а Office Scripts краще вписується в сучасну Microsoft 365 cloud-автоматизацію.; * Документація Microsoft Office object model.; Критерій

* файли з персональними даними;
* email-розсилки;
* збереження копій;
* тимчасові файли;
* логи;
* доступ до мережевих папок;
* паролі;
* токени;
* зовнішні підключення;
* експорт у CSV/PDF;
* випадкове надсилання не з цієї причини адресату.;== Workbook ==
=== Заповнити заголовок звіту ===
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
== With ==

Макроси можна підписувати цифровим сертифікатом.; Debug.Print ws.Name

VBA має змогу відкривати, читати, створювати й зберігати файли.; Відкриття книги: Приклад:

MsgBox "Hello, world!"

Практична роль: MsgBox і InputBox підходять для простого діалогу з користувачем без створення окремої форми.; * `Application`;

  • `Workbook`;
  • `Worksheet`;
  • `Range`;
  • `Cell`;
  • `Chart`;
  • `PivotTable`;
  • `ListObject`.;== UserForm ==

Практична роль: правильні типи змінних роблять VBA-код зрозумілішим, швидшим і менш схильним до помилок.;

End Select

VBA застосовується не лише в Excel, а й у Word.; Dim ws As Worksheet

Range("A1").Value = "Hello"

MsgBox "Операцію завершено"

Cells надає можливість звертатися до комірки за номером рядка й колонки.; Sub CheckStatus()

Sub FormatReport()

</syntaxhighlight>

Хороші практики VBA

Case "New"

UserForm використовують для: Access VBA застосовується для автоматизації баз даних Microsoft Access.; Якщо потрібно керувати діями Office — VBA доречний.; * запуску refresh;

  • керування файлами;
  • додаткової логіки;
  • форматування результатів;
  • створення звітів після актуалізація даних.; Висновок: формули, Power Query і VBA можуть доповнювати одне одного, якщо правильно розділити відповідальність.; value = "Text"

Module — це місце, де зберігається VBA-код.; VBA має змогу бути корисним для:

MsgBox "Новий"

Критично: не варто вмикати макроси у файлах із невідомих або недовірених джерел.; Sub ClearData() Dim isActive As Boolean

переважні аспекти VBA

<syntaxhighlight lang="vb">
End Sub

== Visual Basic Editor ==

Суть об’єктної моделі: VBA керує Excel через об’єкти: застосунок, книга, аркуш, діапазон, комірка.; Python

  • зібрати інформаційні дані з кількох Excel-файлів;
  • автономно відформатувати звіт;
  • створити кнопки для запуску дій;
  • перевірити правильність заповнення таблиці;
  • сформувати Word-документ із даних Excel;
  • розіслати листи через Outlook;
  • імпортувати CSV;
  • очистити таблицю;
  • побудувати зведений звіт;
  • створити просту форму введення;
  • автоматизувати Access-базу;
  • згенерувати файли для клієнтів або підрозділів;
  • виконати повторювану офісну процедуру.; Його потрібно використовувати дуже обережно й локально.;</syntaxhighlight>
Приклад:

'''Практична роль:''' Word VBA корисний для генерації документів, шаблонів, договорів і службових листів.; Критерій

'''Перевага:''' With робить код коротшим і читабельнішим, коли багато команд застосовуються до одного об’єкта.;

Приклади задач на VBA

MsgBox показує повідомлення.; Office Scripts

Приклад відкриття Excel-файлу:

</syntaxhighlight> VBA має змогу бути не найкращим вибором для: Sub ReadRangeToArray()

Access VBA

Приклад: End With

ws.Range("A1").Value = "Дата"
</div>

'''Критично:''' у VBA бажано завжди використовувати `Option Explicit`, щоб уникати помилок через випадкові або неправильно написані змінні.; End Function
 MsgBox ThisWorkbook.Name
Рекомендовано:
</div>
 .Font.Bold = True

<syntaxhighlight lang="vb">

* `String`;
* `Integer`;
* `Long`;
* `Double`;
* `Currency`;
* `Boolean`;
* `Date`;
* `Variant`;
* `Object`;
* `Range`;
* `Worksheet`;
* `Workbook`.;

Variant — універсальний тип, який має змогу містити різні значення.; Часто найкращий варіант — поєднання формул і макросів.;</syntaxhighlight>

.Borders.LineStyle = xlContinuous

Простий приклад макросу:

  • застарілий синтаксис;
  • обмежена сучасна програмний пакет;
  • слабша придатність для великих систем;
  • складність version control для Office-файлів;
  • ризики безпеки макросів;
  • залежність від Microsoft Office;
  • проблеми сумісності між версіями Office;
  • складність тестування;
  • повільність при неправильній роботі з комірками;
  • залежність від локального середовища користувача;
  • не найкращий вибір для web або cloud automation.; Option Explicit

Робота з помилками

</syntaxhighlight>

Select Case status
  • макросів;
  • кнопок;
  • подій;
  • автоматизації дій;
  • обробки таблиць;
  • запуску workflow.; Якщо тип відомий, краще оголосити його явно.;== Outlook VBA ==

Excel має ієрархічну об’єктну модель.; * Microsoft Learn: Outlook VBA reference.; Практична роль: Worksheet надає можливість працювати з конкретним аркушем, а не покладатися на активне вікно.; * Матеріали щодо Excel automation, Power Query, Office Scripts і Power Automate.; Змінні у VBA оголошуються через `Dim`.;== VBA і Excel-формули ==

* автоматизувати Excel;
* оперативно зробити офісний макрос;
* обробити таблиці;
* сформувати звіт;
* працювати з Word/Outlook із Excel;
* автоматизувати локальний Office-процес;
* створити внутрішній інструмент для невеликої команди;
* скоротити ручні повторювані дії;
* працювати з legacy Office-файлами;
* підтримувати існуючі макроси.; '''With''' надає можливість виконати кілька дій з одним об’єктом.;<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

VBA часто функціонує з бізнес-даними, фінансовими таблицями, персональними даними й email.; Приклад перевірки існування файлу:

ThisWorkbook.Save

* створювати документи;
* заповнювати шаблони;
* форматувати текст;
* працювати з таблицями;
* вставляти інформаційні дані з Excel;
* генерувати договори;
* створювати листи;
* автоматизувати стилі;
* зберігати PDF.;<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
== Джерела ==
== Форматування ==

== Підпис макросів ==

Функцію можна використовувати в іншому VBA-коді, а іноді й на аркуші Excel.;</div>

Можливі проблеми:

== Продуктивність VBA ==
Application.Calculation = xlCalculationAutomatic
 End If
<syntaxhighlight lang="vb">
'''Практична роль:''' цикли потрібні для обробки рядків, аркушів, файлів, листів і повторюваних офісних операцій.; MsgBox lastRow

Краще вказувати аркуш явно:

Variant зручний, але має змогу приховувати помилки типів.;
Увага: Variant варто використовувати обережно.;
<syntaxhighlight lang="vb">
Sub ListSheets()
</div>

 Worksheets("Data").Range("A2:Z1000").ClearContents
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
== Select і Activate ==

Sub ClearReport()

== Умови ==

Sub SafeMacro()

UserForm має змогу містити:
== Range ==
VBA залишається корисним інструментом для швидкої локальної бізнес-автоматизації, особливо коли процеси вже побудовані навколо Excel або Office.; VBA-макроси можуть бути небезпечними, якщо файл отриманий із ненадійного джерела.; End Sub
== Приватність даних ==
End Sub

'''Суть Sub:''' процедура виконує команду або набір команд, але не повертає результат як функція.;<syntaxhighlight lang="vb">

End Sub
Форматування має змогу включати:
Створення аркуша:

</div>
 Next ws
'''Підказка:''' у VBA-прикладах істотно завжди дивитися, з якою книгою, аркушем і діапазоном функціонує код.; Dim status As String
</div>
value = Date
!; Sub FindLastRow()

<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
'''Макрос''' — це записана або написана послідовність команд, яку можна запускати повторно.; On Error GoTo ErrorHandler
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Sub CreateHeader()

<syntaxhighlight lang="vb">

Sheets("Data").Select
  • змінювати комірки;
  • копіювати інформаційні дані;
  • форматувати таблицю;
  • створювати аркуші;
  • зберігати файл;
  • будувати звіт;
  • фільтрувати інформаційні дані;
  • запускати обчислення;
  • відкривати інші файли;
  • виконувати перевірки.;== Debugging ==

|- | Основна ніша | автоматизація процесів Microsoft Office | Універсальна автоматизація процесів, data science, web, scripts |- | Excel-інтеграція | Вбудована | Через бібліотеки або інтеграції |- | Поріг входу для Office-користувачів | Нижчий | Вищий, якщо користувач системи не програміст |- | програмний пакет | Office object model | Дуже широка загальна програмний пакет |- | Production-системи | Обмежено | Значно ширші функціональні можливості |}

 Dim wordApp As Object
== Обєктна модель Excel ==

</div>

Word VBA має змогу:

<syntaxhighlight lang="vb">

<syntaxhighlight lang="vb">
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
== Select Case ==

|- | Основна мова | Visual Basic for Applications | TypeScript |- | Середовище | Desktop Office | Microsoft 365 / web automation |- | історичний розвиток | Дуже зрілий legacy-інструмент | Сучасніший cloud-oriented підхід |- | Найкраще для | Desktop Excel automation | Web Excel і Power Automate сценарії |}

VBA і Power Query

Безпека макросів

Типові помилки початківців

Приклад користувацької функції для Excel:

Головна думка: VBA — це практичний інструмент для автоматизації Office.; Case Else Sub InsertText() VBA краще підходить для:

End Sub

Dim doc As Object
.Font.Size = 14
MsgBox "Невідомий"

</syntaxhighlight>

Workbooks.Open "C:\Data\input.csv"

VBA доречний, коли потрібно:

Практична роль: Function корисна для повторюваних обчислень, перевірок і логіки, яка має повертати результат.;

Практична роль: UserForm надає можливість зробити макрос зручнішим для користувачів, які не хочуть редагувати код або комірки параметрів.; VBA

</syntaxhighlight>

Головна ніша VBA: Excel-автоматизація — це найпоширеніше й найпрактичніше сфера застосування Visual Basic for Applications.;
'''істотно:''' VBA є собою сильним інструментом для Office-автоматизації, але не повинен автономно ставати архітектурною основою великих систем.;== Excel VBA ==
MsgBox "Операцію завершено"
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Sub CreateEmail()

=== Простий макрос із обробкою помилки ===

</div>

'''Практична порада:''' VBA варто обирати для задач, де основна робота вже відбувається в Microsoft Office і потрібна швидка локальна автоматизація процесів.; Кілька умов:

<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
</div>

</div>
 MsgBox "Заблокований"
Application.EnableEvents = True

У модулях можуть бути:

<syntaxhighlight lang="vb">

Dim wb As Workbook

 MsgBox "Minor"
<syntaxhighlight lang="vb">
== Робота з файлами ==
'''Function''' повертає значення.; * Документація щодо безпеки макросів Microsoft Office.; End Sub

 With Worksheets("Report").Range("A1")

MsgBox "Привіт, " & userName

Без `Option Explicit` помилки в назвах змінних можуть залишитися непоміченими.;
ElseIf status = "Active" Then

 If Not Intersect(Target, Range("A:A")) Is Nothing Then

End Sub

total = 100

</syntaxhighlight> Краще: With Worksheets("Report").Range("A1:D1")

UserForm — це форма введення даних у VBA.;

{{SEO

name = "Alice"

On Error GoTo ErrorHandler
data = Worksheets("Data").Range("A1:C100").Value
MsgBox "Помилка: " & Err.Description

End Sub

істотно: після вимкнення ScreenUpdating, Calculation або Events потрібно обов’язково повернути конфігурація назад, навіть якщо сталася помилка.;

Set ws = ThisWorkbook.Worksheets("Data")

Робота з масивами

ErrorHandler:

Exit Sub

VBA і Office Scripts

Sub застосовується для:

У VBA є собою інструменти налагодження.;== Див.; додатково == `For`:

Debug.Print i
.Interior.Color = RGB(220, 230, 241)

Поширені помилки:

Debug.Print "Last row: " & lastRow
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

Початківці часто використовують `Select` і `Activate`, особливо після запису макросу.; Не найкращий приклад:

</div>

* макросів Excel;
* автоматизації звітів;
* обробки таблиць;
* форматування документів;
* створення шаблонів;
* перевірки даних;
* імпорту й експорту файлів;
* роботи з CSV;
* автоматизації Word;
* автоматизації Outlook;
* автоматизації Access;
* створення UserForm;
* внутрішніх офісних інструментів;
* швидкої бізнес-автоматизації.;<syntaxhighlight lang="vb">

Option Explicit

mail.To = "user@example.com"
Dim data As Variant
  • форми;
  • звіти;
  • запити;
  • кнопки;
  • перевірка даних;
  • імпорт;
  • експорт;
  • бізнес-логіка;
  • робота з DAO/ADO;
  • автоматизація процесів локальних баз даних.;=== Знайти останній рядок ===

Ризики: End With

Sub CreateWordDocument()

Outlook VBA має змогу автоматизувати роботу з email.;<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

Приклад:

'''Перевага:''' VBA корисний там, де користувачі вже працюють в Excel або Office, але хочуть зменшити кількість ручних повторюваних дій.; VAT = amount * rate
== Складові модулі ==

Збереження:

VBA має кілька типів циклів.; Можна використовувати:

VBA часто використовують для імпорту або експорту CSV.; Приклади подій:
VBA застосовується для:
== CSV ==

End Sub

End Sub

Cells(2, 3).Value = "C2"

Power Query підходить для:
<syntaxhighlight lang="vb">
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

Sub Example()

 For i = 1 To 5

== Коли VBA має змогу бути невдалим вибором ==
VBA застосовується; додатково реалізовано автоматизації Excel, Word, Access, Outlook та інших Office-застосунків.;<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">

 Case "Blocked"
 Set ws = ThisWorkbook.Worksheets("Data")
 Set mail = Application.CreateItem(0)
 Dim ws As Worksheet
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">

Змінні

як ілюстрація, Excel має змогу створити Word-документ:

З явним аркушем:

Application.Workbooks("Report.xlsx").Worksheets("Data").Range("A1").Value = "Hello"

* створювати модулі;
* писати процедури;
* редагувати макроси;
* створювати UserForm;
* переглядати обєкти проєкту;
* запускати код;
* ставити breakpoints;
* налагоджувати помилки;
* переглядати Immediate Window;
* працювати з references.; Приклад:
 Selection.TypeText "автономно створений текст"
End Function

'''Visual Basic Editor''' або '''VBE''' — це редактор, у якому пишуть і редагують VBA-код.;</div>
 Dim lastRow As Long
Set wb = Workbooks.Open("C:\Reports\data.xlsx")

Потрібно контролювати:

<syntaxhighlight lang="vb">

<syntaxhighlight lang="vb">
'''Практична роль:''' debugging у VBA особливо важливий, бо макроси часто працюють із реальними файлами й даними користувачів.; Dim wb As Workbook

* `On Error GoTo ErrorHandler`;
* `On Error Resume Next`;
* `Err.Number`;
* `Err.Description`;
* очищення стану після помилки.;</div>

{| class="wikitable"
== Події ==
<syntaxhighlight lang="vb">

'''центральний об’єкт Excel VBA:''' Range застосовується для читання, запису, форматування й обробки даних у комірках.; Приклад:

Range("A1").Select

<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

End Sub

* breakpoints;
* Step Into;
* Step Over;
* Immediate Window;
* Watch Window;
* Locals Window;
* `Debug.Print`;
* `Stop`;
* перегляд значень змінних.; Set doc = wordApp.Documents.Add

'''Основна ідея:''' VBA надає можливість автоматизувати ручні дії в Microsoft Office і перетворювати повторювані операції на макроси або невеликі внутрішні інструменти.; * вбудований у Microsoft Office;
* зручний для Excel-автоматизації;
* швидкий старт для офісних користувачів;
* доступ до обєктної моделі Office;
* можливість запису макросів;
* автоматизація процесів повторюваних дій;
* робота з файлами;
* створення форм;
* інтеграційні функціональні можливості Excel, Word, Outlook і Access;
* корисний для внутрішніх бізнес-процесів;
* не потребує окремої платформи для простих задач.; VBA не замінює Excel-формули в цілому.;</div>
 .Font.Size = 16
'''Практична роль:''' Workbook застосовують, коли потрібно для роботи з цілим Excel-файлом.;

Sub HelloWorld() У Excel макрос має змогу:

mail.Subject = "Звіт"
MsgBox "Останній рядок: " & lastRow

!; Dim mail As Object </syntaxhighlight> VBA підтримує роботу умовні конструкції `If ...; * Microsoft Learn: Access VBA reference.; Найчастіше VBA асоціюється з Excel, де за його допомогою автоматизують звіти, обробку таблиць, перевірку даних, імпорт, експорт, форматування, побудову документів і повторювані бізнес-операції.; MsgBox "Активний"

Office Scripts — сучасніший підхід до автоматизації Excel у Microsoft 365, який використовує TypeScript.; * створення листів;

  • надсилання повідомлень;
  • обробка вхідних листів;
  • збереження вкладень;
  • сортування листів;
  • створення задач;
  • інтеграційні функціональні можливості з Excel;
  • автоматичні повідомлення.; With Worksheets("Report").Range("A1")

</syntaxhighlight>

  • простих обчислень;
  • прозорих розрахунків на аркуші;
  • швидкого аналізу;
  • роботи користувачів без коду.;
Range("A1").Value = "Звіт"
Dim i As Long
Set wordApp = CreateObject("Word.Application")

Суть макросу: це команда або набір команд, які користувач системи має змогу запускати замість ручного повторення дій.; Range("A1").Font.Bold = True </syntaxhighlight> End Sub

</syntaxhighlight>

Word VBA

Power Query часто є собою кращим інструментом для імпорту, очищення й трансформації даних.; Worksheets("Data").Range("A1").Value = "Готово" Поширені типи:

ThisWorkbook.SaveAs "C:\Reports\final_report.xlsx"

Worksheets.Add.Name = "NewReport"

  • використовувати `Option Explicit`;
  • давати змінним зрозумілі імена;
  • не використовувати `Select` без потреби;
  • явно вказувати Workbook і Worksheet;
  • розділяти код на модулі;
  • обробляти помилки;
  • не приховувати помилки через `On Error Resume Next`;
  • читати великі діапазони в масиви;
  • вимикати ScreenUpdating лише тимчасово;
  • повертати конфігурація Excel після макросу;
  • документувати макроси;
  • робити резервні копії файлів;
  • не зберігати паролі в коді;
  • підписувати макроси в корпоративному середовищі.; Основні переважні аспекти VBA:

VBA використовує `On Error` для обробки помилок.; Приклад:

doc.Content.Text = "Документ створено з Excel VBA"
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

Variant

У VBE можна:

Простий приклад відкриття CSV:

</div>

== Обмеження VBA ==
End Sub

Dim name As String

'''Worksheet''' — це аркуш Excel.; '''Увага:''' CSV здається простим форматом, але в бізнес-даних часто виникають проблеми з кодуванням, роздільниками й форматами дат.;== Цикли ==
 For Each ws In ThisWorkbook.Worksheets
VBA має змогу реагувати на події.; '''Практична роль:''' Access VBA надає можливість створювати невеликі внутрішні бази даних із формами, звітами й логікою.; Надсилаємо звіт."
</div>
'''Практична користь:''' VBA має змогу перетворити сирі інформаційні дані на готовий оформлений звіт.;

Dim count As Long

VBA — це вбудована мова автоматизації Microsoft Office, яка найбільше застосовується для Excel-макросів, офісних сценаріїв, автоматизації звітів, обробки таблиць, Word-документів, Outlook-листів і Access-форм.;
ErrorHandler:

Приклад:

If age >= 18 Then

Макроси

</syntaxhighlight> </syntaxhighlight>

MsgBox "Adult"

Робота з останнім рядком

End Sub

End If

End With

Приклад:

Коли варто використовувати VBA

Worksheets("Data").Range("A1").Value = "Hello"

MsgBox "Файл існує"

Приклад: Практична роль: події дозволяють запускати VBA-код автономно, коли користувач системи щось робить у документі.; MsgBox "Новий" Перевага: VBA має змогу об’єднувати Excel, Word, Outlook і Access в один офісний workflow.; Для прискорення часто використовують:

Функції Function

Формули краще підходять для:

 MsgBox "Сталася помилка: " & Err.Description
Set wb = Workbooks.Open("C:\Reports\data.xlsx")
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
Приклад:
`For Each`:
</div>
Можливі задачі:

Для чого застосовується VBA

Cells(1, 1).Value = "A1" Суть умов: код має змогу виконувати різні дії залежно від значень у змінних, комірках або документах.; MsgBox "Змінено колонку A"

Dim total As Double
* не використовувати `Option Explicit`;
* покладатися на активний аркуш;
* надмірно використовувати `Select`;
* не перевіряти існування файлів;
* не обробляти помилки;
* використовувати `On Error Resume Next` всюди;
* працювати з комірками по одній у великих таблицях;
* не повертати `Application.ScreenUpdating`;
* випадково перезаписувати інформаційні дані;
* не робити резервну копію перед макросом;
* зберігати паролі в коді;
* запускати макроси з недовірених файлів;
* не документувати складну логіку.; * Microsoft Learn: Word VBA reference.; * читання діапазону в масив;
* запис діапазону одним блоком;
* вимкнення актуалізація екрана;
* вимкнення автоматичних обчислень;
* вимкнення events;
* уникнення `Select` і `Activate`.; VBA
VBA має суттєві обмеження.; '''Практична роль:''' пошук останнього рядка потрібен для імпорту, додавання даних, перевірок і звітів.; lastRow = Worksheets("Data").Cells(Worksheets("Data").Rows.Count, "A").End(xlUp).Row
'''Небезпека:''' макрос має змогу дуже оперативно змінити або видалити багато даних, з цієї причини перед запуском важливих макросів потрібні перевірки й резервні копії.;

Приклад: </syntaxhighlight>

!;=== Очистити діапазон ===

Else
Dim age As Long

Application.Calculation = xlCalculationManual

  • регулярного імпорту;
  • очищення таблиць;
  • об’єднання джерел;
  • трансформацій;
  • повторюваних data workflows.;== Тематичні мітки ==
Case "Active"

If status = "New" Then

Висновок: VBA зручний для автоматизації прямо всередині Office, а Python краще підходить для ширших, сучасніших і масштабніших сценаріїв.;
'''Workbook''' — це книга Excel.; value = 10
If Dir("C:\Reports\data.xlsx") <> "" Then
!; Приклад збереження копії:

Загальний характеристика

rowNumber = rowNumber + 1

</syntaxhighlight>

Dim ws As Worksheet істотно: автоматичне надсилання email потрібно використовувати обережно, щоб уникнути помилкових розсилок і витоку даних.; це мова програмування й середовище автоматизації, вбудоване в Microsoft Office виступає ключовою рисою створення макросів забезпечується через VBA або Visual Basic for Applications.;</syntaxhighlight>

Приклад:

End If Select Case зручний, коли потрібно перевірити багато варіантів.; Він найкраще функціонує там, де потрібно оперативно прибрати ручну рутину в Excel, Word, Outlook або Access, але потребує обережності з безпекою, даними й підтримкою.; `Do While`:

Основні об’єкти:

Debug.Print ws.Name
Dim ws As Worksheet

VBA є собою подієвою й процедурною мовою, яка функціонує всередині Office-документів і застосунків.; Практична роль: цифровий підпис макросів важливий у корпоративному середовищі, де VBA застосовується регулярно.; .Value = "Звіт продажів"

Worksheets("Data").Cells(1, 1).Value = "A1"

Приклад:

<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">
'''Правило:''' макрос має працювати лише з тими даними, які потрібні для конкретної задачі, і не повинен непомітно копіювати або надсилати чутливу інформацію.; * книгами;
* аркушами;
* діапазонами;
* комірками;
* таблицями;
* формулами;
* зведеними таблицями;
* графіками;
* фільтрами;
* форматуванням;
* файлами;
* подіями;
* кнопками;
* формами.;

!; * Microsoft Learn: Excel VBA reference.; End Sub Application.ScreenUpdating = True

MsgBox data(1, 1) MsgBox "Активний"
  • підтвердити автора;
  • зменшити ризик підміни;
  • полегшити корпоративне використання;
  • керувати політиками безпеки;
  • відокремити довірені макроси від випадкових файлів.; Function VAT(amount As Double, rate As Double) As Double
Application.ScreenUpdating = False Sub PrintNumbers() Приклад:
VBA має змогу бути повільним, якщо працювати з комірками по одній.; Приклад події зміни аркуша:
Sub ShowWorkbookName()

'''Головне правило:''' у VBA краще звертатися до об’єктів напряму, а не вибирати їх через `Select`.; Приклад:
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
Range("A1:B10").Font.Bold = True
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">

</div>
</div>
VBA і Python часто порівнюють для автоматизації.; Приклад:

Else

mail.Body = "Добрий день.; Водночас VBA має обмеження: ризики макросів, складність командної розробки, залежність від Office, неідеальна масштабованість і застарілий підхід для багатьох сучасних cloud- або web-сценаріїв.;

Висновок

істотно: у VBA потрібно уважно працювати з шляхами, правами доступу й відкритими файлами.; Loop

MsgBox "Невідомий статус"

</syntaxhighlight>

Dim price As Double Практична порада: якщо задача — лише очистити й об’єднати інформаційні дані, Power Query часто кращий за VBA.; price = 19.99

  • введення даних;
  • невеликих внутрішніх інтерфейсів;
  • фільтрів;
  • вибору параметрів;
  • керування макросом;
  • простих office-додатків.;
mail.Display

Option Explicit змушує явно оголошувати змінні.; Приклад:

Next i

Головна перевага: VBA дає швидкий шлях від ручної офісної операції до автоматизованого макросу.; * великих enterprise-систем;

  • web-застосунків;
  • cloud-native автоматизації;
  • складних API-сервісів;
  • великих data pipelines;
  • сучасного ML/AI workflow;
  • командної розробки з CI/CD;
  • систем із високими вимогами до безпеки;
  • задач, які краще вирішуються Power Query, SQL, Python або Power Automate;
  • довгострокових критичних бізнес-платформ.; age = 20
  • повторюваних процедур;
  • імпорту/експорту;
  • складної логіки;
  • роботи з файлами;
  • автоматичного форматування;
  • генерації звітів;
  • дій, які формула не має змогу виконати.; Приклад створення листа:

VBA і Python

!; .Font.Bold = True
== Cells ==
* Microsoft Learn: Visual Basic for Applications.; Він представляє комірку або діапазон комірок.; Читання великого діапазону в масив часто швидше, ніж робота з кожною коміркою окремо.; isActive = True

 End If
VBA має змогу автоматизувати форматування Excel.;<syntaxhighlight lang="vb">

Sub — це процедура, яка виконує дію й не повертає значення.; Вона дає доступ до об’єктної моделі Office: книг Excel, аркушів, комірок, документів Word, листів Outlook, форм Access та інших елементів.; .Value = "Звіт"

status = "Active"

Практична роль: Select Case робить код читабельнішим, якщо є собою багато фіксованих варіантів.; CSV має змогу мати проблеми з: VBA має змогу керувати іншими Office-застосунками через automation.; Else`.;== Worksheet ==

Worksheets("Report").Range("A2:Z1000").ClearContents
Exit Sub

Dim userName As String Типові задачі VBA: істотно: `Cells(row, column)` особливо корисний у циклах, але потрібно уважно контролювати номери рядків і колонок.; Then ...; Приклад:

Application.EnableEvents = False End Sub Dim lastRow As Long

End Sub

Do While Cells(rowNumber, 1).Value <> "" Worksheets("Data").Range("A1").Value = "Hello"

userName = InputBox("Введіть ім’я:")

wordApp.Visible = True

істотно: VBA найкраще підходить для автоматизації Office-процесів, а не для створення великих сучасних enterprise-систем.; Приклад: End Sub Function AddNumbers(a As Double, b As Double) As Double

Sub SafeOpenFile()

  • шрифт;
  • колір;
  • межі;
  • ширину колонок;
  • формат чисел;
  • вирівнювання;
  • заливку;
  • умовне форматування.;
    Приклад:
    
    * запуск шкідливого коду;
    * видалення або зміна файлів;
    * надсилання email;
    * доступ до документів;
    * виконання shell-команд;
    * витік даних;
    * підміна макросів;
    * фішингові документи.;
    
Workbooks.Open "C:\Reports\data.xlsx"
Excel VBA — найпопулярніший сценарій використання VBA.;
Приклад:

Приклад:
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
</div>

count = 10

<syntaxhighlight lang="vb">

' код обробки

Це сприяє:
== Option Explicit ==
Selection.Value = "Hello"

Private Sub Worksheet_Change(ByVal Target As Range)

* кодуванням;
* роздільниками;
* комами в тексті;
* датами;
* десятковими роздільниками;
* локальними налаштуваннями Excel.; '''Практична роль:''' VBE є собою основним середовищем розробки для макросів і VBA-автоматизації в Office.; * TextBox;
* ComboBox;
* ListBox;
* CheckBox;
* OptionButton;
* CommandButton;
* Label;
* Frame.; Dim value As Variant

</div>

'''Головне правило:''' хороший VBA-код має бути явним, зрозумілим, безпечним для даних і не залежати від випадково активного аркуша або виділеної комірки.; '''Практична порада:''' краще розділяти код на зрозумілі модулі: імпорт, перевірка, форматування, звіти, допоміжні функції.;

InputBox запитує значення.; End Sub

.Font.Bold = True
MsgBox total

Обробити всі аркуші

Критично: `On Error Resume Next` має змогу приховати серйозні помилки.;

У VBA масиви часто використовують для швидкої обробки даних.; Практична порада: для великих таблиць краще читати діапазон у масив, обробляти в пам’яті й записувати назад одним блоком.; Sub CheckAge()

Sub ListWorksheets()

  • `Sub` процедури;
  • `Function` функції;
  • змінні;
  • константи;
  • допоміжні процедури;
  • бізнес-логіка макросів.; Поширені підходи:
Next ws
For Each ws In ThisWorkbook.Worksheets

Помилка: будувати критичну корпоративну систему лише на складних Excel-макросах без контролю версій, тестування, документації й резервного плану.; Часта задача — знайти останній заповнений рядок.;<syntaxhighlight lang="vb">

Можливі задачі:

автоматизація процесів Office між застосунками

MsgBox і InputBox

Range — один із найважливіших об’єктів Excel VBA.; * відкриття книги;

  • зміна комірки;
  • натискання кнопки;
  • активація аркуша;
  • збереження файлу;
  • закриття книги;
  • вибір комірки;
  • отримання email в Outlook.; Порівняння:

Процедури Sub