Denne vejledning forklarer, hvad en VBA -automatiseringsfejl betyder, og hvordan den opstår.
Excel består af objekter - projektmappeobjektet, regnearksobjektet, områdeobjektet og celleobjektet for blot at nævne nogle få. Hvert objekt har flere egenskaber og metoder, hvis adfærd kan styres med VBA -kode. Hvis VBA -koden ikke er korrekt programmeret, kan der opstå en automatiseringsfejl. Det er en af de mere frustrerende fejl i VBA, da den ofte kan dukke op uden nogen åbenbar grund, når din kode ser helt fin ud!
(Se vores Fejlhåndteringsguide for mere information om VBA -fejl)
Henviser til en variabel ikke længere aktiv
Der kan opstå en automatiseringsfejl, når du henviser til en projektmappe eller et regneark via en variabel, men variablen er ikke længere aktiv.
1234567891011 | Sub TestAutomation ()Dim strFile Som strengDim wb Som projektmappe'Åbn fil og indstil variabel i projektmappestrFile = Application.GetOpenFilenameIndstil wb = Workbooks.Open (strFile)'Luk projektmappenwb.Luk'Prøv at aktivere projektmappenwb.AktiverAfslut Sub |
Når vi kører ovenstående kode, får vi en automatiseringsfejl. Dette skyldes, at vi har åbnet en projektmappe og tildelt en variabel til denne projektmappe. Vi har derefter lukket projektmappen, men i den næste kodelinje forsøger vi at aktivere den lukkede projektmappe. Dette vil forårsage fejlen, da variablen ikke længere er aktiv.
Hvis vi vil aktivere en projektmappe, skal vi først have projektmappen åben!
Hukommelse Overload
Denne fejl kan også undertiden opstå, hvis du har en loop, og du glemmer at rydde et objekt i løbet af loop. Det kan dog kun forekomme nogle gange og ikke andre- hvilket er en af grundene til, at denne fejl kan være så irriterende.
Tag for eksempel denne kode herunder:
1234567891011121314151617 | Sub InsertPicture ()Dim i As IntegerDim shp som objektFor i = 1 til 100Med regneark ("Sheet1")'indstil objektvariablenIndstil shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = Falsk, DisplayAsIcon: = Falsk, Venstre: =. Celler (i, "A"). Venstre, Top: =. Celler ( i, "A"). Top, bredde: = 264, højde: = 124)Afslut medMed shp.Object.PictureSizeMode = 3'indlæse billedet.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Afslut medNæste iAfslut Sub |
Variablen erklæres som et objekt, og derefter SÆT nøgleord bruges til at tildele et billede til objektet. Objektet udfyldes derefter med et billede og indsættes i Excel -arket med en vis formatering på samme tid. Vi tilføjer derefter en loop til koden for at indsætte 100 billeder i Excel -arket. Nogle gange forårsager dette en automatiseringsfejl, men nogle gange gør det ikke - frustrerende, ikke?
Løsningen på dette problem er at rydde objektvariablen i sløjfen ved at indstille objektet til IKKE NOGET - dette vil frigøre hukommelsen og forhindre fejlen.
12345678910111213141516171819 | Sub InsertPicture ()Dim i As IntegerDim shp som objektFor i = 1 til 100Med regneark ("Sheet1")'indstil objektvariablenIndstil shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = Falsk, DisplayAsIcon: = Falsk, Venstre: =. Celler (i, "A"). Venstre, Top: =. Celler ( i, "A"). Top, bredde: = 264, højde: = 124)Afslut medMed shp.Object.PictureSizeMode = 3'indlæse billedet.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Afslut med'ryd objektvariablenIndstil shp = IntetNæste iAfslut Sub |
DLL -fejl og opdatering af Windows
Nogle gange opstår fejlen, og der er ikke noget, der kan gøres inden for VBA -kode. Omregistrering af DLL'er, der bruges, og sørger for, at vores Windows er opdateret og som en sidste udvej, kører en registreringsprøve som nogle gange de eneste ting, der kan fungere for at rydde denne fejl.
En god måde at undgå denne fejl er at sikre, at fejlfælder er på plads ved hjælp af Ved fejl Gå til eller Ved fejl Genoptag næste rutiner.