VBA On Error Відновити далі або перейти до 0

У цьому підручнику буде пояснено VBA Про помилку, резюме Далі та Перейти до заяви.

Навіть якщо ваш код ідеально побудований, користувач може поступити не так, як ви очікували. З цієї причини вам потрібно вставити обробники помилок у свій код, коли може виникнути причина, що може статися помилка.

Увімкнути Помилка Відновити Далі

Оператор On Error Resume Next повідомляє VBA пропустити будь -які рядки коду, що містить помилки, і перейти до наступного рядка. VBA ігнорує рядок або рядки з помилкою у ньому та перейде до наступного рядка коду.

Це корисно, коли рядок коду, який можна ігнорувати, не є критичним для успішного виконання макросу, але може бути досить небезпечним при неправильному використанні, оскільки це може дати ненавмисні результати.

Наприклад, у процедурі нижче:

123456 Sub HideAllSheets ()Затемнити як робочий аркушДля кожного ws В ActiveWorkbook.Sheetsws.Visible = НеправдаНаступний wsEnd Sub

Якщо ми запустимо цей код, ми отримаємо помилку, оскільки ми не можемо приховати всі аркуші у книзі - принаймні одна книга повинна залишатися видимою.

Однак, якщо ми внесемо зміни до процедури, як показано нижче, код продовжить помилку помилки і залишить останній аркуш у книзі видимим.

1234567 Sub HideAllSheets ()Увімкнути Помилка Відновити ДаліЗатемнити як робочий аркушДля кожного ws В ActiveWorkbook.Sheetsws.Visible = НеправдаНаступний wsEnd Sub

Помилка Перейти до 0

Якщо у нашому коді немає обробника помилок, У разі помилки Перейдіть до 0 - це налаштування Excel за замовчуванням. Це в основному означає, що коли виникає помилка з Помилка Перейти до 0, VBA припинить виконання коду і відобразить стандартне вікно повідомлення про помилку, наприклад:

Якщо ми поставили пастку помилок, наприклад Увімкнути Помилка Відновити Далі у нашому коді, але тоді ми хочемо знову встановити помилку за замовчуванням, ми можемо вставити У разі помилки Перейдіть до 0 рядок у нашому коді.

12345678910 Sub ErrorGoTo0 ()Увімкнути Помилка Відновити ДаліЗатемнити як робочий аркушДля кожного ws В ActiveWorkbook.Sheetsws.Visible = НеправдаНаступний wsПомилка Перейти до 0'Запустіть тут додатковий код, наприклад:ActiveSheet.Name = "Аркуш 1"End Sub

Тепер, якщо в нашому коді мала бути якась помилка після У разі помилки Перейдіть до 0 лінія, з'явиться повідомлення про помилку за замовчуванням для Excel. У цьому прикладі ми вже маємо аркуш із назвою Sheet1 у книзі ActiveWorkbook як код над У разі помилки Перейдіть до 0 приховує аркуш, але не видаляє його. Після цього відобразиться повідомлення про помилку Excel за замовчуванням, яке вказує на те, що назва аркуша вже зайнята.

У разі помилки Перейти до Лінія

Ми також можемо змусити наш код перейти до іншого рядка коду за допомогою Про помилку Перейти Лінія який повідомляє VBA перейти до певного рядка коду, якщо сталася помилка.

123456789101112 Sub ErrorGoToLine ()Увімкнути Помилка Відновити ДаліЗатемнити як робочий аркушДля кожного ws В ActiveWorkbook.Sheetsws.Visible = НеправдаНаступний wsУвімкнено Помилка GoTo errhandlerActiveSheet.Name = "Аркуш 1"Вийти з підпerrhandler:MsgBox ("Існує вже аркуш з назвою sheet1!", VbCritical)End Sub

У наведеному вище прикладі, коли код знаходить аркуш «Sheet1», він переміщається до рядка коду під міткою обробника помилок - у цьому випадку він викликає спеціальне вікно повідомлення, яке інформує користувачів про те, що аркуш вже виходить. Після цього мітка обробника помилок повинна мати двокрапку, щоб показати VBA, що це мітка.

1 errhandler:

Потім код перейде до рядка під міткою і поверне спеціальне вікно повідомлення.

Це корисно, якщо ви не хочете, щоб ваш користувач міг натиснути кнопку Налагодження, щоб увійти у ваш код, оскільки стандартне повідомлення Excel завжди дає можливість налагодити код.

Нам також потрібен Вийти з підп в процедурі. Якщо є НІ аркуш під назвою Sheet1, тоді цей рядок коду буде запускатися і перейменувати активний аркуш у Sheet1. Тоді ми хочемо, щоб код закінчився - ми не хочемо, щоб він переносився на обробник помилок і показував вікно повідомлень. Потім рядок Exit Sub виходить із процедури та зупиняє код.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave