Tässä opetusohjelmassa selitetään, mitä VBA -automaatiovirhe tarkoittaa ja miten se ilmenee.
Excel koostuu objekteista - työkirjaobjekti, laskentataulukko -objekti, alue -objekti ja soluobjekti. Jokaisella objektilla on useita ominaisuuksia ja menetelmiä, joiden käyttäytymistä voidaan ohjata VBA -koodilla. Jos VBA -koodi ei ole oikein ohjelmoitu, voi tapahtua automaatiovirhe. Se on yksi turhauttavimmista virheistä VBA: ssa, koska se voi usein ilmaantua ilman ilmeistä syytä, kun koodisi näyttää täydelliseltä!
(Katso virheidenkäsittelyoppaastamme lisätietoja VBA -virheistä)
Viitaten muuttujaan, joka ei ole enää aktiivinen
Automaatiovirhe voi ilmetä, kun viittaat työkirjaan tai laskentataulukkoon muuttujan kautta, mutta muuttuja ei ole enää aktiivinen.
1234567891011 | Sub TestAutomation ()Dim strFile merkkijononaDim wb Työkirjana'Avaa tiedosto ja aseta työkirjan muuttujastrFile = Application.GetOpenFilenameAseta wb = Työkirjat. Avaa (strFile)'Sulje työkirjawb.Sulje'yritä aktivoida työkirjawb. aktivoiEnd Sub |
Kun suoritamme yllä olevan koodin, saamme automaatiovirheen. Tämä johtuu siitä, että olemme avanneet työkirjan ja määrittäneet muuttujan kyseiselle työkirjalle. Olemme sitten sulkeneet työkirjan, mutta yritämme aktivoida suljetun työkirjan seuraavalla koodirivillä. Tämä aiheuttaa virheen, koska muuttuja ei ole enää aktiivinen.
Jos haluamme aktivoida työkirjan, meidän on ensin avattava työkirja!
Muistin ylikuormitus
Tämä virhe voi myös joskus ilmetä, jos sinulla on silmukka ja unohdat tyhjentää objektin silmukan aikana. Se voi kuitenkin tapahtua vain joskus, ei muilla- mikä on yksi syy siihen, miksi tämä virhe voi olla niin ärsyttävää.
Otetaan esimerkiksi tämä koodi alla:
1234567891011121314151617 | Osa LisääKuva ()Dim i Kuten kokonaislukuDim shp objektinaI = 1 - 100Laskentataulukoiden kanssa ("Sheet1")'asettaa objektimuuttujanAseta shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Solut (i, "A"). Vasen, Ylä: =. Solut ( i, "A"). Yläosa, leveys: = 264, korkeus: = 124)LopetaShp: n kanssa.Object.PictureSizeMode = 3'lataa kuva.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0LopetaSeuraavaksi minäEnd Sub |
Muuttuja ilmoitetaan objektina ja sitten ASETA avainsanaa käytetään kuvan liittämiseen objektiin. Objekti täytetään sitten kuvalla ja lisätään Excel -taulukkoon jonkin verran muotoilua samanaikaisesti. Lisäämme sitten silmukan koodiin 100 kuvan lisäämiseksi Excel -taulukkoon. Joskus tämä aiheuttaa automaatiovirheen, mutta joskus ei - turhauttavaa, eikö?
Ratkaisu tähän ongelmaan on poistaa objektimuuttuja silmukasta asettamalla objektiksi EI MITÄÄN - tämä vapauttaa muistin ja estää virheen.
12345678910111213141516171819 | Osa LisääKuva ()Dim i Kuten kokonaislukuDim shp objektinaI = 1 - 100Laskentataulukoiden kanssa ("Sheet1")'asettaa objektimuuttujanAseta shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Solut (i, "A"). Vasen, Ylä: =. Solut ( i, "A"). Yläosa, leveys: = 264, korkeus: = 124)LopetaShp: n kanssa.Object.PictureSizeMode = 3'lataa kuva.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Lopeta'tyhjennä objektimuuttujaAseta shp = ei mitäänSeuraavaksi minäEnd Sub |
DLL -virheet ja Windowsin päivittäminen
Joskus virhe ilmenee, eikä VBA -koodilla voi tehdä mitään. Rekisteröi uudelleen käytettävät DLL-tiedostot, varmista, että Windows on ajan tasalla ja viimeisenä keinona, suorita rekisteritarkistus, joka on toisinaan ainoa asia, joka voi auttaa korjaamaan tämän virheen.
Hyvä tapa välttää tämä virhe on varmistaa, että virheloukut ovat paikallaan käyttämällä Virheessä Siirry tai Virhe Jatka seuraavaksi rutiinit.