VBA automaatika viga

See õpetus selgitab, mida VBA automaatika viga tähendab ja kuidas see ilmneb.

Excel koosneb objektidest - töövihiku objekt, töölehe objekt, vahemiku objekt ja lahtriobjekt, mida nimetada. Igal objektil on mitu atribuuti ja meetodit, mille käitumist saab kontrollida VBA -koodiga. Kui VBA -kood pole õigesti programmeeritud, võib tekkida automaatika viga. See on VBA üks masendavamaid vigu, kuna see võib sageli ilmse põhjuseta ilmuda, kui teie kood näeb välja täiesti korras!

(VBA vigade kohta lisateabe saamiseks vaadake meie vigade käsitlemise juhendit)

Viidates muutujale, mis pole enam aktiivne

Kui viidate muutuja kaudu töövihikule või töölehele, võib ilmneda automaatika tõrge, kuid muutuja pole enam aktiivne.

1234567891011 Sub TestAutomation ()Dim strFile kui stringDim wb Töövihikuna'avage fail ja määrake töövihiku muutujastrFile = Application.GetOpenFilenameMäära wb = Töövihikud. Ava (strFile)'Sulgege töövihikwb. Sule'proovige töövihikut aktiveeridawb. AktiveeriEnd Sub

Kui käivitame ülaltoodud koodi, kuvatakse automaatika tõrge. See on tingitud asjaolust, et oleme avanud töövihiku ja määranud sellele töövihikule muutuja. Seejärel oleme töövihiku sulgenud, kuid järgmisel koodireal proovime suletud töövihiku aktiveerida. See põhjustab vea, kuna muutuja pole enam aktiivne.

Kui tahame töövihiku aktiveerida, peame esmalt töövihiku avama!

Mälu ülekoormus

See tõrge võib mõnikord ilmneda ka siis, kui teil on silmus ja unustate silmuse käigus objekti kustutada. Kuid see võib juhtuda ainult mõnikord ja mitte teistel- see on üks põhjus, miks see viga võib olla nii tüütu.

Võtke näiteks see kood allpool:

1234567891011121314151617 Sub InsertPicture ()Dim i As täisarvDim shp kui objektI = 1 kuni 100Töölehtedega ("Sheet1")'määrake objekti muutujaMäära shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Lahtrid (i, "A"). Vasak, Ülaosa: =. Lahtrid ( i, "A"). Ülemine, laius: = 264, kõrgus: = 124)LõpetaKoos shp.Object.PictureSizeMode = 3'laadige pilt.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0LõpetaEdasi iEnd Sub

Muutuja deklareeritakse objektina ja seejärel SET märksõna kasutatakse objektile pildi määramiseks. Seejärel täidetakse objekt pildiga ja sisestatakse Exceli lehele, vormindades samal ajal. Seejärel lisame koodile silmuse, et lisada Exceli lehele 100 pilti. Mõnikord põhjustab see automatiseerimisviga, kuid mõnikord mitte - masendav, eks?

Selle probleemi lahenduseks on silmuse piires objekti muutuja tühjendamine, seades objekti väärtuseks MITTE MIDAGI - see vabastab mälu ja hoiab ära vea.

12345678910111213141516171819 Sub InsertPicture ()Dim i As täisarvDim shp kui objektI = 1 kuni 100Töölehtedega ("Sheet1")'määrake objekti muutujaMäära shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Lahtrid (i, "A"). Vasak, Ülaosa: =. Lahtrid ( i, "A"). Ülemine, laius: = 264, kõrgus: = 124)LõpetaKoos shp.Object.PictureSizeMode = 3'laadige pilt.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Lõpetatühjendage objekti muutujaMäära shp = mitte midagiEdasi iEnd Sub

DLL -i vead ja Windowsi värskendamine

Mõnikord ilmneb tõrge ja VBA -koodi raames ei saa midagi teha. Kasutatavate DLL-ide uuesti registreerimine, veendumaks, et meie Windows on ajakohane ja viimase abinõuna, käivitades registrikontrolli, mis on mõnikord ainus asi, mis selle vea kõrvaldamiseks võib toimida.

Hea viis selle vea vältimiseks on veenduda, et veapüüdurid on paigas, kasutades Vea korral minge edasi või vea korral Jätkake järgmisena rutiinid.

wave wave wave wave wave