Acest tutorial va explica ce înseamnă o eroare de automatizare VBA și cum se produce.
Excel este alcătuit din obiecte - obiectul Caiet de lucru, obiect Foaie de lucru, obiect Range și obiect Cell pentru a numi doar câteva. Fiecare obiect are mai multe proprietăți și metode al căror comportament poate fi controlat cu codul VBA. Dacă codul VBA nu este corect programat, atunci poate apărea o eroare de automatizare. Este una dintre cele mai frustrante erori din VBA, deoarece poate apărea adesea fără niciun motiv aparent atunci când codul dvs. arată perfect!
(Consultați Ghidul nostru de gestionare a erorilor pentru mai multe informații despre erorile VBA)
Referindu-se la o variabilă care nu mai este activă
O eroare de automatizare ar putea apărea atunci când vă referiți la un registru de lucru sau foaie de lucru prin intermediul unei variabile, dar variabila nu mai este activă.
1234567891011 | Sub TestAutomation ()Dim strFile As StringDim wb Ca registru de lucru'deschideți fișierul și setați variabila registrului de lucrustrFile = Application.GetOpenFilenameSet wb = Workbooks.Open (strFile)'Închideți registrul de lucruwb.Închide'încearcă să activezi registrul de lucruwb. ActivațiSfârșitul Sub |
Când vom rula codul de mai sus, vom primi o eroare de automatizare. Acest lucru se datorează faptului că am deschis un registru de lucru și i-am atribuit o variabilă acelui registru de lucru. Am închis apoi registrul de lucru, dar în următoarea linie de cod încercăm să activăm registrul de lucru închis. Acest lucru va cauza eroarea, deoarece variabila nu mai este activă.
Dacă vrem să activăm un registru de lucru, trebuie mai întâi să avem registrul de lucru deschis!
Supraîncărcare de memorie
Această eroare poate apărea uneori dacă aveți o buclă și uitați să ștergeți un obiect pe parcursul ciclului. Cu toate acestea, s-ar putea să apară doar uneori și nu altele - care este unul dintre motivele pentru care este această eroare poate fi atât de enervant.
Luați de exemplu acest cod de mai jos:
1234567891011121314151617 | Sub InsertPicture ()Dim i IntegerDim shp Ca obiectPentru i = 1 până la 100Cu foi de lucru („Sheet1”)'setează variabila obiectSetați shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, „A”). Sus, lățime: = 264, înălțime: = 124)Se termina cuCu shp.Object.PictureSizeMode = 3'încărcați poza.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Se termina cuApoi euSfârșitul Sub |
Variabila este declarată ca obiect și apoi A STABILIT cuvântul cheie este utilizat pentru a atribui o imagine obiectului. Obiectul este apoi populat cu o imagine și inserat în foaia Excel cu o anumită formatare care are loc în același timp. Apoi adăugăm o buclă la cod pentru a insera 100 de imagini în foaia Excel. Ocazional, acest lucru provoacă o eroare de automatizare, dar uneori nu - frustrant, nu?
Soluția la această problemă este de a șterge variabila obiect din buclă prin setarea obiectului la NIMIC - aceasta va elibera memoria și va preveni eroarea.
12345678910111213141516171819 | Sub InsertPicture ()Dim i IntegerDim shp Ca obiectPentru i = 1 până la 100Cu foi de lucru („Sheet1”)'setează variabila obiectSetați shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, „A”). Sus, lățime: = 264, înălțime: = 124)Se termina cuCu shp.Object.PictureSizeMode = 3'încărcați poza.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Se termina cu'șterge variabila obiectSetează shp = NimicApoi euSfârșitul Sub |
Erori DLL și actualizarea Windows
Uneori apare eroarea și nu se poate face nimic în codul VBA. Reînregistrați DLL-urile utilizate, asigurându-vă că Windows-ul nostru este actualizat și, în ultimă instanță, rulați o verificare a registrului ca uneori singurele lucruri care pot funcționa pentru a elimina această eroare.
O modalitate bună de a evita această eroare este să vă asigurați că există capcane de erori folosind La eroare Accesați sau la eroare Reîncepeți în continuare rutine.