VBA automatizācijas kļūda

Šī apmācība izskaidros, ko nozīmē VBA automatizācijas kļūda un kā tā rodas.

Programmu Excel veido objekti - darbgrāmatas objekts, darblapas objekts, diapazona objekts un šūnas objekts. Katram objektam ir vairāki rekvizīti un metodes, kuru uzvedību var kontrolēt ar VBA kodu. Ja VBA kods nav pareizi ieprogrammēts, var rasties automatizācijas kļūda. Tā ir viena no visvairāk nomāktajām kļūdām VBA, jo tā bieži var parādīties bez redzama iemesla, kad jūsu kods izskatās pilnīgi labi!

(Plašāku informāciju par VBA kļūdām skatiet mūsu kļūdu apstrādes rokasgrāmatā)

Atsaucoties uz mainīgo, kas vairs nav aktīvs

Automātikas kļūda var rasties, atsaucoties uz darbgrāmatu vai darblapu, izmantojot mainīgo, taču mainīgais vairs nav aktīvs.

1234567891011 Sub TestAutomation ()Dim strFile kā virkneDim wb kā darbgrāmata'atveriet failu un iestatiet darbgrāmatas mainīgostrFile = Application.GetOpenFilenameIestatīt wb = darbgrāmatas. Atvērt (strFile)'Aizveriet darbgrāmatuwb. Aizvērt'mēģiniet aktivizēt darbgrāmatuwb. AktivizētBeigu apakš

Izpildot iepriekš minēto kodu, mēs saņemsim automatizācijas kļūdu. Tas ir saistīts ar faktu, ka esam atvēruši darbgrāmatu un šai darbgrāmatai piešķīruši mainīgo. Pēc tam esam aizvēruši darbgrāmatu, bet nākamajā koda rindā mēģinām aktivizēt slēgto darbgrāmatu. Tas radīs kļūdu, jo mainīgais vairs nav aktīvs.

Ja mēs vēlamies aktivizēt darbgrāmatu, mums vispirms ir jāatver darbgrāmata!

Atmiņas pārslodze

Šī kļūda dažreiz var rasties arī tad, ja jums ir cilpa un cikla laikā aizmirstat notīrīt objektu. Tomēr tas var notikt tikai dažreiz, nevis citos gadījumos- tas ir viens no iemesliem, kāpēc šī kļūda var būt tik kaitinoša.

Ņemiet, piemēram, šo kodu zemāk:

1234567891011121314151617 Sub InsertPicture ()Dim i As IntegerDim shp kā objektsJa i = 1 līdz 100Ar darblapām ("Sheet1")'iestatiet objekta mainīgoIestatiet shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Šūnas (i, "A"). Pa kreisi, Augšā: =. Šūnas ( i, "A"). Augšā, platumā: = 264, augstumā: = 124)Beigt arAr shp.Object.PictureSizeMode = 3'ielādējiet attēlu.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Beigt arTālāk iBeigu apakš

Mainīgais tiek deklarēts kā objekts, un pēc tam SET atslēgvārdu izmanto, lai objektam piešķirtu attēlu. Pēc tam objekts tiek aizpildīts ar attēlu un ievietots Excel lapā, vienlaikus veicot kādu formatējumu. Pēc tam kodam pievienojam cilpu, lai Excel lapā ievietotu 100 attēlus. Reizēm tas izraisa automatizācijas kļūdu, bet dažreiz tā nenotiek - nomākta, vai ne?

Šīs problēmas risinājums ir notīrīt objekta mainīgo cilpā, iestatot objektu uz NEKAS - tas atbrīvos atmiņu un novērsīs kļūdu.

12345678910111213141516171819 Sub InsertPicture ()Dim i As IntegerDim shp kā objektsJa i = 1 līdz 100Ar darblapām ("Sheet1")'iestatiet objekta mainīgoIestatiet shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Šūnas (i, "A"). Pa kreisi, Augšā: =. Šūnas ( i, "A"). Augšā, platumā: = 264, augstumā: = 124)Beigt arAr shp.Object.PictureSizeMode = 3'ielādējiet attēlu.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Beigt ar'notīriet objekta mainīgoSet shp = NekasTālāk iBeigu apakš

DLL kļūdas un Windows atjaunināšana

Dažreiz rodas kļūda, un VBA koda ietvaros neko nevar izdarīt. Pārreģistrējot izmantotos DLL, pārliecinoties, ka mūsu Windows ir atjaunināta un kā pēdējais līdzeklis, palaižot reģistra pārbaudi, kas dažkārt ir vienīgā lieta, kas var palīdzēt novērst šo kļūdu.

Labs veids, kā izvairīties no šīs kļūdas, ir pārliecināties, ka kļūdu slazdi ir ievietoti, izmantojot Kļūdas gadījumā dodieties uz vai pēc kļūdas atsākt rutīnas.

wave wave wave wave wave