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.