Errore di automazione VBA

Questo tutorial spiegherà cosa significa un errore di automazione VBA e come si verifica.

Excel è composto da oggetti: l'oggetto Cartella di lavoro, l'oggetto Foglio di lavoro, l'oggetto Intervallo e l'oggetto Cella per citarne solo alcuni. Ogni oggetto ha più proprietà e metodi il cui comportamento può essere controllato con il codice VBA. Se il codice VBA non è programmato correttamente, può verificarsi un errore di automazione. È uno degli errori più frustranti in VBA in quanto spesso può apparire senza una ragione apparente quando il tuo codice sembra perfettamente a posto!

(Vedi la nostra Guida alla gestione degli errori per ulteriori informazioni sugli errori VBA)

Fare riferimento a una variabile non più attiva

Potrebbe verificarsi un errore di automazione quando si fa riferimento a una cartella di lavoro oa un foglio di lavoro tramite una variabile, ma la variabile non è più attiva.

1234567891011 Sub TestAutomazione()Dim strFile As StringDim wb come cartella di lavoro'apri file e imposta variabile cartella di lavorostrFile = Application.GetOpenFilenameImposta wb = Workbooks.Open(strFile)'Chiudi la cartella di lavorowb.Chiudi'prova ad attivare la cartella di lavorowb.AttivaFine sottotitolo

Quando eseguiamo il codice sopra, otterremo un errore di automazione. Ciò è dovuto al fatto che abbiamo aperto una cartella di lavoro e assegnato una variabile a quella cartella di lavoro. Abbiamo quindi chiuso la cartella di lavoro ma nella riga di codice successiva proviamo ad attivare la cartella di lavoro chiusa. Ciò causerà l'errore poiché la variabile non è più attiva.

Se vogliamo attivare una cartella di lavoro, dobbiamo prima avere la cartella di lavoro aperta!

Sovraccarico di memoria

Questo errore a volte può verificarsi anche se hai un ciclo e ti dimentichi di cancellare un oggetto durante il corso del ciclo. Tuttavia, potrebbe verificarsi solo a volte, e non in altri, che è uno dei motivi per cui questo errore può essere così fastidioso.

Prendi ad esempio questo codice qui sotto:

1234567891011121314151617 Sub InserisciImmagine()Dim i As IntegerDim shp come oggettoPer i = 1 a 100Con fogli di lavoro ("Foglio1")'imposta la variabile oggettoImposta shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, "A").In alto, Larghezza:=264, Altezza:=124)Termina concon shp.Object.PictureSizeMode = 3'carica l'immagine.Object.Picture = LoadPicture("C:\data\image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Termina conAvanti ioFine sottotitolo

La variabile viene dichiarata come Object, e quindi il SET la parola chiave viene utilizzata per assegnare un'immagine all'oggetto. L'oggetto viene quindi popolato con un'immagine e inserito nel foglio Excel con una formattazione contemporanea. Quindi aggiungiamo un ciclo al codice per inserire 100 immagini nel foglio Excel. A volte questo causa un errore di automazione, ma a volte no - frustrante, giusto?

La soluzione a questo problema è cancellare la variabile oggetto all'interno del ciclo impostando l'oggetto su NIENTE - questo libererà la memoria ed eviterà l'errore.

12345678910111213141516171819 Sub InserisciImmagine()Dim i As IntegerDim shp come oggettoPer i = 1 a 100Con fogli di lavoro ("Foglio1")'imposta la variabile oggettoImposta shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, "A").In alto, Larghezza:=264, Altezza:=124)Termina concon shp.Object.PictureSizeMode = 3'carica l'immagine.Object.Picture = LoadPicture("C:\data\image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Termina con'cancella la variabile oggettoImposta shp = NienteAvanti ioFine sottotitolo

Errori DLL e aggiornamento di Windows

A volte si verifica l'errore e non è possibile eseguire alcuna operazione all'interno del codice VBA. Nuova registrazione delle DLL che vengono utilizzate, assicurandosi che il nostro Windows sia aggiornato e, come ultima risorsa, eseguendo un controllo del registro come a volte le uniche cose che potrebbero funzionare per cancellare questo errore.

Un buon modo per evitare questo errore è assicurarsi che siano presenti trappole di errore utilizzando il In caso di errore Vai a o In caso di errore Riprendi Avanti routine.

wave wave wave wave wave