Ви можете зіткнутися з деякими проблемами з кодом VBA, але як знайти проблему? Іноді ваш код VBA може потребувати налагодження. Продовжуйте читати, щоб дізнатися про чотири найпоширеніші методи налагодження коду Excel VBA:
-
Перевірка коду
-
Вставлення функцій MsgBox у різні місця вашого коду
-
Вставлення операторів Debug.Print
-
Використання вбудованих засобів налагодження Excel
Перевірка вашого коду
Можливо, найпростіший метод налагодження – це просто уважно розглянути ваш код, щоб побачити, чи можна знайти проблему. Цей метод, звичайно, вимагає знань і досвіду. Іншими словами, ви повинні знати, що ви робите. Якщо вам пощастить, помилка відразу вискочить, і ви б'єте по чолу і кажете: «Д'ой!» Коли біль у лобі зменшиться, ви можете вирішити проблему.
Зверніть увагу на використання слів «Якщо пощастить». Це тому, що часто ви виявляєте помилки, коли працюєте над своєю програмою вісім годин поспіль, це 2 години ночі, і ви працюєте на кофеїні та силі волі. У такі моменти вам пощастить, якщо ви навіть можете побачити свій код, не кажучи вже про помилки. Тому не дивуйтеся, якщо простого вивчення вашого коду недостатньо, щоб змусити вас знайти та видалити всі помилки, які він містить.
Використання функції MsgBox
Поширена проблема в багатьох програмах полягає в тому, що одна або кілька змінних не набувають очікуваних значень. У таких випадках моніторинг змінних під час виконання коду є корисним методом налагодження. Один із способів зробити це – вставити тимчасові функції MsgBox у вашу рутину. Наприклад, якщо у вас є змінна з назвою CellCount, ви можете вставити такий оператор:
MsgBox CellCount
Коли ви виконуєте процедуру, функція MsgBox відображає значення CellCount.
Часто корисно відображати значення двох або більше змінних у вікні повідомлення. Наступний оператор відображає поточне значення двох змінних: LoopIndex (1) і CellCount (72), розділені пробілом.
MsgBox LoopIndex & “ “ & CellCount
Зверніть увагу, що дві змінні об’єднані оператором конкатенації (&) і вставте між ними пробіл. В іншому випадку вікно повідомлення об’єднує два значення разом, завдяки чому вони виглядають як одне значення. Ви також можете використовувати вбудовану константу vbNewLine замість пробілу. vbNewLine вставляє розрив переведення рядка, який відображає текст на новому рядку. Наступний оператор відображає три змінні, кожна в окремому рядку:
Використання вікна повідомлення для відображення значення трьох змінних.
MsgBox LoopIndex & vbNewLine & CellCount & vbNewLine & MyVal
Ця техніка не обмежується моніторингом змінних. Ви можете використовувати вікно повідомлень для відображення різної корисної інформації під час виконання коду. Наприклад, якщо ваш код перебирає серію аркушів, наступний оператор відображає назву та тип активного аркуша:
MsgBox ActiveSheet.Name & “ “ & TypeName (ActiveSheet)
Якщо у вікні повідомлення відображається щось несподіване, натисніть Ctrl+Break, і ви побачите діалогове вікно, яке повідомляє, що виконання коду перервано, у вас є чотири варіанти:
-
Натисніть кнопку Продовжити. Код продовжує виконуватися.
-
Натисніть кнопку Завершити. Виконання припиняється.
-
Натисніть кнопку Налагодити. VBE переходить у режим налагодження.
-
Натисніть кнопку Довідка. Екран довідки повідомляє, що ви натиснули Ctrl+Break. Іншими словами, це не дуже корисно.
Натискання Ctrl+Break зупиняє виконання вашого коду та дає вам можливість вибору.
Якщо на вашій клавіатурі немає клавіші Break, спробуйте натиснути Ctrl+ScrollLock.
Не соромтеся часто використовувати функції MsgBox під час налагодження коду. Просто переконайтеся, що ви видалили їх після виявлення та усунення проблеми.
Вставлення операторів Debug.Print
Як альтернативу використанню функцій MsgBox у вашому коді, ви можете вставити один або кілька тимчасових операторів Debug.Print. Використовуйте ці оператори, щоб надрукувати значення однієї або кількох змінних у вікні «Негайне». Ось приклад, який відображає значення трьох змінних:
Debug.Print LoopIndex, CellCount, MyVal
Зверніть увагу, що змінні розділяються комами. За допомогою одного оператора Debug.Print можна відображати скільки завгодно змінних.
Debug.Print надсилає вихід у вікно Immediate, навіть якщо це вікно приховане. Якщо вікно VBE «Негайне» не відображається, натисніть Ctrl+G (або виберіть «Перегляд» → «Негайне вікно»). Ось деякі результати у вікні "Негайне".
Оператор Debug.Print надсилає вихід у вікно Immediate.
На відміну від MsgBox, оператори Debug.Print не зупиняють ваш код. Тож вам потрібно стежити за вікном Immediate, щоб побачити, що відбувається.
Після налагодження коду обов’язково видаліть усі оператори Debug.Print. Навіть великі компанії, такі як Microsoft, іноді забувають видалити свої заяви Debug.Print. У кількох попередніх версіях Excel щоразу, коли відкривався надбудова Analysis ToolPak, у вікні «Негайне» ви бачили кілька дивних повідомлень. Цю проблему нарешті було вирішено в Excel 2007.
Використання налагоджувача VBA
Дизайнери Excel добре знайомі з концепцією помилок. Отже, Excel включає в себе набір інструментів для налагодження, які можуть допомогти вам усунути проблеми в коді VBA.