Lección 21: Trabajar con distintas hojas y libros automáticamente con macros.

Escrito por Administrador

24 de agosto de 2021

En esta lección vas a aprender cómo programar el traspaso de información entre hojas o libros de manera automática, para que puedas llevarte los datos de un sitio a otro y evitar tener que estar abriendo y cerrando libros de forma manual, lo cual ralentiza nuestro trabajo y lo hace menos eficiente.

A diario hacemos numerosas operaciones repetitivas dentro de nuestros archivos Excel. Una de las más comunes es copiar datos de una tabla en otra de una hoja o de un libro diferente. Todo esto se puede automatizar de una manera sencilla. Solo es necesario conocer los comandos adecuados y ser muy metódico.

¿Por qué digo esto? Hay que saber dónde estamos en cada momento, es decir, en qué hoja y en qué libro, porque puede darse el caso de que hayamos hecho una operación, por ejemplo, de copiado y pegado de un libro a otro, y al terminar la operación, se nos olvide poner el comando para volver al libro original y seguimos programando operaciones pensando que estamos en el libro original, podemos armar un buen follón.

Conclusión, hay que ser cuidadoso a la hora de programar. Empezamos.

 

1. Crear una hoja nueva.

Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "NombreDeLaHoja"

2. Cambio de hoja dentro del mismo libro.

Sheets("NombreDeLaHoja").Activate

Una vez que ponemos este comando en nuestro código, las operaciones que siguen se realizan con las celdas de dicha hoja seleccionada, hasta que no volvamos a cambiar de hoja.

3. Eliminar una hoja.

WorkSheets("NombreDeLaHoja").Delete

Si no queremos que nos salte la pregunta de si estamos seguros o no, podemos utilizar el comando

Application.DisplayAlerts = False

tal y como vimos en su día en la lección 3 sobre cómo anular las notificaciones con la funcion ScreenUpdate en macros.

 

4. Crear un libro nuevo

Workbooks.Add

5. Abrir un libro existente

Application.Workbooks.Open "RutaDelLibro"

6. Cambiar de un libro a otro

Workbooks("NombreDelLibro").Activate

También podríamos utilizar:

Workbooks(Numerodelibro).Activate

Cuando tenemos abiertos varios libros al mismo tiempo, Excel identifica el libro según el orden de apertura de los mismos. De esta manera podríamos cambiar de un libro a otro sabiendo cual se ha abierto primero, segundo, tercero… Lo veremos en un ejemplo más adelante.

 

7. Guardar los cambios en un libro

ActiveWorkbook.Save

8. Guardar un libro con un nombre determinado

Application.ActiveWorkbook.SaveAs("NombreDelLibro")

9. Guardar un libro con un nombre determinado en una ruta determinada

ActiveWorkbook.SaveAs Filename:="Ruta" _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

10. Cerrar un libro

Workbooks("NombreDelLibro").Close

Para evitar que te salga el cuadro de diálogo preguntándote si quieres salvar cambios, podríamos completar el comando con Savechanges (False/True).

Workbooks("NombreDelLibro").Close Savechanges:=False

Pasamos a la práctica para ver cómo se integrarían estos comandos en un código.

Crea un libro nuevo, abre el editor VBA e inserta 4 módulos. Copia en ellos las siguientes macros.

Macro 1

Sub Leccion21_1()

'Macro que copia los valores de una tabla en una nueva pestaña

'Creamos una hoja nueva llamada "Copia"

Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Copia"

'Volvemos a la hoja donde se encuentran los datos que queremos copiar

Sheets("Notas").Activate

'Copiamos la tabla

Range("B2:C13").Copy

'Vamos a la hoja "Copia" que es donde copiaremos la tabla

Sheets("Copia").Activate

'Pegamos la tabla en la celda B2

Cells(2, "B").Select

Selection.PasteSpecial Paste:=xlPasteAll, operation:=xlNone, skipblanks _
:=False, Transpose:=False

'Ajustamos los anchos de las filas y columnas

Rows("2:2").Select

Selection.RowHeight = 20

Columns("B:B").Select

Selection.ColumnWidth = 30

Columns("C:C").Select

Selection.ColumnWidth = 15

'Desactivamos la función copiar

Application.CutCopyMode = False

'Seleccionamos la celda A1

Cells(1, "A").Select

End Sub

Macro 2

Sub Leccion21_2()

'Macro que borra la pestaña Copia

Sheets("Copia").Delete

End Sub

Macro 3

Sub Leccion21_3()

'Macro que borra la pestaña Copia evitando que aparezcan avisos de confirmación

Application.DisplayAlerts = False

Sheets("Copia").Delete

Application.DisplayAlerts = True

End Sub

Macro 4

'Creamos un libro nuevo

Workbooks.Add

'Volvemos al libro original, como es el primero que se ha abierto, su identificador es el 1

Workbooks(1).Activate

'Seleccionamos la hoja que contiene la tabla

Sheets("Notas").Activate

'Copiamos la tabla

Range("B2:C13").Copy

'Cambiamos al nuevo libro, como es el segundo que se ha abierto, su identificador es el 2

Workbooks(2).Activate

'Pegamos la tabla en la celda B2

Cells(2, "B").Select

Selection.PasteSpecial Paste:=xlPasteAll, operation:=xlNone, skipblanks _
:=False, Transpose:=False

'Ajustamos los anchos de las filas y columnas

Rows("2:2").Select

Selection.RowHeight = 20

Columns("B:B").Select

Selection.ColumnWidth = 30

Columns("C:C").Select

Selection.ColumnWidth = 15

'Desactivamos la función copiar

Application.CutCopyMode = False

'Seleccionamos la celda A1

Cells(1, "A").Select

'Guardamos el libro nuevo con el nombre "Copia"

Application.ActiveWorkbook.SaveAs ("Copia")

'Cerramos el libro nuevo

Workbooks(2).Close

End Sub

Ahora rellena la hoja de cálculo como se muestra en la figura. Tendrás que crear 4 botones y asignarles las macros anteriores.

total-operaciones-matematicas-macros

La primera de las macros, va a copiar la tabla en una nueva pestaña que llamamos “Copia”.

total-operaciones-matematicas-macros

La segunda macro, elimina dicha pestaña. Al ejecutarla, aparecerá un mensaje de aviso indicándonos que dicha pestaña contiene datos y los perderemos, requiriendo nuestra confirmación para su eliminación.

total-operaciones-matematicas-macros

Como la tarea de eliminar una pestaña puede ser un paso intermedio de varias tareas programadas, y tener que estar pendiente de validar la eliminación puede ser una lata, en la tercera macro hemos deshabilitado los mensajes de alerta, y la eliminación de la pestaña se realizará sin necesidad de confirmación.

Application.DisplayAlerts = False

Al ejecutar la cuarta macro, creamos un libro nuevo y copiamos la tabla en él. Se guarda automáticamente con el nombre “Copia” y se cierra.

Con esto llegamos al final de la vigesimoprimera lección. Espero que te esté gustando el curso y que me plantees cualquier duda que te surja. También puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario, soy todo oídos. Nos vemos en el próximo capítulo.

Descarga el archivo del ejemplo

« L20. Funciones ScrollRow y ScrollColumn para macros.

L22. Eventos Change e Intersect para macros. »

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Quizá te interese,

Contacto