¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Macros y lenguaje VBA
  3. Manipular hojas de Excel
Extrait - Macros y lenguaje VBA Descubra la programación en Excel (nueva edición)
Extractos del libro
Macros y lenguaje VBA Descubra la programación en Excel (nueva edición) Volver a la página de compra del libro

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.

images/cap14_img_02.png

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 pestaña

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...

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.

images/cap14_img_04.png

 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.

images/cap14_img_05.png

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 Ejercicios_Capitulo14. 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 Capitulo14_Ejercicio1.

Esta macro mostrará el nombre de la hoja activa.

 Active la hoja Ejercicios_Capitulo14 y luego ejecute la macro Capitulo14_Ejercicio1 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 Temporal_Ejercicio14.

 Cree la macro Capitulo14_Ejercicio2 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_Capitulo13 (deberá haber realizado antes los ejercicios de la hoja Ejercicios_Capitulo13 que contendrá, por supuesto, los datos que se habrán de copiar)...