Analyst Cave

Nov 24, 2021

ThisWorkbook se refiere al libro de trabajo en el que se ejecuta el código de Excel VBA. ActiveWorkbook por otro lado se refiere al libro de trabajo de Excel que actualmente tiene el foco, lo que significa que es el frente frente a la ventana de Excel.

A menudo Excel VBA desarrolladores mezclar estos dos tipos comunes de libros de trabajo en VBA. El problema comienza a surgir cuando se trabaja en múltiples libros de trabajo de Excel al mismo tiempo y por accidente ejecutar una macro de un libro de trabajo, mientras que otro libro de trabajo de Excel es actualmente activo. Esto puede tener efectos desastrosos si se utiliza el rango de VBA o propiedades de la célula VBA directamente.

En este artículo permítanme explicar la clara diferencia entre el Excel VBA ActiveWorkbook vs ThisWorkbook objetos.

ActiveWorkbook

El ActiveWorkbook no es sólo el libro de trabajo visible como muchos pensarían, como se puede igualmente tener varios libros de trabajo abierto y colocado uno al lado del otro. Sin embargo, sólo un libro de Excel se considera activo en cualquier momento. Ser Activo es una propiedad superior – sólo el Libro de Trabajo cuya ventana está actualmente seleccionada se considera Activo. Vea a continuación una definición precisa

Application.ActiveWorkbook o ActiveWorkbook en Excel VBA:
Devolverá el objeto Workbook que representa el libro de trabajo en la ventana activa (la ventana de arriba). La propiedad no devolverá nada si la ventana de información o la ventana del portapapeles es la ventana activa.

Ejemplo de ActiveWorkbook en Excel VBA

'Returns the name of the Active Workbook in Excel VBADebug.Print ActiveWorkbook.Name'Get Sheet1 from the Active WorkbookActiveWorkbook.Sheets("Sheet1")

ThisWorkbook

La propiedad ThisWorkbook es mucho más fácil de entender ya que simplemente hace referencia al libro de trabajo de Excel en el que se está ejecutando el código VBA. Para la definición completa ver a continuación:

Application.ThisWorkbook o ThisWorkbook en Excel VBA:
Devuelve el objeto Workbook que representa el libro de trabajo donde se está ejecutando el código de macro VBA actual.

Ejemplo de ThisWorkbook en Excel VBA

'Returns the name of the Workbook which is executing this MacroDebug.Print ActiveWorkbook.Name'Get Sheet1 from the Workbook executing this MacroActiveWorkbook.Sheets("Sheet1")

ActiveWorkbook vs ThisWorkbook

Si todavía está confundido sobre la diferencia entre estas dos propiedades vea a continuación:

A la izquierda el Libro de Trabajo de Excel es visible y es la aplicación principal. En este caso si ejecuta una macro en este Libro de Trabajo la propiedad ActiveWorkbook es la misma que ThisWorkbook.

A la derecha el Libro de Excel no es visible o no es la aplicación principal. En este caso, si ejecuta una macro en este Libro de Trabajo, la propiedad ActiveWorkbook representa el Libro de Trabajo de la izquierda, y ThisWorkbook representa el Libro de Trabajo de la derecha.

¡Espero que ahora esté claro!

Conclusiones

Ahora que puede distinguir entre estas dos propiedades es importante tener un par de cosas en mente:

  • En el día a día utilice ThisWorkbook en lugar de la más errónea ActiveWorkbook, cuando espere que su código se ejecute en el mismo Libro de Trabajo en el que está trabajando
  • Utilice ActiveWorkbook con cuidado, ya que al ser una propiedad superior puede que no siempre devuelva una propiedad si otras ventanas emergentes de Excel estarán involucradas. Aunque puede necesitar la propiedad ActiveWorkbook cuando trabaje con AddIns de Excel (que ejecutan código en el Libro de Trabajo Activo y no en su AddIn)

Deja una respuesta

Tu dirección de correo electrónico no será publicada.