Este tutorial discutirá la diferencia entre VBA ActiveWorkbook y ThisWorkbook.
ActiveWorkbook frente a ThisWorkbook
Es importante conocer la diferencia entre ActiveWorkbook y ThisWorkbook en VBA:
ActiveWorkbook es el libro de trabajo que está actualmente activo (similar a cómo ActiveSheet es la hoja actualmente activa). ThisWorkbook es el libro de trabajo donde se almacena el código VBA. Este libro de trabajo nunca cambiará.
Este libro de trabajo
Piense en ThisWorkbook como una variable de objeto que le permite hacer referencia al libro de trabajo que contiene el código que se está ejecutando actualmente.
Este código mostrará un cuadro de mensaje con el nombre de ThisWorkbook:
123 | Sub Show_ThisWorkbook ()MsgBox ThisWorkbook.NameEnd Sub |
ActiveWorkbook
ActiveWorkbook es una variable de objeto que le permite hacer referencia al libro activo actualmente.
Este código mostrará un cuadro de mensaje con el nombre de ActiveWorkbook:
123 | Sub Show_ActiveWorkbook ()MsgBox ActiveWorkbook.NameEnd Sub |
VBA asume ActiveWorkbook
Al intentar trabajar con objetos (p. Ej., Hojas) dentro del ActiveWorkbook, no es necesario que indique explícitamente el objeto ActiveWorkbook. VBA asumirá que se está refiriendo al ActiveWorkbook.
Así que esto:
1 | ActiveWorkbook.Sheets ("Hoja1"). Rango ("$ A $ 5"). Valor = 1 |
Es lo mismo que esto:
1 | Hojas ("Hoja1"). Rango ("$ A $ 5"). Valor = 1 |
Los libros de trabajo nuevos o abiertos están activos
Siempre que crea un nuevo libro de trabajo o abre un libro de trabajo, el libro de trabajo se vuelve "Activo". Puede ver por sí mismo con este código que agregará un libro de trabajo y recuperará el nombre del nuevo libro de trabajo:
1234 | Sub Show_ActiveWorkbook_Add ()Cuadernos de trabajo AgregarMsgBox ActiveWorkbook.NameEnd Sub |
Después de agregar o abrir un libro de trabajo, puede asignarlo a una variable utilizando el objeto ActiveWorkbook. Le mostraremos cómo en los ejemplos siguientes:
Ejemplos de ThisWorkbook y ActiveWorkbook
Cambiar libro activo
Cambie el libro de trabajo activo usando el nombre del libro de trabajo:
1 | Libros de trabajo ("Libro1"). Activar |
Cambie el libro de trabajo activo usando el número de orden de la hoja de trabajo (1 es la primera hoja de trabajo en un libro de trabajo)
1 | Libros de trabajo (1) .Activar |
Activar este libro de trabajo
Haga de ThisWorkbook (donde se almacena el código que se está ejecutando actualmente) el ActiveWorkbook:
1 | ThisWorkbook.Activate |
Establecer ActiveWorkbook en una variable
Asigne ActiveWorkbook a una variable de objeto de libro de trabajo:
12 | Dim wb como libro de trabajoEstablecer wb = ActiveWorkbook |
Cerrar y guardar el libro activo
Cierra y guarda el ActiveWorkbook:
1 | ActiveWorkbook.Close SaveChanges: = Verdadero |
Cerrar el libro de trabajo activo sin guardar
Cierra ActiveWorkbook sin guardar:
1 | ActiveWorkbook.Close SaveChanges: = Falso |
ActiveWorkbook - Guardar como
Realiza un Guardar como del libro de trabajo activo.
123456789 | Sub SaveAsActiveWorkbook ()Resultado atenuado como varianteresultado = Application.GetSaveAsFilename (InitialFileName: = "", _FileFilter: = "Libro de Excel habilitado para macros (* .xlsm), * .xlsm, Libro de Excel (* .xlsx), * .xlsx")Si resultado = Falso, entonces regreseActiveWorkbook.SaveComo resultadoEnd Sub |