Denne opplæringen vil forklare hva en VBA -automatiseringsfeil betyr og hvordan den oppstår.
Excel består av objekter - arbeidsbokobjektet, regnearkobjektet, rekkeviddeobjektet og celleobjektet for bare å nevne noen. Hvert objekt har flere egenskaper og metoder hvis adferd kan kontrolleres med VBA -kode. Hvis VBA -koden ikke er riktig programmert, kan det oppstå en automatiseringsfeil. Det er en av de mer frustrerende feilene i VBA, da den ofte kan dukke opp uten noen åpenbar grunn når koden din ser helt fin ut!
(Se vår feilhåndteringsguide for mer informasjon om VBA -feil)
Henviser til en variabel ikke lenger aktiv
Det kan oppstå en automatiseringsfeil når du refererer til en arbeidsbok eller et regneark via en variabel, men variabelen er ikke lenger aktiv.
1234567891011 | Sub TestAutomation ()Dim strFile As StringDim wb Som arbeidsbok'åpne filen og angi arbeidsbokvariabelstrFile = Application.GetOpenFilenameSett wb = Workbooks.Open (strFile)'Lukk arbeidsbokenwb.Lukk'Prøv å aktivere arbeidsbokenwb.AktivereSlutt Sub |
Når vi kjører koden ovenfor, får vi en automatiseringsfeil. Dette skyldes det faktum at vi har åpnet en arbeidsbok og tilordnet en variabel til den arbeidsboken. Vi har da lukket arbeidsboken, men i den neste kodelinjen prøver vi å aktivere den lukkede arbeidsboken. Dette vil forårsake feilen ettersom variabelen ikke lenger er aktiv.
Hvis vi vil aktivere en arbeidsbok, må vi først ha arbeidsboken åpen!
Minne Overbelastning
Denne feilen kan også noen ganger oppstå hvis du har en sløyfe og du glemmer å fjerne et objekt i løpet av løkken. Imidlertid kan det bare forekomme noen ganger, og ikke andre- noe som er en av grunnene til at denne feilen kan være så irriterende.
Ta for eksempel denne koden nedenfor:
1234567891011121314151617 | Sub InsertPicture ()Dim i As IntegerDim shp som objektFor i = 1 til 100Med regneark ("Sheet1")'angi objektvariabelenSett shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Celler (i, "A"). Venstre, topp: =. Celler ( i, "A"). Topp, bredde: = 264, høyde: = 124)Slutt medMed shp.Object.PictureSizeMode = 3'last inn bildet.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Slutt medNeste jegSlutt Sub |
Variabelen deklareres som et objekt, og deretter SETT søkeord brukes til å tilordne et bilde til objektet. Objektet fylles deretter ut med et bilde og settes inn i Excel -arket med noe formatering som skjer samtidig. Vi legger deretter til en sløyfe i koden for å sette inn 100 bilder i Excel -arket. Noen ganger forårsaker dette en automatiseringsfeil, men noen ganger gjør det ikke - frustrerende, ikke sant?
Løsningen på dette problemet er å fjerne objektvariabelen i løkken ved å sette objektet til INGENTING - dette vil frigjøre minnet og forhindre feilen.
12345678910111213141516171819 | Sub InsertPicture ()Dim i As IntegerDim shp som objektFor i = 1 til 100Med regneark ("Sheet1")'angi objektvariabelenAngi shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Celler (i, "A"). Venstre, topp: =. Celler ( i, "A"). Topp, bredde: = 264, høyde: = 124)Slutt medMed shp.Object.PictureSizeMode = 3'last inn bildet.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Slutt med'fjern objektvariabelenSett shp = ingentingNeste jegSlutt Sub |
DLL -feil og oppdatering av Windows
Noen ganger oppstår feilen, og det er ingenting som kan gjøres innenfor VBA -koden. Omregistrere DLL-er som brukes, og sørg for at Windows er oppdatert og som en siste utvei, og kjører en registerkontroll som noen ganger det eneste som kan fungere for å slette denne feilen.
En god måte å unngå denne feilen er å sørge for at feilfeller er på plass ved hjelp av Ved feil Gå til eller På feil Fortsett neste rutiner.