Помилка автоматизації VBA

У цьому посібнику буде пояснено, що означає помилка автоматизації VBA та як вона виникає.

Excel складається з об’єктів - об’єкта Робоча книга, Об’єкт аркуша, Об’єкт Діапазон та Об’єкт Клітина, щоб назвати лише декілька. Кожен об'єкт має кілька властивостей і методів, поведінкою яких можна керувати за допомогою коду VBA. Якщо код VBA неправильно запрограмований, може статися помилка автоматизації. Це одна з найнеприємніших помилок у VBA, оскільки вона часто може з’являтися без видимих ​​причин, коли ваш код виглядає ідеально!

(Докладніше про помилки VBA див. У нашому Посібнику з обробки помилок)

Звертаючись до змінної, яка більше не активна

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

1234567891011 Sub TestAutomation ()Dim strFile As StringDim wb Як робочий зошит'відкрити файл і встановити змінну книгиstrFile = Application.GetOpenFilenameВстановити wb = Робочі книги. Відкрити (strFile)'Закрийте робочу книжкуwb.Закрити'спробуйте активувати книгуwb.АктивуватиEnd Sub

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

Якщо ми хочемо активувати книгу, нам спочатку потрібно відкрити книгу!

Перевантаження пам’яті

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

Візьмемо, наприклад, цей код нижче:

1234567891011121314151617 Sub InsertPicture ()Dim i як ціле числоDim shp як об'єктДля i = 1 до 100З аркушами ("Аркуш1")'встановити змінну об'єктаВстановіть shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Вгорі, ширина: = 264, висота: = 124)Закінчити зЗ шп.Object.PictureSizeMode = 3'завантажити зображення.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Закінчити зДалі iEnd Sub

Змінна оголошується як Object, а потім SET ключове слово використовується для призначення зображення об'єкту. Після цього об’єкт заповнюється зображенням і вставляється в аркуш Excel із деяким форматуванням, що відбувається одночасно. Потім ми додаємо цикл до коду, щоб вставити 100 зображень у аркуш Excel. Іноді це викликає помилку автоматизації, але іноді це не викликає розчарування, чи не так?

Вирішенням цієї проблеми є очищення змінної об’єкта в циклі, встановивши для об’єкта значення НІЧОГО - це звільнить пам’ять і запобіжить помилку.

12345678910111213141516171819 Sub InsertPicture ()Dim i як ціле числоDim shp як об'єктДля i = 1 до 100З аркушами ("Аркуш1")'встановити змінну об'єктаВстановіть shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Вгорі, ширина: = 264, висота: = 124)Закінчити зЗ шп.Object.PictureSizeMode = 3'завантажити зображення.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Закінчити з'очистити змінну об'єктаВстановити shp = НічогоДалі iEnd Sub

Помилки DLL та оновлення Windows

Іноді виникає помилка, і в коді VBA нічого не можна зробити. Повторна реєстрація використовуваних бібліотек DLL, переконання, що наша ОС оновлена, і в крайньому випадку, запуск перевірки реєстру, як єдиного, що може спрацювати, щоб усунути цю помилку.

Хороший спосіб уникнути цієї помилки - переконатися, що пастки помилок створені за допомогою У разі помилки Перейти до або Увімкнути помилку Відновити далі підпрограми.

wave wave wave wave wave