VBA automatikos klaida

Šioje pamokoje bus paaiškinta, ką reiškia VBA automatikos klaida ir kaip ji atsiranda.

„Excel“ sudaro objektai - darbaknygės objektas, darbalapio objektas, diapazono objektas ir langelio objektas. Kiekvienas objektas turi keletą savybių ir metodų, kurių elgesį galima valdyti naudojant VBA kodą. Jei VBA kodas nėra tinkamai užprogramuotas, gali atsirasti automatizavimo klaida. Tai viena iš labiausiai varginančių klaidų VBA, nes ji dažnai gali pasirodyti be jokios akivaizdžios priežasties, kai jūsų kodas atrodo puikiai!

(Daugiau informacijos apie VBA klaidas rasite mūsų klaidų tvarkymo vadove)

Kalbant apie kintamąjį, kuris nebebus aktyvus

Automatinė klaida gali atsirasti, kai nurodote darbaknygę ar darbalapį per kintamąjį, tačiau kintamasis nebeaktyvus.

1234567891011 Sub TestAutomation ()Dim strFile As StringDim wb Kaip darbo knyga“atidarykite failą ir nustatykite darbaknygės kintamąjįstrFile = Application.GetOpenFilenameNustatyti wb = Darbaknygės. Atidaryti (strFile)'Uždarykite darbo knygąwb. Uždaryti'pabandykite suaktyvinti darbaknygęwb. AktyvintiPabaiga Sub

Kai paleisime aukščiau esantį kodą, gausime automatizavimo klaidą. Taip yra dėl to, kad atidarėme darbo knygą ir priskyrėme kintamąjį tai. Tada uždarėme darbaknygę, tačiau kitoje kodo eilutėje bandome suaktyvinti uždarytą darbaknygę. Tai sukels klaidą, nes kintamasis nebeaktyvus.

Jei norime suaktyvinti darbaknygę, pirmiausia turime ją atidaryti!

Atminties perkrova

Ši klaida taip pat kartais gali atsirasti, jei turite kilpą ir ciklo metu pamiršote išvalyti objektą. Tačiau tai gali atsitikti tik kartais, o ne kituose- tai yra viena iš priežasčių, kodėl ši klaida gali būti tokia erzinanti.

Paimkite, pavyzdžiui, šį kodą žemiau:

1234567891011121314151617 Sub InsertPicture ()Dim i As IntegerDim shp kaip objektasJei i = nuo 1 iki 100Su darbalapiais („Sheet1“)“nustatykite objekto kintamąjįNustatykite shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Ląstelės (i, "A"). Kairė, viršuje: =. Ląstelės ( i, "A"). Viršuje, plotis: = 264, aukštis: = 124)Pabaiga suSu shp.Object.PictureSizeMode = 3'įkelk paveikslėlį.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Pabaiga suKitas I.Pabaiga Sub

Kintamasis deklaruojamas kaip objektas, o tada SET raktinis žodis naudojamas objektui priskirti vaizdą. Tada objektas užpildomas vaizdu ir įterpiamas į „Excel“ lapą, kai tuo pačiu metu atliekamas formatavimas. Tada prie kodo pridedame kilpą, kad į „Excel“ lapą įterptume 100 vaizdų. Kartais tai sukelia automatizavimo klaidą, bet kartais ne - nusivylimą, tiesa?

Šios problemos sprendimas yra išvalyti objekto kintamąjį cikle, nustatant objektą į NIEKO - tai atlaisvins atmintį ir užkirs kelią klaidai.

12345678910111213141516171819 Sub InsertPicture ()Dim i As IntegerDim shp kaip objektasJei i = nuo 1 iki 100Su darbalapiais („Sheet1“)“nustatykite objekto kintamąjįNustatykite shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Ląstelės (i, "A"). Kairė, viršuje: =. Ląstelės ( i, "A"). Viršuje, plotis: = 264, aukštis: = 124)Pabaiga suSu shp.Object.PictureSizeMode = 3'įkelk paveikslėlį.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Pabaiga su“išvalykite objekto kintamąjįNustatyti shp = niekoKitas I.Pabaiga Sub

DLL klaidos ir „Windows“ atnaujinimas

Kartais klaida įvyksta ir nieko negalima padaryti per VBA kodą. Iš naujo užregistruokite naudojamus DLL, įsitikinkite, kad mūsų „Windows“ yra atnaujinta ir kaip paskutinė išeitis, paleiskite registro tikrinimą, kartais tai vienintelis dalykas, kuris gali padėti pašalinti šią klaidą.

Geras būdas išvengti šios klaidos yra įsitikinti, kad klaidų spąstai yra vietoje naudojant Dėl klaidos Eikite į arba Į klaidą tęskite toliau kasdienybė.

wave wave wave wave wave