You are on page 1of 8

Macro para desplazarse entre hojas

Al construir un reporte en Excel es comn mostrar un resumen de la informacin en la primera hoja que nos
permitir consultar el detalle que se encuentra en el resto de las hojas del libro y que tambin ofrecen
informacin relevante. Nuestro objetivo es hacer que el usuario llegue al detalle que est buscando de una
manera sencilla.

Una buena alternativa para crear este sistema de navegacin en nuestro libro, es colocar un botn para
moverse entre hojas. De esta manera podemos guiar a los usuarios hacia las hojas que contienen todo el detalle
y evitar que ellos tengan que visitar cada una de las hojas en busca de la informacin.

Moverse a otra hoja con la grabadora de macros


El mtodo ms sencillo para crear un botn que se desplace a otra hoja es a travs de la grabadora de macros.
Debes ubicarte en la hoja inicial y hacer clic en el botn Grabar macro que se encuentra en la ficha Vista >
Macros > Grabar macro o que tambin puedes iniciar con el icono ubicado en el extremo lateral izquierdo de la
barra de estado. Al pulsar ese botn se mostrar el cuadro de dilogo Grabar macro.

Una vez que hayas especificado un nombre adecuado para la macro haz clic en Aceptar y solamente debers
realizar una sola accin: Hacer clic sobre la pestaa de la hoja a donde deseas moverte.

Inmediatamente despus debers detener la grabacin pulsando el botn Detener grabacin que se encuentra en
la barra de estado de Excel. Con esto hemos creado la macro que nos ayudar a movernos a una hoja dentro del
libro y solamente nos restar agregar el botn a la hoja. Para agregar este botn debes hacer clic en el botn
desplegable Insertar que se encuentra dentro del grupo Controles de la ficha Programador y seleccionar el
elemento Botn.
El puntero del ratn te permitir definir el tamao del botn sobre la Hoja y al terminar de dibujarlo se mostrar
el cuadro de dilogo Asignar macro.

Lo nico que tenemos que hacer es seleccionar la macro que recin acabamos de crear y pulsar el botn
Aceptar. Al pulsar el botn recin creado nos moveremos hacia la nueva hoja. De esta misma manera podemos
grabar una macro diferente que nos lleve de regreso a la hoja principal. Observa la siguiente animacin en
donde ya he creado una segunda macro que me permite regresar a la Hoja inicial:
Analizando el cdigo VBA
Si analizas el cdigo creado con la grabadora de macros, podremos aprender un poco sobre programacin VBA.
Las macros que fueron creadas generaron un cdigo que puedes ver en el Editor de Visual Basic y que ser
similar al siguiente:

Observa que el objeto Sheets tiene un mtodo llamado Select el cual hace la seleccin de dicha hoja:

Sheets("Hoja1").Select

Esta instruccin siempre seleccionar la Hoja1 independientemente de la hoja en la que me encuentre. De esta
manera, la macro que creamos la podemos asignar a un botn en cualquier otra hoja de nuestro libro y siempre
nos moveremos a la Hoja1.

Moverse entre hojas con VBA


El ejemplo anterior funciona perfectamente siempre y cuando no se cambien los nombres de las hojas del libro
ya que si esto llega a suceder entonces nuestra macro dejar de funcionar. Para evitar este problema debemos
utilizar el nombre del objeto en VBA de manera que sin importar que cambie de nombre podremos movernos
hacia dicha hoja. En la siguiente imagen puedes observar cmo he renombrado la Hoja1 con el nombre
Principal y que se ve reflejado en el Explorador de proyectos:

Para garantizar que el botn que nos mueve a la hoja Principal funcione adecuadamente debo modificar el
cdigo VBA de la siguiente manera:

Con la nueva instruccin (Hoja1.Select) estaremos utilizando el nombre interno del objeto y no importar si
cambia de nombre la hoja, nuestro sistema de navegacin siempre funcionar adecuadamente.

Instrucciones VBA adcionales para cambiar de hoja


Algunas instrucciones VBA que pueden ser de utilidad al movernos entre hojas son las siguientes:

Sheets(Sheets.Count).Select

Esta instruccin siempre nos mover a la ltima hoja de nuestro libro.

Sheets(1).Select

Esta instruccin nos mover a la primera hoja de nuestro libro.

.
Macro para copiar datos a otro libro de Excel
Hace algunas semanas habl sobre cmo crear una macro para copiar datos de una hoja a otra y de inmediato
recib preguntas sobre cmo modificar dicho cdigo para hacer la misma copia de datos pero a un libro
diferente de Excel. Para lograr este nuevo objetivo haremos uso del mtodo Open de la coleccin de objetos
Workbooks.

La coleccin Workbooks en VBA


Si tienes experiencia en la programacin en Excel seguramente conocers el modelo de objetos y su jerarqua,
donde uno de los objetos ampliamente utilizado es el objeto Workbook el cual representa un libro de Excel. Ya
que al utilizar Excel podemos trabajar con mltiples libros a la vez, fue necesario crear un objeto adicional que
nos ayudara a agrupar y manejar todos esos libros y as es como surge la coleccin Workbooks.

Ya que la coleccin Workbooks es a su vez un objeto en Excel, tendr sus propios mtodos y propiedades y en
esta ocasin centraremos nuestra atencin en su mtodo Open.

El mtodo Open del objeto Workbooks


El mtodo Open de la coleccin Workbooks tiene 15 argumentos, as que dejaremos la revisin detallada de
cada uno de ellos para otra ocasin. El nico argumento que nos interesa por ahora es la ruta del archivo que
deseamos abrir la cual es proporcionada al mtodo Open como una cadena de texto de la siguiente manera:

Set wbDestino = Workbooks.Open("C:\LibroDestino.xlsx")

Es importante que la ruta del archivo indicado sea la correcta o de lo contrario obtendremos un mensaje de
error. Pero si todo funciona correctamente, obtendremos un nuevo objeto Workbook que har referencia al
archivo indicado y podremos hacer referencia a cualquier hoja y celda de dicho libro para copiar los datos
deseados.

Macro para copiar datos a otro libro en Excel


Ahora que ya sabes cmo abrir un libro de Excel utilizando VBA, podemos escribir el cdigo de nuestra macro
para copiar datos a otro libro. Recuerda que he tomado como base el cdigo previamente publicado en el
artculo Macro para copiar datos de una hoja a otra en Excel.

1
2
3
4 Sub CopiarCeldas()
5
'Definir objetos a utilizar
6 Dim wbDestino As Workbook, _
7 wsOrigen As Excel.Worksheet, _
8 wsDestino As Excel.Worksheet, _
9 rngOrigen As Excel.Range, _
rngDestino As Excel.Range
10
11'Indicar el libro de Excel destino
12Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "LibroDestino.xlsx")
13
14'Activar este libro
15ThisWorkbook.Activate
16
17'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("Origen")
18Set wsDestino = wbDestino.Worksheets("HojaDestino")
19
20'Indicar la celda de origen y destino
21Const celdaOrigen = "A1"
22Const celdaDestino = "A1"
23
24'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range(celdaOrigen)
25Set rngDestino = wsDestino.Range(celdaDestino)
26
27'Seleccionar rango de celdas origen
28rngOrigen.Select
29Range(Selection, Selection.End(xlDown)).Select
30Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
31
32'Pegar datos en celda destino
33rngDestino.PasteSpecial xlPasteValues
34Application.CutCopyMode = False
35
36'Guardar y cerrar el libro de Excel destino
wbDestino.Save
37wbDestino.Close
38
39End Sub
40
41
42

Las diferencias entre esta nueva macro y la publicada en el artculo original son las siguientes:

Lnea 4: Defin la variable wbDestino como un objeto del tipo Workbook que nos servir para guardar la
referencia al libro destino.
Lnea 11: El mtodo Workbooks.Open se encarga de abrir el libro a donde se copiarn los datos y la
referencia se guardar en la variable wbDestino.
Lnea 14: El libro abierto se convierte en el libro activo as que, para que las referencias del resto del
cdigo funcionen tal como en la versin original, activo de nueva cuente al libro donde se encuentra el
cdigo con la instruccin ThisWorkbook.Activate.
Lnea 18: Utilizo el objeto wbDestino para hacer referencia a la hoja de dicho libro a donde se copiarn
los datos.
Lnea 39 y 40: Los mtodos Save y Close me permiten guardar los cambios en el libro destino y
finalmente cerrarlo.

Es importante que la ruta al libro destino sea correcta o de lo contrario recibirs un mensaje de error. De la
misma manera, la hoja de destino indicada debe existir en dicho libro o tambin recibirs un mensaje de error.

Copiar datos a otro libro con la macro


El archivo de descarga que prepar para este artculo es un archivo comprimido donde encontrars el archivo
LibroOrigen.xlsm que contiene el cdigo de la macro. Tambin he incluido dentro del comprimido el archivo
LibroDestino.xlsx que es necesario para que el cdigo funcione correctamente. Para probar la macro solo
debers abrir el archivo LibroOrigen.xlsm y pulsar el botn Copiar.

Recuerda que se pegarn los valores sin formato, debido al argumento xlPasteValues del mtodo PasteSpecial
(Lnea 35), pero si deseas incluir el formato al copiar los datos solo debes reemplazar dicho argumento por
xlPasteAll.

Solo resta que descargues los archivos de trabajo y ejecutes la macro para copiar datos a otro libro de Excel.
Si deseas probar con tus propios libros debers copiar el cdigo VBA y hacer dos cambios importantes: Indicar
correctamente la ruta del archivo destino (Lnea 11) y el nombre de la hoja a donde se copiarn los datos (Lnea
18).

You might also like