Error de automatización de VBA

Este tutorial explicará qué significa un error de automatización de VBA y cómo ocurre.

Excel se compone de objetos: el objeto Libro de trabajo, el objeto Hoja de trabajo, el objeto Rango y el objeto Celda, por nombrar solo algunos. Cada objeto tiene múltiples propiedades y métodos cuyo comportamiento se puede controlar con código VBA. Si el código VBA no está programado correctamente, puede ocurrir un error de automatización. Es uno de los errores más frustrantes en VBA, ya que a menudo puede aparecer sin razón aparente cuando su código se ve perfectamente bien.

(Consulte nuestra Guía de manejo de errores para obtener más información sobre los errores de VBA)

Hacer referencia a una variable que ya no está activa

Puede ocurrir un error de automatización cuando se refiere a un libro de trabajo o una hoja de trabajo a través de una variable, pero la variable ya no está activa.

1234567891011 Sub TestAutomation ()Dim strFile como cadenaDim wb como libro de trabajo'abrir archivo y establecer la variable del libro de trabajostrFile = Application.GetOpenFilenameEstablecer wb = Workbooks.Open (strFile)'Cerrar el libro de trabajowb.Cerrar'intente activar el libro de trabajowb.ActivateEnd Sub

Cuando ejecutamos el código anterior, obtendremos un error de automatización. Esto se debe al hecho de que hemos abierto un libro de trabajo y le hemos asignado una variable. Luego hemos cerrado el libro de trabajo, pero en la siguiente línea de código intentamos activar el libro de trabajo cerrado. Esto provocará el error ya que la variable ya no está activa.

Si queremos activar un libro de trabajo, primero debemos tenerlo abierto.

Sobrecarga de memoria

Este error también puede ocurrir a veces si tiene un bucle y se olvida de borrar un objeto durante el curso del bucle. Sin embargo, es posible que solo ocurra algunas veces y no otras, que es una de las razones por las que este error puede ser tan molesto.

Tomemos, por ejemplo, este código a continuación:

1234567891011121314151617 Sub InsertPicture ()Dim i como enteroDim shp como objetoPara i = 1 a 100Con hojas de trabajo ("Hoja1")'establecer la variable de objetoEstablezca shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Arriba, Ancho: = 264, Alto: = 124)Terminar conCon shp.Objeto.PictureSizeMode = 3'carga la imagen.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Terminar conSiguiente yoEnd Sub

La variable se declara como un Objeto, y luego la COLOCAR La palabra clave se utiliza para asignar una imagen al objeto. Luego, el objeto se completa con una imagen y se inserta en la hoja de Excel con algunos formatos que se realizan al mismo tiempo. Luego agregamos un bucle al código para insertar 100 imágenes en la hoja de Excel. Ocasionalmente, esto causa un error de automatización, pero a veces no lo hace, es frustrante, ¿verdad?

La solución a este problema es borrar la variable del objeto dentro del bucle estableciendo el objeto en NADA - esto liberará la memoria y evitará el error.

12345678910111213141516171819 Sub InsertPicture ()Dim i como enteroDim shp como objetoPara i = 1 a 100Con hojas de trabajo ("Hoja1")'establecer la variable de objetoEstablezca shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Arriba, Ancho: = 264, Alto: = 124)Terminar conCon shp.Objeto.PictureSizeMode = 3'carga la imagen.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Terminar con'borrar la variable de objetoEstablecer shp = NadaSiguiente yoEnd Sub

Errores de DLL y actualización de Windows

A veces ocurre el error y no hay nada que se pueda hacer dentro del código VBA. Volver a registrar las DLL que se están utilizando, asegurarnos de que nuestro Windows esté actualizado y, como último recurso, ejecutar una verificación del registro, ya que a veces es lo único que puede funcionar para eliminar este error.

Una buena forma de evitar este error es asegurarse de que las trampas de error estén en su lugar utilizando el En caso de error, ir a o en caso de error, reanudar a continuación rutinas.

wave wave wave wave wave