Pogreška automatizacije VBA

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.

wave wave wave wave wave