Грешка при автоматизация на VBA

Този урок ще обясни какво означава грешка при автоматизация на VBA и как се появява.

Excel се състои от обекти - обект на работна книга, обект на работен лист, обект Range и обект на клетка, за да назовем само няколко. Всеки обект има множество свойства и методи, чието поведение може да се контролира с 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 As IntegerDim 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

Променливата се декларира като обект и след това КОМПЛЕКТ ключовата дума се използва за присвояване на изображение на обекта. След това обектът се попълва с изображение и се вмъква в листа на Excel, като едновременно се извършва известно форматиране. След това добавяме цикъл към кода, за да вмъкнем 100 изображения в листа на Excel. Понякога това причинява грешка в автоматизацията, но понякога не - разочароващо, нали?

Решението на този проблем е да изчистите променливата на обекта в цикъла, като зададете обекта на НИЩО - това ще освободи паметта и ще предотврати грешката.

12345678910111213141516171819 Sub InsertPicture ()Dim i As IntegerDim 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 файловете, които се използват, като се уверите, че нашият Windows е актуален и в краен случай, стартирайте проверка на системния регистър като понякога единствените неща, които могат да работят за изчистване на тази грешка.

Добър начин да избегнете тази грешка е да се уверите, че капаните за грешки са на място с помощта на При грешка Отидете до или Включване на грешка След това продължете съчетания.

wave wave wave wave wave