Manipular hojas de Excel
Objetivos del capítulo
Después de haber manipulado las celdas dentro de la hoja activa, es el momento de manipular las hojas a través del libro de trabajo.
Este capítulo abordará el objeto Worksheet, que representa una hoja (u hoja de cálculo o trabajo) de Excel; en él verá las principales propiedades y métodos de la hoja. A continuación, observará la colección de hojas de un libro Worksheets para conocer las acciones más comunes.
Por último, una serie de ejercicios le permitirá validar sus nuevos conocimientos.
Colección de hojas de un libro: Worksheets
Cuando se trabaja en un libro, cada hoja de cálculo es un objeto de tipo Worksheet, y todas las hojas están en una colección llamada Worksheets. Puede recorrer esta colección para apuntar a la hoja de cálculo que desee. También puede utilizar la colección Sheets. Esta colección contiene tanto las hojas de cálculo como las hojas de gráficos. En aras de la simplicidad, en este capítulo solo se trabajará con hojas de cálculo y Worksheets.
A continuación, se presentan algunos programas de ejemplo para trabajar con el objeto Worksheets.
Mostrar la lista de hojas
Cuando se trabaja con un libro, puede ser interesante conocer la lista de hojas de cálculo. El siguiente código recorre cada elemento de la colección Worksheets y muestra el nombre de cada hoja.
Sub ListaDeHojas()
Dim Hoja As Worksheet
For Each Hoja in Worksheets
'Muestra el nombre de la hoja
MsgBox Hoja.Name
Next
End Sub
Ejemplo 1: recorrer la colección Worksheets para leer la lista de hojas de cálculo
Conocer el número de hojas de cálculo: Count
Para conocer cuántas hojas hay en su libro, simplemente utilice la propiedad Count, que devuelve un valor...
Objeto Hoja de cálculo: Worksheet
En esta sección, aprenderá más sobre lo que es una hoja de cálculo para VBA y cómo utilizarla de acuerdo con sus necesidades.
Hojas de cálculo en la interfaz VBE
Cuando trabaje con hojas de Excel, podrá verlas en el Explorador de proyectos en VBE.
Para cada hoja de su libro, verá el nombre de la hoja entre paréntesis y el CodeName (Hoja1 y Hoja2 en la imagen anterior). Este identificador es el nombre del objeto en el Editor de Visual Basic; corresponde al nombre de la hoja en Excel cuando esta se creó, pero no cambia cuando renombra la hoja en Excel.
La hoja activa: ActiveSheet
Al igual que para las celdas, existe el objeto VBA ActiveSheet, que apunta a la hoja activa. De la misma forma que solo puede haber una celda activa, solo hay una hoja activa.
' Mostrar el nombre de la hoja activa en la ventana Inmediato
Debug.Print ActiveSheet.Name
Ejemplo 8: usar la hoja activa a través del objeto ActiveSheet
Declarar un objeto Worksheet
Al igual que ha visto para el objeto Range, declarar y asignar un objeto de tipo Worksheet es sencillo.
Dim wsh As Worksheet
Ejemplo 9: declarar una variable de tipo Worksheet
Asignar un objeto Worksheet
Antes de poder utilizar la variable de tipo Worksheet que acaba de declarar, tiene que asignarla.
Existen cuatro formas de asignar un valor a su variable; las tres primeras son, con mucho, las más comunes.
Asignar a partir del índice de la hoja
Es posible apuntar a una hoja de un libro desde su posición en este. La numeración corresponde al orden de las hojas en el libro de izquierda a derecha, empezando por el 1.
Set wsh = Worksheets(1)
Ejemplo 10: asignar usando el índice de la hoja
Tenga en cuenta que las hojas ocultas están incluidas en la numeración. Así, en un libro de tres hojas, si la hoja 2 está oculta, solo verá las hojas 1 y 3 en la pantalla.
Este enfoque es posible cuando se conoce el orden en que se muestran las hojas en el libro. Aquí es donde encontrará la palabra clave Set, vista en el capítulo anterior, Manipular celdas de Excel, que también es apropiada para las hojas.
Asignar usando el nombre de la hoja
Puede ocurrir que no sepa dónde se encuentra su hoja en relación con las demás de su libro. En tal situación, puede utilizar el nombre de la hoja....
Eventos en las hojas
Tras haber hablado de las propiedades y luego de los métodos de las hojas, viene el turno de los eventos. El objetivo de esta sección es ayudarle a entender qué es un evento en VBA, cómo crear un evento que desencadene una serie de instrucciones y, por último, presentarle algunos eventos que afectan a las hojas de cálculo.
Definir un evento en VBA
Ya sea que se trate del clic en un botón, una validación en un cuadro de texto o la desactivación de una hoja, un evento permite la interacción entre su programa y el usuario. Son procedimientos Sub que se desencadenan automáticamente según una acción definida.
Los objetos que pueden interactuar a través de eventos son: la aplicación Excel, los libros, las hojas de cálculo, los gráficos, los formularios de usuario y, por último, los controles.
Gestión de eventos en el Editor de Visual Basic
Para generar el código de un evento en el Editor de Visual Basic, seleccione una de las hojas.
Haga doble clic en la hoja que le interesa para abrir el módulo vinculado a la hoja.
Por encima de la ventana de código, hay dos cuadros de lista desplegables.
Seleccione Worksheet en la lista de la izquierda; todos los eventos que Excel puede detectar automáticamente en relación con la hoja aparecen en la lista de la derecha.
En general, los eventos...
Manipular datos en varias hojas
Ahora que conoce las instrucciones que le permiten trabajar con hojas dentro de un libro, puede aprovechar los datos situados en varias hojas dentro de él. He aquí algunos ejemplos de manipulación de datos en varias hojas.
Copiar de un hoja, pegar en otra
Uno de los casos más frecuentes será el de copiar un rango de celdas de una hoja a otra. El método de copia Copy se abordó en el capítulo Manipular celdas de Excel. Aquí, el código permite copiar los datos situados en la hoja A y pegarlos en la hoja B.
Worksheets("A").Range("A1:D1").Copy
Worksheets("B").Range("A1")
Ejemplo 29: copiar datos de una hoja a otra
Comparar los datos de varias hojas
Cuando quiera comparar los datos fila por fila entre dos hojas, aunque a veces pueda hacerse solo con fórmulas, se puede requerir una macro VBA.
El siguiente código compara las filas entre dos hojas llamadas Esperado y Obtenido de la columna A, poniendo un valor X en la columna B de la hoja Obtenido si los valores son diferentes.
Sub CompararHojas()
Dim i As Integer
'Comparamos desde la fila 2, la fila 1 contiene, por ejemplo,
'el título de la columna
For i = 2 To 150
If Worksheets("Esperado").Range("A" & i).Value <> Worksheets
("Obtenido").Range("A"...
Ejercicios
Esta serie de ejercicios se realizará tanto en el módulo Capitulo_14_Hojas como en la hoja ManipulaciónHojas. Los ejercicios marcados con un asterisco * deben realizarse en el módulo Capitulo_14_Hojas.
Hoja activa *
En el módulo Capitulo_14_Hojas, cree la macro MostrarNombreHojaActiva.
Esta macro mostrará el nombre de la hoja activa.
Active la hoja Ejercicios_ManipulacionHojas y luego ejecute la macro MostrarNombreHojaActiva para comprobar que su programa funciona correctamente. Realice varias pruebas en las otras hojas del libro.
Copiar de una hoja a otra *
Aunque esta manipulación es parte de las operaciones más comunes, he aquí un ejercicio muy sencillo.
El objetivo es crear una hoja, copiar los datos que ha creado en los ejercicios del capítulo anterior y renombrar esta hoja como Hoja_Temporal.
Cree la macro CrearRellenarYNombrarHoja en el módulo Capitulo_14_Hojas.
En esta macro comenzará declarando una variable de tipo hoja (Worksheets), a la que llamará wsh.
La macro añadirá una hoja y utilizará la variable wsh para apuntar a esta nueva hoja. Llame a la nueva hoja Temporal_Ejercicio14.
A continuación, la macro hará una copia de las celdas de la hoja Ejercicios_ManipulacionCeldas (deberá haber realizado antes los ejercicios de la hoja Ejercicios_ManipulacionCeldas que contendrá, por supuesto, los datos...