Ta vadnica bo razložila, kaj pomeni napaka pri avtomatizaciji VBA in kako se pojavi.
Excel je sestavljen iz predmetov - predmet delovnega zvezka, predmet delovnega lista, predmet obseg in predmet celice, če jih poimenujemo. Vsak predmet ima več lastnosti in metod, katerih vedenje je mogoče nadzorovati s kodo VBA. Če koda VBA ni pravilno programirana, lahko pride do napake pri avtomatizaciji. To je ena bolj frustrirajočih napak v VBA, saj se lahko pogosto pojavi brez očitnega razloga, ko je vaša koda videti popolnoma v redu!
(Za več informacij o napakah VBA glejte naš vodnik za obravnavo napak)
Sklicuje se na spremenljivko, ki ni več aktivna
Napaka pri avtomatizaciji se lahko pojavi, ko se prek spremenljivke sklicujete na delovni zvezek ali delovni list, vendar spremenljivka ni več aktivna.
1234567891011 | Sub TestAutomation ()Zatemni strFile As StringDim wb Kot delovni zvezek'odprite datoteko in nastavite spremenljivko delovnega zvezkastrFile = Application.GetOpenFilenameSet wb = Delovni zvezki. Odpri (strFile)'Zaprite delovni zvezekwb.Zapri'poskusite aktivirati delovni zvezekwb.AktivirajEnd Sub |
Ko zaženemo zgornjo kodo, bomo dobili napako pri avtomatizaciji. To je posledica dejstva, da smo odprli delovni zvezek in temu delovnemu zvezku dodelili spremenljivko. Delovni zvezek smo nato zaprli, vendar v naslednji vrstici kode poskušamo aktivirati zaprti delovni zvezek. To bo povzročilo napako, ker spremenljivka ni več aktivna.
Če želimo aktivirati delovni zvezek, ga moramo najprej odpreti!
Preobremenitev pomnilnika
Do te napake lahko včasih pride tudi, če imate zanko in med zanko pozabite počistiti predmet. Vendar pa se lahko pojavi le včasih, ne pa tudi drugi- to je eden od razlogov, zakaj je ta napaka lahko tako moteča.
Vzemite za primer spodnjo kodo:
1234567891011121314151617 | Sub InsertPicture ()Dim i kot celo številoZatemni shp kot objektZa i = 1 do 100Z delovnimi listi ("List1")'nastavite spremenljivko objektaNastavite shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Levo: =. Celice (i, "A"). Levo, Top: =. Celice ( i, "A"). Vrh, širina: = 264, višina: = 124)Končaj sS shp.Object.PictureSizeMode = 3'naložite sliko.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Končaj sNaprej iEnd Sub |
Spremenljivka je deklarirana kot objekt, nato pa SET ključna beseda se uporablja za dodelitev slike predmetu. Predmet se nato napolni s sliko in vstavi v Excelov list z nekaj oblikovanjem, ki poteka hkrati. Kodi nato dodamo zanko za vstavljanje 100 slik v Excelov list. Občasno to povzroči napako pri avtomatizaciji, včasih pa ne - frustrirajuće, kajne?
Rešitev tega problema je, da počistite spremenljivko objekta v zanki tako, da objekt nastavite na NIČ - to bo sprostilo pomnilnik in preprečilo napako.
12345678910111213141516171819 | Sub InsertPicture ()Dim i kot celo številoZatemni shp kot objektZa i = 1 do 100Z delovnimi listi ("List1")'nastavite spremenljivko objektaNastavite shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Levo: =. Celice (i, "A"). Levo, Top: =. Celice ( i, "A"). Vrh, širina: = 264, višina: = 124)Končaj sS shp.Object.PictureSizeMode = 3'naložite sliko.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Končaj s'počisti spremenljivko objektaNastavi shp = NičNaprej iEnd Sub |
Napake DLL in posodobitev sistema Windows
Včasih pride do napake in v kodi VBA ni mogoče storiti ničesar. Ponovna registracija DLL-jev, ki se uporabljajo, in zagotovitev, da je naš sistem Windows posodobljen in kot zadnjo možnost, zagon preverjanja registra, ki je včasih edino, kar lahko odpravi to napako.
Dober način, da se izognete tej napaki, je, da z uporabo datoteke Pri napaki Pojdi na ali Vklopi Napaka Nadaljuj Naprej rutine.