VBA-automatiseringsfout

In deze zelfstudie wordt uitgelegd wat een VBA-automatiseringsfout betekent en hoe deze optreedt.

Excel bestaat uit objecten - het werkmapobject, het werkbladobject, het bereikobject en het celobject om er maar een paar te noemen. Elk object heeft meerdere eigenschappen en methoden waarvan het gedrag kan worden gecontroleerd met VBA-code. Als de VBA-code niet correct is geprogrammeerd, kan er een automatiseringsfout optreden. Het is een van de meest frustrerende fouten in VBA, omdat het vaak zonder duidelijke reden kan verschijnen wanneer je code er perfect uitziet!

(Zie onze Error Handling Guide voor meer informatie over VBA-fouten)

Verwijzen naar een variabele die niet langer actief is

Er kan een automatiseringsfout optreden wanneer u via een variabele naar een werkmap of werkblad verwijst, maar de variabele is niet langer actief.

1234567891011 Sub TestAutomatisering()Dim strFile As StringDim wb als werkboek'bestand openen en werkmapvariabele instellen'strFile = Application.GetOpenFilenameStel wb = Werkmappen in.Open(strFile)'Sluit de werkmap'wb.Sluiten'probeer de werkmap te activeren'wb.ActiverenEinde sub

Wanneer we de bovenstaande code uitvoeren, krijgen we een automatiseringsfout. Dit komt doordat we een werkmap hebben geopend en een variabele aan die werkmap hebben toegewezen. We hebben vervolgens de werkmap gesloten, maar in de volgende regel code proberen we de gesloten werkmap te activeren. Dit veroorzaakt de fout omdat de variabele niet langer actief is.

Als we een werkmap willen activeren, moeten we eerst de werkmap open hebben staan!

Geheugen overbelasting

Deze fout kan soms ook optreden als je een lus hebt en je vergeet een object te wissen tijdens de lus. Het kan echter alleen soms voorkomen en niet in andere - wat een van de redenen is waarom deze fout zo vervelend kan zijn.

Neem bijvoorbeeld deze code hieronder:

1234567891011121314151617 Sub Afbeelding invoegen()Dim ik als geheel getalDim shp als objectVoor i = 1 tot 100Met werkbladen ("Blad1")'stel de objectvariabele in'Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, "A"). Boven, Breedte:=264, Hoogte:=124)Eindigt metMet shp.Object.PictureSizeMode = 3'laad de foto'.Object.Picture = LoadPicture("C:\data\image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Eindigt metvolgende iEinde sub

De variabele wordt gedeclareerd als een Object, en dan de SET trefwoord wordt gebruikt om een ​​afbeelding aan het object toe te wijzen. Het object wordt vervolgens gevuld met een afbeelding en ingevoegd in het Excel-blad, waarbij tegelijkertijd enige opmaak plaatsvindt. Vervolgens voegen we een lus toe aan de code om 100 afbeeldingen in het Excel-blad in te voegen. Af en toe veroorzaakt dit een automatiseringsfout, maar soms ook niet - frustrerend, toch?

De oplossing voor dit probleem is om de objectvariabele binnen de lus te wissen door het object in te stellen op NIETS - dit zal het geheugen vrijmaken en de fout voorkomen.

12345678910111213141516171819 Sub Afbeelding invoegen()Dim ik als geheel getalDim shp als objectVoor i = 1 tot 100Met werkbladen ("Blad1")'stel de objectvariabele in'Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, "A"). Boven, Breedte:=264, Hoogte:=124)Eindigt metMet shp.Object.PictureSizeMode = 3'laad de foto'.Object.Picture = LoadPicture("C:\data\image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Eindigt met'wis de objectvariabele'Stel shp = Niets involgende iEinde sub

DLL-fouten en het bijwerken van Windows

Soms treedt de fout op en is er niets dat binnen VBA-code kan worden gedaan. Het opnieuw registreren van DLL's die worden gebruikt, ervoor zorgen dat onze Windows up-to-date is en als laatste redmiddel een registercontrole uitvoeren als soms de enige dingen die kunnen werken om deze fout te verhelpen.

Een goede manier om deze fout te vermijden, is ervoor te zorgen dat er foutvallen aanwezig zijn met behulp van de Bij fout Ga naar of Bij fout Hervat volgende routines.

wave wave wave wave wave