Š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ė.