Tento tutoriál vysvětlí, co znamená chyba automatizace VBA a jak k ní dochází.
Excel se skládá z objektů - objekt sešitu, objekt sešitu, objekt rozsahu a objekt buňky, abychom jmenovali jen několik. Každý objekt má více vlastností a metod, jejichž chování lze ovládat pomocí kódu VBA. Pokud není kód VBA správně naprogramován, může dojít k chybě automatizace. Je to jedna z více frustrujících chyb ve VBA, protože se často může objevit bez zjevného důvodu, když váš kód vypadá naprosto v pořádku!
(Další informace o chybách VBA najdete v naší příručce pro zpracování chyb)
Odkaz na proměnnou, která již není aktivní
Pokud odkazujete na sešit nebo list prostřednictvím proměnné, může dojít k chybě automatizace, ale proměnná již není aktivní.
1234567891011 | Dílčí test automatizace ()Dim strFile jako řetězecDim wb jako sešit'otevřete soubor a nastavte proměnnou sešitustrFile = Application.GetOpenFilenameNastavit wb = Workbooks.Open (strFile)„Zavřete sešitwb. Zavřít'zkuste sešit aktivovatwb. AktivovatEnd Sub |
Když spustíme výše uvedený kód, dostaneme chybu automatizace. Důvodem je skutečnost, že jsme otevřeli sešit a přiřadili tomuto sešitu proměnnou. Potom jsme sešit zavřeli, ale v dalším řádku kódu se pokusíme aktivovat zavřený sešit. To způsobí chybu, protože proměnná již není aktivní.
Pokud chceme sešit aktivovat, musíme nejprve mít sešit otevřený!
Přetížení paměti
K této chybě může také někdy dojít, pokud máte smyčku a v průběhu smyčky zapomenete vymazat objekt. Může se to však stát jen někdy, a ne jiné- což je jeden z důvodů, proč může být tato chyba tak nepříjemná.
Vezměte si například tento kód níže:
1234567891011121314151617 | Dílčí vložený obrázek ()Dim i As IntegerDim shp jako objektPro i = 1 až 100S pracovními listy („List1“)'nastavte proměnnou objektuNastavit shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, „A“). Nahoře, šířka: = 264, výška: = 124)Konec sS shp.Object.PictureSizeMode = 3'načtěte obrázek.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Konec sPříště jáEnd Sub |
Proměnná je deklarována jako Object a poté SOUBOR klíčové slovo slouží k přiřazení obrázku objektu. Objekt je poté naplněn obrázkem a vložen do listu aplikace Excel, přičemž současně probíhá nějaké formátování. Do kódu pak přidáme smyčku pro vložení 100 obrázků do listu Excelu. Občas to způsobí chybu automatizace, ale někdy ne - frustrující, že?
Řešením tohoto problému je vymazat proměnnou objektu ve smyčce nastavením objektu na NIC - tím se uvolní paměť a zabrání se chybě.
12345678910111213141516171819 | Dílčí vložený obrázek ()Dim i As IntegerDim shp jako objektPro i = 1 až 100S pracovními listy („List1“)'nastavte proměnnou objektuNastavit shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, „A“). Nahoře, šířka: = 264, výška: = 124)Konec sS shp.Object.PictureSizeMode = 3'načtěte obrázek.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Konec s'vymazat proměnnou objektuNastavit shp = NicPříště jáEnd Sub |
Chyby DLL a aktualizace systému Windows
Někdy dojde k chybě a v kódu VBA nelze nic dělat. Přeregistrování používaných knihoven DLL, zajištění toho, aby náš systém Windows byl aktuální a jako poslední možnost, spuštění kontroly registru jako někdy jediné věci, které mohou fungovat k odstranění této chyby.
Dobrým způsobem, jak se této chybě vyhnout, je zajistit, aby byly pomocí nástroje Při chybě Přejít na nebo Při chybě Pokračovat Další rutiny.