Chyba automatizace VBA

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.

wave wave wave wave wave