VBA automatizálási hiba

Ez az oktatóanyag elmagyarázza, mit jelent a VBA automatizálási hiba, és hogyan fordul elő.

Az Excel objektumokból áll - a munkafüzet -objektum, a munkalap -objektum, a tartomány -objektum és a cellaobjektum, csak néhányat említhetünk. Minden objektum több tulajdonsággal és módszerrel rendelkezik, amelyek viselkedését VBA -kóddal lehet szabályozni. Ha a VBA kód nincs megfelelően programozva, akkor automatizálási hiba léphet fel. Ez az egyik legelkeserítőbb hiba a VBA -ban, mivel gyakran nyilvánvaló ok nélkül felbukkanhat, ha a kód tökéletesen néz ki!

(A VBA hibákkal kapcsolatos további információkért lásd a Hibakezelési útmutatót)

Hivatkozva egy már nem aktív változóra

Automatizálási hiba léphet fel, ha egy munkafüzetre vagy munkalapra hivatkozik egy változón keresztül, de a változó már nem aktív.

1234567891011 Sub TestAutomation ()Dim strFile karakterlánckéntDim wb Mint munkafüzet'Nyissa meg a fájlt, és állítsa be a munkafüzet változójátstrFile = Application.GetOpenFilenameWb = Munkafüzetek beállítása. Nyissa meg (strFile)'Zárja be a munkafüzetetwb. Bezár'próbálja aktiválni a munkafüzetetwb. AktiválásEnd Sub

Amikor futtatjuk a fenti kódot, automatizálási hibát kapunk. Ez annak köszönhető, hogy megnyitottunk egy munkafüzetet, és egy változót rendeltünk hozzá. Ezután bezártuk a munkafüzetet, de a következő kódsorban megpróbáljuk aktiválni a zárt munkafüzetet. Ez a hibát okozza, mivel a változó már nem aktív.

Ha aktiválni szeretnénk egy munkafüzetet, először nyitva kell tartanunk a munkafüzetet!

Memória túlterhelés

Ez a hiba néha akkor is előfordulhat, ha van ciklusa, és a ciklus során elfelejt egy objektumot törölni. Ez azonban csak néha fordulhat elő, máskor nem- ez az egyik oka annak, hogy ez a hiba annyira bosszantó lehet.

Vegyük például ezt az alábbi kódot:

1234567891011121314151617 Sub InsertPicture ()Dim i As IntegerDim shp objektumkéntI = 1 és 100 közöttMunkalapokkal ("Sheet1")'állítsa be az objektumváltozótSet shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = Hamis, Bal: =. Cella (i, "A"). Bal, Felső: =. Cella ( i, "A"). Felül, szélesség: = 264, magasság: = 124)Vége ezzelShp -vel.Object.PictureSizeMode = 3'töltsd be a képet.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Vége ezzelKövetkező iEnd Sub

A változót objektumként deklarálják, majd a KÉSZLET kulcsszó segítségével képet rendelhet az objektumhoz. Az objektumot ezután feltöltik egy képpel, és beillesztik az Excel -lapba, miközben néhány formázás egyszerre történik. Ezután hurkot adunk a kódhoz, hogy 100 képet illesszünk be az Excel -lapba. Időnként ez automatizálási hibát okoz, de néha nem - frusztráló, igaz?

A probléma megoldása az, hogy az objektumváltozót a cikluson belül töröljük az objektum beállításával SEMMI - ez felszabadítja a memóriát és megakadályozza a hibát.

12345678910111213141516171819 Sub InsertPicture ()Dim i As IntegerDim shp objektumkéntI = 1 és 100 közöttMunkalapokkal ("Sheet1")'állítsa be az objektumváltozótSet shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = Hamis, Bal: =. Cella (i, "A"). Bal, Felső: =. Cella ( i, "A"). Felül, szélesség: = 264, magasság: = 124)Vége ezzelShp -vel.Object.PictureSizeMode = 3'töltsd be a képet.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Vége ezzel'törölje az objektumváltozótSet shp = SemmiKövetkező iEnd Sub

DLL hibák és a Windows frissítése

Néha előfordul a hiba, és semmit sem lehet tenni a VBA -kódon belül. A használt DLL-ek újbóli regisztrálása, a Windows frissítése, és végső megoldásként a rendszerleíró adatbázis ellenőrzése, amely néha az egyetlen dolog, ami segíthet a hiba elhárításában.

A hiba elkerülésének jó módja annak biztosítása, hogy a hibacsapdák a helyükön vannak a Hiba esetén Ugrás ide vagy Hiba esetén Folytassa a következőt rutinok.

wave wave wave wave wave