Ovaj će vodič objasniti što znači greška VBA automatizacije i kako se javlja.
Excel se sastoji od objekata - objekt radne knjige, objekt radnog lista, objekt raspona i objekt ćelije da nazovemo samo nekoliko. Svaki objekt ima više svojstava i metoda čije se ponašanje može kontrolirati pomoću VBA koda. Ako VBA kôd nije pravilno programiran, može doći do pogreške u automatizaciji. To je jedna od frustrirajućih pogrešaka u VBA -i jer se često može pojaviti bez ikakvog razloga kada vaš kôd izgleda savršeno u redu!
(Za više informacija o VBA pogreškama pogledajte naš Vodič za rješavanje pogrešaka)
Pozivajući se na varijablu koja više nije aktivna
Greška u automatizaciji mogla bi se pojaviti kada se pozivate na radnu knjigu ili radni list putem varijable, ali varijabla više nije aktivna.
1234567891011 | Sub TestAutomation ()Dim strFile As StringDim wb Kao radna bilježnica'otvorite datoteku i postavite varijablu radne knjigestrFile = Application.GetOpenFilenamePostavi wb = Radne knjige.Otvori (strFile)»Zatvorite radnu knjižicuwb.Zatvori'pokušajte aktivirati radnu knjiguwb.AktivirajKraj podm |
Kada pokrenemo gornji kôd, dobit ćemo grešku u automatizaciji. To je zbog činjenice da smo otvorili radnu knjigu i toj radnoj knjizi dodijelili varijablu. Zatim smo zatvorili radnu knjigu, ali u sljedećem retku koda pokušavamo aktivirati zatvorenu radnu knjigu. To će uzrokovati pogrešku jer varijabla više nije aktivna.
Ako želimo aktivirati radnu knjigu, najprije je moramo otvoriti!
Preopterećenje memorije
Ova se pogreška ponekad može pojaviti i ako imate petlju i zaboravite očistiti objekt tijekom petlje. Međutim, to se može dogoditi samo ponekad, a ne i drugi- što je jedan od razloga zašto ova pogreška može biti toliko neugodna.
Uzmimo za primjer ovaj kôd u nastavku:
1234567891011121314151617 | Sub InsertPicture ()Dim i Kao cijeli brojPriguši shp kao objektZa i = 1 do 100S radnim listovima ("List 1")'postavite varijablu objektaPostavi shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Lijevo: =. Ćelije (i, "A"). Lijevo, Gore: =. Ćelije ( i, "A"). Vrh, širina: = 264, visina: = 124)Završi sSa shp.Object.PictureSizeMode = 3'učitaj sliku.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Završi sSljedeći iKraj podm |
Varijabla je deklarirana kao Object, a zatim SET ključna riječ se koristi za dodjeljivanje slike objektu. Objekt se zatim popunjava slikom i ubacuje u Excelov list s nekim oblikovanjem koje se odvija u isto vrijeme. Zatim kodu dodajemo petlju za umetanje 100 slika u Excel tablicu. Povremeno to uzrokuje pogrešku automatizacije, ali ponekad ne - frustrirajuće, zar ne?
Rješenje ovog problema je brisanje varijable objekta unutar petlje postavljanjem objekta na NIŠTA - ovo će osloboditi memoriju i spriječiti pogrešku.
12345678910111213141516171819 | Sub InsertPicture ()Dim i Kao cijeli brojPriguši shp kao objektZa i = 1 do 100S radnim listovima ("List 1")'postavite varijablu objektaPostavi shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Lijevo: =. Ćelije (i, "A"). Lijevo, Gore: =. Ćelije ( i, "A"). Vrh, širina: = 264, visina: = 124)Završi sSa shp.Object.PictureSizeMode = 3'učitaj sliku.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Završi s'obriši varijablu objektaPostavi shp = NištaSljedeći iKraj podm |
DLL pogreške i ažuriranje sustava Windows
Ponekad se dogodi pogreška i ništa se ne može učiniti unutar VBA koda. Ponovna registracija DLL-ova koji se koriste, pazeći da je naš Windows ažuriran i kao posljednje sredstvo, pokretanje Provjere registra kao ponekad jedino što može pomoći u uklanjanju ove pogreške.
Dobar način izbjegavanja ove pogreške je provjeriti jesu li zamke pogrešaka postavljene pomoću On Error Idi na ili On Error Nastavi dalje rutine.