Macro para Listar Hojas de un Libro

Había estado pensando en la manera más fácil de mostrarles el funcionamiento de las macros, por una parte pensé en ir explicando conforme el tiempo la utilización de cada instrucción, algo además de muy largo un tanto aburrido, entonces he decidido que iré proporcionando macros completas algunas sencillas otras no tanto, formadas por varias instrucciones y describiré cada línea de código.

Se estarán preguntando que es una instrucción, por lo regular es una línea de código que ejecuta una acción. Lo entenderán mejor en la práctica.

Bien, iniciemos...

Muchas veces nos vemos en la necesidad de listar las hojas de un libro que contiene un reporte, cuando son pocas hojas no representa problema pero cuando son muchas es una tarea tediosa, y más si algunas hojas cambian de nombre.

Esto se soluciona muy fácil por medio de una macro, el primer paso para ello es crear la macro, en este POST se indica cómo.

Ahora después de la línea "Sub Listar ()" escribimos:

a = Worksheets.Count

Esta línea lo que hace es ver cuántas hojas tiene el libro y dice que ese valor corresponde a "a". ¿Qué significa "a"? es una variable, pero hoy no nos complicaremos con las variables. Después escribimos lo siguiente:

b = 1
c = 1


Acabamos de crear otras dos variables: "b" y "c" dándoles valor de 1 a cada una. Ahora iniciamos un "ciclo" que ejecutara algo un determinado número de veces para ello introducimos la siguiente línea:

For Hojas = 1 To a

La palabra "For" indica que vamos a hacer un ciclo, la palabra "Hojas" corresponde al nombre de ese ciclo, el signo igual "=" es obligatorio después del nombre del ciclo, el segmento "1 To a" quiere decir que el ciclo irá desde 1 hasta el número de hojas del libro pues recordemos que "a" es el número total de hojas en el libro, "a" puede ser reemplazada por un número entero.

La línea de abajo es la siguiente:

    ActiveCell.Offset(RowOffset:=b).Value = _
    Worksheets(c).Name

Se ve más complicado pero no lo es. La parte de "ActiveCell.Offset" significa que nos referiremos a alguna celda tomando como base la celda activa, "(RowOffset:=b)" nos dice que la celda está unas filas arriba o abajo en este caso la cantidad de filas es igual a "b" a la que le dimos valor de 1 arriba, podemos sustituir "b" por un número positivo para decir tantas filas hacia abajo o negativo para decir tantas filas hacia arriba, con la parte ".Value" (con punto incluido) nos referimos al valor la celda, el signo "=" como sospecharán significa que el valor de esa celda es igual a...

La parte de "Worksheets(c).Name" hace referencia al nombre de tal hoja, la "c" puede ser sustituida por un número entero, si escribimos 1 es la primer hoja, si escribimos 2 es la segunda hoja y así sucesivamente, a "c" le dimos valor de 1.

Sencillamente la línea significa: el valor de la línea de abajo es igual al nombre de la primera hoja del libro.

Después escribimos lo siguiente:

    b = b + 1

Lo anterior suma uno "1" al valor que ya tiene "b". Notemos que todavía estamos dentro del ciclo, y que "b" se refiere a cuantas filas hacia abajo nos referimos, al aumentar el valor de "b" bajamos la referencia.

Ahora escribimos:

    c = c + 1

Al igual que la línea anterior, aumenta valor a "c" que nos ayuda a referirnos a las hojas, al aumentar este valor cambiamos la hoja a la cual nos referimos.

Corresponde cerrar el ciclo escribiendo:

Next Hojas

Que lo que hace es volver al inicio del ciclo, se termina cuando se han escrito todos los nombres de las hojas.

Y terminamos la macro con:

End Sub

La macro completa queda así:

Sub Listar()
a = Worksheets.Count
b = 1
c = 1
For Hojas = 1 To a
    ActiveCell.Offset(RowOffset:=b).Value = _
    Worksheets(c).Name
    b = b + 1
    c = c + 1
Next Hojas
End Sub

Si queremos ver qué hace, nos colocamos en cualquier línea del código y presionamos F5, verán que a partir de la celda de abajo de donde se encuentran coloca los nombres de todas las hojas del libro.

Cualquier duda la pueden hacer en los comentarios

Saludos...


Artículos Relacionados



4 comentarios:

Unknown dijo...

Excelente explicación, me parece muy importante que se den así las pautas puesto que uno entiende la lógica desde el principio y no la tiene que empezar a utilizar para hallarla.

Unknown dijo...

Excelente publicación de total utilidad y muy bien explicada, Muchísimas Gracias

Elizabeth Vásquez dijo...

Muchas gracias, la macro me sirvió mucho.

Anónimo dijo...

Gracias buen tuto, saludos....

Luis Flores

Publicar un comentario