Коротко, якщо нема часу
- Форма читає довідники зі смарт-таблиць
- Перевіряє дані до запуску, а не після
- Пише результат одним масивом — швидко
Відкрий редактор (Alt+F11
) і додай нову форму. Дані беремо зі смарт-таблиціДіапазон з іменем, що сам розширюється. Детальніше →
, а не з діапазону A1:D500 — так макрос не зламається, коли рядків стане більше.1
✶
ПорадаДай кнопкам на формі гарячі клавіші через властивість Accelerator.
i
НотаткаКод працює з Excel 2016 і новішими.
!
УвагаПеред тестом зроби копію файлу — макроси не мають «Скасувати».
✕
НебезпекаНе тестуй на робочих даних з персональною інформацією.
Привид кажеЯкщо форма відкривається довше секунди — ти щось читаєш поклітинно. Перепиши на масив.
Крок 2. Перевірка на вході
Перевір, що аркуш існує
Інакше — повідомлення й вихід, без падіння.
Перевір стовпці смарт-таблиці
Назви — з аркуша «Налаштування», не з коду.
Лише тоді — основна логіка
Private Sub StartButton_Click()
' 1.0 Перевірка на вході
If Not IsSheetExists(name_SourceSheet) Then Exit Sub
Set sourceTable = Application.Range(name_SourceTable).ListObject
End Sub
✕ Так не треба
Cells(i, 2).Value = … — поклітинно в циклі, повільно✓ Так краще
targetRange.Value = dataArray — одним масивом, миттєвоЯк вибрати спосіб
| Спосіб | 10 тис. рядків | Коли брати |
|---|---|---|
| Поклітинно | [N] с | ніколи |
| Масивом | [N] с | майже завжди |
| Power Query | [N] с | регулярний імпорт |
Найкращий макрос — той, після якого колега не дзвонить із питанням «а що тут натиснути».
Перед тим як віддати форму колегам
Виконано: Усі довідники — на аркуші «Налаштування»
Виконано: Помилки показуються зрозумілою мовою
Не виконано: Перевірено на копії з реальним обсягом даних
Не виконано: Файл збережено як .xlsm і розблоковано
Чому не просто формула?
Формула порахує, але не перевірить вхідні дані, не покаже прогрес і не збере документи у Word.
Код для Excel.
Код для Word.
Нова функція З v1.2 і платформа Windows.
Файл до статті: форма-звірка.xlsm · без персональних даних-
Детальніше про смарт-таблиці — у частині 2 циклу. ↩
Стаття допомогла?
Дякую! Буу.