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

VBA

Матеріал з K2 ERP Wiki

Dim i As Long

.Font.Bold = True

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

<syntaxhighlight lang="vb">

* `Sub` процедури;
* `Function` функції;
* змінні;
* константи;
* допоміжні процедури;
* бізнес-логіка макросів. Dim data As Variant

! total = 100

* читання діапазону в масив;
* запис діапазону одним блоком;
* вимкнення оновлення версій екрана;
* вимкнення автоматичних обчислень;
* вимкнення events;
* уникнення `Select` і `Activate`. Access VBA застосовується для для автоматизації баз даних Microsoft Access. Часта задача  знайти останній заповнений рядок. VBA здатна цифровізувати форматування Excel. VBA

 Exit Sub
</div>
<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">
</div>
lastRow = Worksheets("Data").Cells(Worksheets("Data").Rows.Count, "A").End(xlUp).Row

Приклад збереження копії:

CSV здатна мати проблеми з:
<div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
End With
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">

'''UserForm''' — це форма введення даних у VBA.== Безпека макросів ==
 .Interior.Color = RGB(220, 230, 241)
== MsgBox і InputBox ==
Приклад:
<syntaxhighlight lang="vb">

Приклад:

* `String`;
* `Integer`;
* `Long`;
* `Double`;
* `Currency`;
* `Boolean`;
* `Date`;
* `Variant`;
* `Object`;
* `Range`;
* `Worksheet`;
* `Workbook`. ElseIf status = "Active" Then
Sub CreateEmail()
 Next i

 Dim status As String

 Debug.Print i
 wordApp.Visible = True
Приклад:
== Загальний SEO-опис ==
Краще вказувати аркуш явно:
 On Error GoTo ErrorHandler

</div>
'''Головна перевага:''' VBA дає швидкий шлях від ручної офісної операції до автоматизованого макросу. '''Практична роль:''' події дозволяють запускати VBA-код автоматизовано, коли користувач системи щось робить у документі. У VBA масиви часто використовують для швидкої обробки даних. AddNumbers = a + b
'''Sub''' — це процедура, яка виконує дію й не повертає значення.</div>

</div>

Приклад:
== Variant ==
== Access VBA ==

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

VBA має суттєві обмеження. * Microsoft Learn: Access VBA reference. count = 10
</div>
 Selection.TypeText "автоматизовано створений текст"
|-
| Основна мова
| Visual Basic for Applications
| TypeScript
|-
| Середовище
| Desktop Office
| Microsoft 365 / web automation
|-
| історія продукту
| Дуже зрілий legacy-інструмент
| Сучасніший cloud-oriented підхід
|-
| Найкраще для
| Desktop Excel automation
| Web Excel і Power Automate сценарії
|}

'''Увага:''' CSV здається простим форматом, але в бізнес-даних часто виникають проблеми з кодуванням, роздільниками й форматами дат. * Документація щодо безпеки макросів Microsoft Office. Приклад:
'''Практична роль:''' Word VBA корисний для генерації документів, шаблонів, договорів і службових листів. '''Суть умов:''' код здатна виконувати різні дії залежно від значень у змінних, комірках або документах. Він представляє комірку або діапазон комірок. VBA
'''Макрос''' — це записана або написана послідовність команд, яку можна запускати повторно. '''Практична роль:''' Worksheet дає можливість працювати з конкретним аркушем, а не покладатися на активне вікно.

Excel VBA — найпопулярніший сценарій використання VBA. Критерій

Loop

Sub PrintNumbers()
Dim isActive As Boolean

</div>
Application.Calculation = xlCalculationManual
=== Очистити діапазон ===

 Set wordApp = CreateObject("Word.Application")

 Dim ws As Worksheet

Application.Calculation = xlCalculationAutomatic

Приклад:
Приклади подій:
<syntaxhighlight lang="vb">
<div style="background:#fff7ed; border-left:6px solid #fb923c; padding:12px; margin:12px 0;">

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

Рекомендовано:

* шрифт;
* колір;
* межі;
* ширину колонок;
* формат чисел;
* вирівнювання;
* заливку;
* умовне форматування. VBA здатна бути повільним, якщо працювати з комірками по одній. * breakpoints;
* Step Into;
* Step Over;
* Immediate Window;
* Watch Window;
* Locals Window;
* `Debug.Print`;
* `Stop`;
* перегляд значень змінних. End Sub

With Worksheets("Report").Range("A1:D1")
У модулях можуть бути:

<syntaxhighlight lang="vb">
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">
</div>
</div>
'''Практична роль:''' правильні типи змінних роблять VBA-код зрозумілішим, швидшим і менш схильним до помилок.

ERP-модулі K2

критично: VBA виступає як сильним інструментом для Office-автоматизації, але не повинен автоматизовано ставати архітектурною основою великих систем. {| class="wikitable"

Set mail = Application.CreateItem(0)
'''Висновок:''' формули, Power Query і VBA можуть доповнювати одне одного, якщо правильно розділити відповідальність.== Джерела ==
<div style="background:#fdecea; border-left:6px solid #e74c3c; padding:12px; margin:12px 0;">

Приклад:
== Коли VBA здатна бути невдалим вибором ==
Range("A1").Value = "Hello"
Приклад користувацької функції для Excel:

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

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

<syntaxhighlight lang="vb">

Sub SafeOpenFile()

</div>
== UserForm ==
 If Not Intersect(Target, Range("A:A")) Is Nothing Then

 For i = 1 To 5
== автоматизація процесів Office між застосунками ==
 Case "Active"
End Sub

<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">

* `On Error GoTo ErrorHandler`;
* `On Error Resume Next`;
* `Err.Number`;
* `Err.Description`;
* очищення стану після помилки. * Microsoft Learn: Outlook VBA reference. Range("A1:B10").Font.Bold = True

End Sub SEO title: VBA — Visual Basic for Applications, макроси Excel, автоматизація Office і бізнес-процесів

SEO keywords: VBA, Visual Basic for Applications, макроси Excel, Excel VBA, Word VBA, Access VBA, Outlook VBA, автоматизація Office, Microsoft Office, макроси, Visual Basic Editor, Range, Worksheet, Workbook, UserForm, Office automation, бізнес-автоматизація, Excel автоматизація, програмування, скриптинг

</noinclude>
 {{SEO
Шаблон для службового SEO-опису сторінки. 

}}


Cells

</syntaxhighlight>

Set ws = ThisWorkbook.Worksheets("Data")

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

Dim ws As Worksheet

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

Це оптимізує:

</syntaxhighlight>

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

</syntaxhighlight>

 MsgBox ThisWorkbook.Name
<syntaxhighlight lang="vb">
 MsgBox "Minor"

 .Font.Bold = True

'''InputBox''' запитує значення. Sub FormatReport()

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

== Робота з останнім рядком ==
 MsgBox "Активний"
== CSV ==
<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
== Хороші практики VBA ==
<syntaxhighlight lang="vb">
'''With''' дає можливість виконати кілька дій з одним об’єктом. data = Worksheets("Data").Range("A1:C100").Value

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

Приклад:

  • макросів;
  • кнопок;
  • подій;
  • автоматизації дій;
  • обробки таблиць;
  • запуску workflow. Надсилаємо звіт."

Продуктивність VBA

</syntaxhighlight>

VBA застосовується для не лише в Excel, а й у Word. '''Практична роль:''' MsgBox і InputBox підходять для простого діалогу з користувачем без створення окремої форми. With Worksheets("Report").Range("A1")
</div>

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

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

<syntaxhighlight lang="vb">
 MsgBox "Adult"
</div>
'''Суть макросу:''' це команда або набір команд, які користувач системи здатна запускати замість ручного повторення дій. '''Range''' — один із найважливіших об’єктів Excel VBA. Worksheets("Data").Range("A1").Value = "Hello"
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">

'''Суть Sub:''' процедура виконує команду або набір команд, але не повертає результат як функція. '''Office Scripts''' — сучасніший підхід до автоматизації Excel у Microsoft 365, який використовує TypeScript.</div>

</syntaxhighlight>

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

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

doc.Content.Text = "Документ створено з Excel VBA"

Selection.Value = "Hello"

конкурентні переваги VBA

Variant — універсальний тип, який здатна містити різні значення. Приклад події зміни аркуша: Dim value As Variant

Select Case status

If Dir("C:\Reports\data.xlsx") <> "" Then

Case "New"

Select і Activate

  • макросів Excel;
  • автоматизації звітів;
  • обробки таблиць;
  • форматування документів;
  • створення шаблонів;
  • перевірки даних;
  • імпорту й експорту файлів;
  • роботи з CSV;
  • автоматизації Word;
  • автоматизації Outlook;
  • автоматизації Access;
  • створення UserForm;
  • внутрішніх офісних інструментів;
  • швидкої бізнес-автоматизації. Критерій
<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">

 MsgBox "Активний"
</div>

Відкриття книги:
Private Sub Worksheet_Change(ByVal Target As Range)
 End With

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

== Див. так само ==

<div style="background:#eef2ff; border-left:6px solid #4f46e5; padding:12px; margin:12px 0;">

'''Практична роль:''' VBE виступає як основним середовищем розробки для макросів і VBA-автоматизації в Office. End Sub

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

VBA здатна реагувати на події.</div>
<syntaxhighlight lang="vb">
Без `Option Explicit` помилки в назвах змінних можуть залишитися непоміченими. VBA залишається корисним інструментом для швидкої локальної бізнес-автоматизації, особливо коли процеси вже побудовані навколо Excel або Office. Початківці часто використовують `Select` і `Activate`, особливо після запису макросу.<syntaxhighlight lang="vb">
End Sub
'''Головна думка:''' VBA — це практичний інструмент для автоматизації Office. Sub CheckAge()
</div>

Sub ShowWorkbookName()

Краще:

* вбудований у Microsoft Office;
* зручний для Excel-автоматизації;
* швидкий старт для офісних користувачів;
* доступ до обєктної моделі Office;
* можливість запису макросів;
* автоматизація процесів повторюваних дій;
* робота з файлами;
* створення форм;
* інтеграційні функції ERP Excel, Word, Outlook і Access;
* корисний для внутрішніх бізнес-процесів;
* не потребує окремої платформи для простих задач. VBA застосовується для; так само реалізовано автоматизації Excel, Word, Access, Outlook і інших Office-застосунків.=== Знайти останній рядок ===

'''критично:''' VBA найкраще підходить для автоматизації Office-процесів, а не для створення великих сучасних enterprise-систем. '''Критично:''' `On Error Resume Next` здатна приховати серйозні помилки. * Матеріали щодо Excel automation, Power Query, Office Scripts і Power Automate. '''Критично:''' не варто вмикати макроси у файлах із невідомих або недовірених джерел. Python

End Sub
Option Explicit
Приклад:

Приклад:

* Microsoft Learn: Visual Basic for Applications. створення макросів забезпечується через '''VBA''' або '''Visual Basic for Applications''' — це мова програмування й середовище автоматизації. Application.EnableEvents = False
<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

Змінні

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

</syntaxhighlight>

  • створювати документи;
  • заповнювати шаблони;
  • форматувати текст;
  • працювати з таблицями;
  • вставляти інформаційні дані з Excel;
  • генерувати договори;
  • створювати листи;
  • цифровізувати стилі;
  • зберігати PDF.
  • регулярного імпорту;
  • очищення таблиць;
  • об’єднання джерел;
  • трансформацій;
  • повторюваних data workflows.
    * створення листів;
    * надсилання повідомлень;
    * обробка вхідних листів;
    * збереження вкладень;
    * сортування листів;
    * створення задач;
    * інтеграційні функції ERP з Excel;
    * автоматичні повідомлення. Приклад:
    
    '''Workbook''' — це книга Excel. .Borders.LineStyle = xlContinuous
    '''Select Case''' зручний, коли потрібно перевірити багато варіантів. Водночас VBA має обмеження: ризики макросів, складність командної розробки, залежність від Office, неідеальна масштабованість і застарілий підхід для багатьох сучасних cloud- або web-сценаріїв.</div>
    
    <syntaxhighlight lang="vb">
    Простий приклад відкриття CSV:
    

Приклад:

Цикли

Range

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

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

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

End Sub

Dim ws As Worksheet

End Sub Підказка: у VBA-прикладах критично завжди дивитися, з якою книгою, аркушем і діапазоном функціонує код. * `Application`;

  • `Workbook`;
  • `Worksheet`;
  • `Range`;
  • `Cell`;
  • `Chart`;
  • `PivotTable`;
  • `ListObject`. критично: `Cells(row, column)` особливо корисний у циклах, але потрібно уважно контролювати номери рядків і колонок. UserForm здатна містити:

</syntaxhighlight>

End With

</syntaxhighlight>

</syntaxhighlight> Поширені підходи:

Поширені типи:

Word VBA здатна:

Перевага: VBA здатна об’єднувати Excel, Word, Outlook і Access в один офісний workflow.
VBA застосовується для для:
== Debugging ==
If status = "New" Then
Sub ListWorksheets()

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

Приклад:

MsgBox "Помилка: " & Err.Description

Sub ReadRangeToArray() </syntaxhighlight>

MsgBox "Заблокований"
Практична роль: Function корисна для повторюваних обчислень, перевірок і логіки, яка має повертати результат.
<syntaxhighlight lang="vb">

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

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

Збереження:

Заповнити заголовок звіту

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

Visual Basic Editor

Dim total As Double
<syntaxhighlight lang="vb">
Порівняння:

Module — це місце, де зберігається VBA-код. Якщо потрібно керувати діями Office — VBA доречний. * запуску refresh;

  • керування файлами;
  • додаткової логіки;
  • форматування результатів;
  • створення звітів після оновлення версій даних. * Microsoft Learn: Word VBA reference. Then ...</syntaxhighlight>
'''Function''' повертає значення. Він найкраще функціонує там, де потрібно оперативно прибрати ручну рутину в Excel, Word, Outlook або Access, але потребує обережності з безпекою, даними й підтримкою. Sub ListSheets()

</div>
Worksheet — це аркуш Excel.
'''VBA''' — це вбудована мова автоматизації Microsoft Office, яка найбільше застосовується для для Excel-макросів, офісних сценаріїв, автоматизації звітів, обробки таблиць, Word-документів, Outlook-листів і Access-форм. MsgBox "Сталася помилка: " & Err.Description

* кодуванням;
* роздільниками;
* комами в тексті;
* датами;
* десятковими роздільниками;
* локальними налаштуваннями Excel.</div>

 Dim lastRow As Long
!== Приклади задач на VBA ==
'''Cells''' дає можливість звертатися до комірки за номером рядка й колонки.<div style="background:#e8f8f5; border-left:6px solid #16a085; padding:12px; margin:12px 0;">

End Function
Sub ClearReport()
== Макроси ==

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

</syntaxhighlight>

  • створювати модулі;
  • писати процедури;
  • редагувати макроси;
  • створювати UserForm;
  • переглядати об’єкти проєкту;
  • запускати код;
  • ставити breakpoints;
  • налагоджувати помилки;
  • переглядати Immediate Window;
  • працювати з references. Next ws

End If

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

Power Query часто виступає як кращим інструментом для імпорту, очищення й трансформації даних. Критично: у VBA бажано завжди використовувати `Option Explicit`, щоб уникати помилок через випадкові або неправильно написані змінні. VAT = amount * rate

`For Each`: Приклад створення листа:

rowNumber = rowNumber + 1

Тематичні мітки

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

Ризики:

Приватність даних

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

End Function

 MsgBox "Новий"
 .Font.Bold = True
VBA має кілька типів циклів.

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

Окремо варто відзначити вбудоване в Microsoft Office.== VBA і Power Query == Змінні у VBA оголошуються через `Dim`. Exit Sub ErrorHandler:

</syntaxhighlight>

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

== Excel VBA ==
Dim price As Double

Створення аркуша:

Перевага: VBA корисний там, де користувачі вже працюють в Excel або Office, але хочуть зменшити кількість ручних повторюваних дій. Dim doc As Object

Debug.Print ws.Name

Основні конкурентні переваги VBA:

MsgBox "Змінено колонку A"
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
MsgBox "Hello, world!"

Visual Basic Editor або VBE — це редактор, у якому пишуть і редагують VBA-код. mail.To = "user@example.com" End Sub

Умови

  • великих enterprise-систем;
  • web-застосунків;
  • cloud-native автоматизації;
  • складних API-сервісів;
  • великих data pipelines;
  • сучасного ML/AI workflow;
  • командної розробки з CI/CD;
  • систем із високими вимогами до безпеки;
  • задач, які краще вирішуються Power Query, SQL, Python або Power Automate;
  • довгострокових критичних бізнес-платформ. Do While Cells(rowNumber, 1).Value <> ""

</syntaxhighlight> ErrorHandler:

</syntaxhighlight>

Dim name As String

  • не використовувати `Option Explicit`;
  • покладатися на активний аркуш;
  • надмірно використовувати `Select`;
  • не перевіряти існування файлів;
  • не опрацьовувати помилки;
  • використовувати `On Error Resume Next` всюди;
  • працювати з комірками по одній у великих таблицях;
  • не повертати `Application.ScreenUpdating`;
  • випадково перезаписувати інформаційні дані;
  • не робити резервну копію перед макросом;
  • зберігати паролі в коді;
  • запускати макроси з недовірених файлів;
  • не документувати складну логіку. Workbooks.Open "C:\Reports\data.xlsx"

Висновок: VBA залишається важливим для desktop Office, а Office Scripts краще вписується в сучасну Microsoft 365 cloud-автоматизацію. Вона дає доступ до об’єктної моделі Office: книг Excel, аркушів, комірок, документів Word, листів Outlook, форм Access та інших елементів.</syntaxhighlight> Sub CreateHeader()

Приклад:

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

  • підтвердити автора;
  • зменшити ризик підміни;
  • полегшити корпоративне використання;
  • керувати політиками безпеки;
  • відокремити довірені макроси від випадкових файлів. * змінювати комірки;
  • копіювати інформаційні дані;
  • форматувати таблицю;
  • створювати аркуші;
  • зберігати файл;
  • будувати звіт;
  • фільтрувати інформаційні дані;
  • запускати обчислення;
  • відкривати інші файли;
  • виконувати перевірки.</syntaxhighlight>

VBA здатна бути корисним для:

'''Option Explicit''' змушує явно оголошувати змінні. Приклад перевірки існування файлу:
Set wb = Workbooks.Open("C:\Reports\data.xlsx")

'''Практична роль:''' Access VBA дає можливість створювати невеликі внутрішні бази даних із формами, звітами й логікою. Можливі проблеми:
== VBA і Python ==
Типові задачі VBA:

 Debug.Print ws.Name

VBA і Python часто порівнюють для автоматизації. Dim count As Long

<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
У VBE можна:
Можливі задачі:

'''Основна ідея:''' VBA дає можливість цифровізувати ручні дії в Microsoft Office і перетворювати повторювані операції на макроси або невеликі внутрішні інструменти. Outlook VBA здатна цифровізувати роботу з email. .Font.Size = 14
End Sub

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

 End If

Sub Example()

* TextBox;
* ComboBox;
* ListBox;
* CheckBox;
* OptionButton;
* CommandButton;
* Label;
* Frame. On Error GoTo ErrorHandler
ThisWorkbook.Save
== Форматування ==

 Dim ws As Worksheet

End Sub

'''критично:''' автоматичне надсилання email потрібно використовувати обережно, щоб уникнути помилкових розсилок і витоку даних. Кілька умов:
 Else
! Else`. Else

</div>

* застарілий синтаксис;
* обмежена сучасна ERP-платформа;
* слабша придатність для великих систем;
* складність version control для Office-файлів;
* ризики безпеки макросів;
* залежність від Microsoft Office;
* проблеми сумісності між версіями Office;
* складність тестування;
* повільність при неправильній роботі з комірками;
* залежність від локального середовища користувача;
* не найкращий вибір для web або cloud automation.<syntaxhighlight lang="vb">

<syntaxhighlight lang="vb">

 Dim age As Long

`For`:

* форми;
* звіти;
* запити;
* кнопки;
* перевірка даних;
* імпорт;
* експорт;
* бізнес-логіка;
* робота з DAO/ADO;
* автоматизація процесів локальних баз даних. !<syntaxhighlight lang="vb">
 age = 20

== Висновок ==

Dim wb As Workbook
 MsgBox "Операцію завершено"
Set wb = Workbooks.Open("C:\Reports\data.xlsx")

'''критично:''' після вимкнення ScreenUpdating, Calculation або Events потрібно обов’язково повернути конфігурація назад, навіть якщо сталася помилка. MsgBox lastRow
VBA здатна керувати іншими Office-застосунками через automation. Приклад:
 Worksheets("Data").Range("A2:Z1000").ClearContents
 MsgBox "Останній рядок: " & lastRow
VBA часто функціонує з бізнес-даними, фінансовими таблицями, персональними даними й email. Основні обєкти:

VBA-макроси можуть бути небезпечними, якщо файл отриманий із ненадійного джерела.</div>

Головна ніша VBA: Excel-автоматизація — це найпоширеніше й найпрактичніше сценарії використання Visual Basic for Applications. Application.ScreenUpdating = False Приклад:

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

Практична порада: якщо задача — лише очистити й об’єднати інформаційні дані, Power Query часто кращий за VBA. .Font.Size = 16 Sub InsertText()

Application.EnableEvents = True

Висновок: VBA зручний для автоматизації прямо всередині Office, а Python краще підходить для ширших, сучасніших і масштабніших сценаріїв.
== Для чого застосовується для VBA ==
 Next ws
== VBA і Office Scripts ==
MsgBox "Невідомий"

End Sub

ws.Range("A1").Value = "Дата"

End Sub

VBA здатна бути не найкращим вибором для:

Форматування здатна включати:

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

`Do While`:

Case "Blocked"
Макроси можна підписувати цифровим сертифікатом.
Увага: Variant варто використовувати обережно.

Sub FindLastRow()

End Sub

Set ws = ThisWorkbook.Worksheets("Data")
В Excel через VBA можна керувати:
</div>

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

</div>

== Процедури Sub ==

 Range("A1").Value = "Звіт"

 If age >= 18 Then
End Sub
Sub HelloWorld()

 Range("A1").Font.Bold = True
== VBA і Excel-формули ==

End Sub

 End Select
</div>
Можна використовувати:

 Dim mail As Object
</div>
 Dim wordApp As Object

 MsgBox data(1, 1)

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

Приклад:

Приклад:
У VBA виступає як інструменти налагодження. .Value = "Звіт"

</div>
Cells(2, 3).Value = "C2"
'''Практична роль:''' пошук останнього рядка потрібен для імпорту, додавання даних, перевірок і звітів. ' код обробки

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

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

'''Практична порада:''' для великих таблиць краще читати діапазон у масив, опрацьовувати в пам’яті й записувати назад одним блоком.<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">

* запуск шкідливого коду;
* видалення або зміна файлів;
* надсилання email;
* доступ до документів;
* виконання shell-команд;
* витік даних;
* підміна макросів;
* фішингові документи. Application.Workbooks("Report.xlsx").Worksheets("Data").Range("A1").Value = "Hello"

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

* повторюваних процедур;
* імпорту/експорту;
* складної логіки;
* роботи з файлами;
* автоматичного форматування;
* генерації звітів;
* дій, які формула не здатна виконати.<syntaxhighlight lang="vb">
== Option Explicit ==

Sheets("Data").Select Sub CreateWordDocument()

Практична роль: debugging у VBA особливо важливий, бо макроси часто працюють із реальними файлами й даними користувачів. * Документація Microsoft Office object model.

Практична порада: VBA варто обирати для задач, де основна робота вже відбувається в Microsoft Office і потрібна швидка локальна автоматизація процесів. VBA здатна відкривати, читати, створювати й зберігати файли.== Select Case ==

Не найкращий приклад:
UserForm використовують для:
== Обєктна модель Excel ==
== Функції Function ==
</div>
VBA підтримує умовні конструкції `If ... Variant зручний, але здатна приховувати помилки типів. Часто найкращий варіант  поєднання формул і макросів.<syntaxhighlight lang="vb">

'''Практична роль:''' Select Case робить код читабельнішим, якщо виступає як багато фіксованих варіантів.

Workbook

With

Range("A1").Select

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

value = Date

</syntaxhighlight>

Практична порада: краще розділяти код на зрозумілі модулі: імпорт, перевірка, форматування, звіти, допоміжні функції.

</syntaxhighlight>

Небезпека: макрос здатна дуже оперативно змінити або видалити багато даних, тому перед запуском важливих макросів потрібні перевірки й резервні копії. * файли з персональними даними;

  • email-розсилки;
  • збереження копій;
  • тимчасові файли;
  • логи;
  • доступ до мережевих папок;
  • паролі;
  • токени;
  • зовнішні підключення;
  • експорт у CSV/PDF;
  • випадкове надсилання не тому адресату. Якщо тип відомий, краще оголосити його явно.
    <div style="background:#fff4e5; border-left:6px solid #f39c12; padding:12px; margin:12px 0;">
    
     status = "Active"
    
    Sub ClearData()
    
    VBA часто використовують для імпорту або експорту CSV. Debug.Print "Last row: " & lastRow
    == Робота з масивами ==
    <div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
    
     Worksheets("Data").Range("A1").Value = "Готово"
    
    == Word VBA ==
    
    З явним аркушем:
    
    * простих обчислень;
    * прозорих розрахунків на аркуші;
    * швидкого аналізу;
    * роботи користувачів без коду.<div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
    Приклад:
    Для прискорення часто використовують:
    
    <syntaxhighlight lang="vb">
    
    Function AddNumbers(a As Double, b As Double) As Double
    
    * зібрати інформаційні дані з кількох Excel-файлів;
    * автоматизовано відформатувати звіт;
    * створити кнопки для запуску дій;
    * перевірити правильність заповнення таблиці;
    * сформувати Word-документ із даних Excel;
    * розіслати листи через Outlook;
    * імпортувати CSV;
    * очистити таблицю;
    * побудувати зведений звіт;
    * створити просту форму введення;
    * цифровізувати Access-базу;
    * згенерувати файли для клієнтів або підрозділів;
    * виконати повторювану офісну процедуру. End If
    як приклад, Excel здатна створити Word-документ:
    <div style="background:#e7f3ff; border-left:6px solid #2b7cff; padding:12px; margin:12px 0;">
    
    '''Суть об’єктної моделі:''' VBA керує Excel через об’єкти: застосунок, книга, аркуш, діапазон, комірка. mail.Body = "Добрий день. Функцію можна використовувати в іншому VBA-коді, а іноді й на аркуші Excel. * Microsoft Learn: Excel VBA reference. Його потрібно використовувати дуже обережно й локально. У Excel макрос здатна:
    Dim wb As Workbook
    
    Приклад:
    Приклад:
    </div>
    
    == Події ==
    
     Set doc = wordApp.Documents.Add
    

</syntaxhighlight>

VBA виступає як подієвою й процедурною мовою, яка функціонує всередині Office-документів і застосунків. mail.Display

<syntaxhighlight lang="vb">
Worksheets("Data").Range("A1").Value = "Hello"
value = "Text"

name = "Alice"

 MsgBox "Новий"

<div style="background:#ecfdf5; border-left:6px solid #10b981; padding:12px; margin:12px 0;">

* книгами;
* аркушами;
* діапазонами;
* комірками;
* таблицями;
* формулами;
* зведеними таблицями;
* графіками;
* фільтрами;
* форматуванням;
* файлами;
* подіями;
* кнопками;
* формами. '''Помилка:''' будувати критичну корпоративну систему лише на складних Excel-макросах без контролю версій, тестування, документації й резервного плану. End Sub
End Sub
== Worksheet ==

<syntaxhighlight lang="vb">

'''критично:''' у VBA потрібно уважно працювати з шляхами, правами доступу й відкритими файлами.</div>

</div>
VBA не замінює Excel-формули на 100%. For Each ws In ThisWorkbook.Worksheets
value = 10

</div>

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

Power Query підходить для:

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

Dim userName As String </syntaxhighlight>

Практична роль: Workbook застосовують, коли потрібно для роботи з цілим Excel-файлом. Головне правило: у VBA краще звертатися до об’єктів напряму, а не вибирати їх через `Select`. isActive = True Application.ScreenUpdating = True MsgBox "Операцію завершено"

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

Правило: макрос має працювати лише з тими даними, які потрібні для конкретної задачі, і не повинен непомітно копіювати або надсилати чутливу інформацію.
* цифровізувати Excel;
* оперативно зробити офісний макрос;
* обробити таблиці;
* сформувати звіт;
* працювати з Word/Outlook із Excel;
* цифровізувати локальний Office-процес;
* створити внутрішній інструмент для невеликої команди;
* скоротити ручні повторювані дії;
* працювати з legacy Office-файлами;
* підтримувати існуючі макроси. '''Практична користь:''' VBA здатна перетворити сирі інформаційні дані на готовий оформлений звіт. Worksheets.Add.Name = "NewReport"
'''Практична роль:''' цифровий підпис макросів важливий у корпоративному середовищі, де VBA застосовується для регулярно. Dim lastRow As Long
</div>
price = 19.99
== Робота з файлами ==
 Case Else
End If
 .Value = "Звіт продажів"
Function VAT(amount As Double, rate As Double) As Double

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

<div style="background:#fef2f2; border-left:6px solid #ef4444; padding:12px; margin:12px 0;">
<div style="background:#eafaf1; border-left:6px solid #2ecc71; padding:12px; margin:12px 0;">
<syntaxhighlight lang="vb">
== Outlook VBA ==
End Sub
</div>
Excel має ієрархічну обєктну модель.</div>

Option Explicit
 For Each ws In ThisWorkbook.Worksheets

Sub CheckStatus()

End Sub