Manipular libros
Objetivos del capítulo
Después de haber hablado de las celdas y luego de las hojas, este capítulo nos permitirá hablar de los libros.
Primero encontrará la colección Workbooks, y luego los dos objetos ActiveWorkbook y ThisWorkbook. A continuación, explicaremos las propiedades y métodos del objeto Workbook. Después, conocerá los eventos del libro y, por último, una serie de ejercicios le ayudarán a poner en práctica sus nuevos conocimientos.
Colección de libros de la aplicación: Workbooks
Cuando se trabaja en Excel, cada libro es un objeto de tipo Workbook, y todos los libros se encuentran en una colección llamada Workbooks. Puede navegar por esta colección Workbooks para apuntar al libro que desee. También puede utilizar la colección Sheets. Tanto si se trata de archivos de Excel como de archivos txt, csv o xml, todos estos libros aparecerán en la colección Workbooks.
A continuación, encontrará algunos ejemplos de programas para trabajar con el objeto Workbooks.
Mostrar la lista de libros
Cuando trabaja con Excel, puede ser interesante conocer la lista de libros. El siguiente código recorre cada elemento de la colección Workbooks mostrando el nombre de cada libro.
Sub ListaDeLibros()
Dim Libro As Workbook
For Each Libro in Workbooks
'Muestra el nombre del libro
MsgBox Libro.Name
Next
End Sub
Ejemplo 1: recorrer la colección Workbooks para leer la lista de libros abiertos
Conocer el número de libros abiertos: Count
Para saber el número de libros abiertos en la aplicación Excel, basta con usar la propiedad Count de Workbooks, que devuelve un valor numérico.
'Muestra el número de libros
MsgBox Workbooks.Count...
Objeto libro: Workbook
En esta sección aprenderá más sobre lo que es un libro para VBA y cómo utilizarlo según sus necesidades. El tipo de objeto que representa un libro es Workbook en VBA. Cada libro forma parte de la colección Workbooks cuando está abierto.
Libros en la interfaz VBE
Cuando trabaja con libros de Excel, puede verlos en el Explorador de Proyectos en VBE.
![images/cap15_img_01.png](https://www.eni-training.com/download/8085119a-0c84-4016-9951-8b65c868e345/images/cap15_img_01.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Para cada uno de los libros abiertos, verá su nombre entre paréntesis junto con el del proyecto (VBAProject es el nombre del proyecto predefinido).
Para modificar el nombre del proyecto, en la ventana Propiedades cambie la propiedad Name.
Libro activo y aquel que contiene el código VBA: ActiveWorkbook y ThisWorkbook
Tal y como vio en los capítulos Manipular celdas de Excel y Manipular hojas de Excel, existe un objeto VBA ActiveWorkbook que apunta al libro activo. Al igual que solo puede haber una celda y una hoja activas, solo puede haber un libro activo.
'Mostrar el nombre del libro y hoja activa en la ventana Inmediato
Debug.Print ActiveWorkbook.Name & " " & ActiveSheet.Name
Ejemplo 8: usar el libro activo a través del objeto ActiveWorkbook
El otro objeto visible en la imagen anterior es el objeto ThisWorkbook. Este objeto se refiere al libro en el que se ejecuta el código VBA.
Declarar un objeto Workbook
Al igual que en el caso del objeto Worksheet, la declaración de un objeto Workbook es sencilla.
Dim wbk As Workbook
Ejemplo 9: declarar una variable de tipo Workbook
Asignar un objeto Workbook
Al igual que en el caso del objeto Worksheet, antes de poder utilizar la variable de tipo Workbook que acaba de declarar, deberá asignarla.
Hay al menos cuatro formas de asignar un valor a esta variable.
Asignar a partir del índice del libro
Se puede apuntar a un libro en Excel desde su posición de apertura en la aplicación Excel. La numeración...
Eventos en los libros
Después de hablar de las propiedades y los métodos del libro, pasamos a los eventos.
Gestión de eventos en el Editor de Visual Basic
En el Editor de Visual Basic, para acceder a los eventos del libro, haga doble clic en ThisWorkbook en el Explorador de proyectos
![images/cap15_img_02.png](https://www.eni-training.com/download/8085119a-0c84-4016-9951-8b65c868e345/images/cap15_img_02.png?id=AAEAAAD%2f%2f%2f%2f%2fAQAAAAAAAAAMAgAAAE1FbmkuRWRpdGlvbnMuTWVkaWFwbHVzLCBWZXJzaW9uPTEuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAJ0VuaS5FZGl0aW9ucy5NZWRpYXBsdXMuQ29tbW9uLldhdGVybWFyawIAAAAHcGlzVGV4dAlwaWR0ZURhdGUBAA0CAAAABgMAAAAwdGVzdCB2Ml84IC0gZmZhNjQzOWQtZDZjYi00NzYxLWJhYTMtZWZkZDNiZDcwMWM25rSq0F7p2IgL)
Por encima de la ventana de código hay dos cuadros de listas desplegables.
Seleccione Workbook en la lista de la izquierda; en la lista de la derecha aparecen todos los eventos que Excel puede detectar automáticamente en relación con el libro.
Seleccione el evento que le interesa.
Algunos eventos para los libros
Al igual que se vio en el capítulo sobre las hojas, se pueden activar instrucciones sobre eventos que tienen lugar en un libro. Ya sea al abrir, guardar o cerrar un libro, puede ser conveniente ejecutar instrucciones durante esos eventos, así como conocer algunos de ellos.
Abrir el libro: Workbook_Open
Cuando se abre el libro, se pueden ejecutar instrucciones, por ejemplo, para mostrar un mensaje al usuario o mostrar un formulario de bienvenida.
Las instrucciones podrían ponerse dentro de la siguiente macro:
Private Sub Workbook_Open()
MsgBox "Buenos días y bienvenido", vbOKOnly
End Sub
Ejemplo 23: usar el evento Worbook_Open
Guardar el libro: Workbook_BeforeSave
Justo antes de guardar un libro, se activa un evento; puede utilizarse en VBA, por ejemplo, para...
Manipular datos de varios libros
Para retomar varios elementos vistos en este capítulo, he aquí un ejemplo de código que tiene por objetivo:
-
crear un nuevo libro,
-
añadirle una hoja en la segunda posición, que se llamará B,
-
copiar los datos de la hoja A que se encuentra en el libro en el que se está ejecutando el código (ThisWorkbook),
-
y pegarlos en la hoja B del nuevo libro,
-
borrar la primera hoja del libro,
-
guardar el nuevo libro en el directorio P:\Informe con la fecha actual en el formato AAAA_MM_DD,
-
cerrar el libro.
Sub EjemploDeManipulacion()
'Declaraciones
Dim wbk As Workbook
Dim wsh As Worksheet
'Asignaciones
Set wbk = Workbooks.Add
Set wsh = wbk.Worksheets.Add(After:=wbk.Worksheets(1))
'Renombrar
wsh.Name = "B"
'Copiar datos de la hoja A
ThisWorkbook.Worksheets("A").UsedRange.Copy
'Pegar en la hoja B
wsh.Range("A1").PasteSpecial
'Borrar la primera hoja
wbk.Worksheets(1).Delete
'Guardar el libro
wbk.SaveAs "P:\Informe\" & Format(Date, "YYYY_MM_DD") &...
Ejercicios
Como parte de los siguientes ejercicios, se encargará de crear una hoja llamada Ejercicios_ManipulacionesLibro. Algunos de los ejercicios utilizarán los datos que coloque allí.
Usar ThisWorkbook
Ubicación del libro
Cree la macro MostrarUbicacionLibro.
Esta macro mostrará la ubicación del libro.
Ejecute la macro (ubicación del archivo).
Nombre de la hoja activa
Cree la macro MostrarNombreHojaActivaEnELibro.
Esta macro mostrará el nombre de la hoja activa del libro.
Active una hoja del libro y ejecute la macro MostrarNombreHojaActivaEnElLibro (nombre de la hoja activa).
Crear, guardar y cerrar un libro
Crear un libro
Cree la macro CrearLibroYMostrarNombreHojas.
Esta macro creará un libro y luego mostrará el número de hojas de este.
Ejecute la macro CrearLibroYMostrarNombreHojas (1).
Cierre manualmente el libro después de haber ejecutado la macro CrearLibroYMostrarNombreHojas.
Guardar un nuevo libro
Cree la macro EtapasCompletasLibro.
Esta macro deberá crear un libro.
En este nuevo libro, la macro añadirá una hoja llamada Temp y luego guardará el libro. El nombre del libro (sin su extensión xlsx) está en la celda A1 de la hoja Ejercicios_ManipulacionesLibro que ha creado. La carpeta donde se guarda el libro será la misma que la del libro donde se encuentra su código....