Aplicación a base de Macros
Siguiendo con nuestros ejemplos sobre las macros, vamos a realizar una
serie de tareas más complejas utilizando varias macros. Para ello,
utilizaremos un ejemplo de hoja de excel que puedes observar debajo.
Supongamos una empresa ficticia llamada "Libros Gromepeich" la cual se
dedica a repartir en las 4 provincias de Catalunya (Barcelona, Tarragona,
Lérida y Gerona) sus libros, clasificados por módulos (Venta
minorista y venta mayorista), dentro de cada módulo por categorías
(Infantil, Arte, etc) y dentro de cada categoría por distintos niveles
de precios (Bajo, medio y alto) tal y como se muestra en la figura de la
derecha. Tenemos, aparte una pequeña hoja con los tres tipos de
precios.
Vamos a automatizar una serie de tareas a base de macros para recoger un informe de los pedidos del mes anterior extrayéndolo del sistems de proceso de pedidos. El secreto de un buen sistema de macros no está en crear una súper-macro largísima, sino en crear pequeñas macros que realicen tareas y luego unirlas. |
![]() |
Si intentamos hacer toda la macro seguida, habrá que realizar cuatrocientos pasos, cruzar los dedos, desearse lo mejor, y.... que no hayan demasiados fallos.
Para las macros que vamos a practicar, recomendamos siempre hacer una
copia de la hoja para practicar con la copia... (por si acaso). Vamos
con las tareas....
Tarea UNO: Rellenar celdas vacías
Cuando el sistema de pedidos produce un informe, introduce una etiqueta en una columna la primera vez que aparece la etiqueta. Vamos a rellenar las celdas vacías con el contenido de la etiqueta superior.
- Accede a Herramientas - Macro - Grabar nueva macro y dale el nombre RellenarEtiquetas. Acepta.
- Pulsa Ctrl+Inicio para situarte en la celda A1
- Pulsa Ctrl+Shift+* para seleccionar todo el rango de celdas
- Accede a Edición - Ir a... (o bien pulsa F5), Especial... activa la casilla Celdas en blanco y acepta.
- Escribe =C2 y pulsa Ctrl+Intro
- Pulsa Ctrl+Inicio para ir a la celda A1 y vuelve a pulsar Ctrl+Shift+*
- Accede a Edición - Copiar y luego a Edición - Pegado especial
- Selecciona la opción Valores y acepta
-
Finaliza la grabación de la macro (botón Detener grabación
o Herramientas - Macro - Detener grabación).
Observar la macro
Vamos a ver cómo es el código de nuestra macro:
-
Accede a Herrramientas - Macro - Macros - Modificar y observaremos
el código generado:
Sub
RellenarEtiquetas()
' ' RellenarEtiquetas Macro ' Macro grabada el 22/07/98 por x ' Range("A1").Select Selection.CurrentRegion.Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.FormulaR1C1 = "=R[-1]C" Range("A1").Select Selection.CurrentRegion.Select Selection.Copy Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False End Sub |
La sentencia:
Range("A1").Select sitúa el cursor en la celda A1
Selection.CurrentRegion.Select selecciona la región actual de la selección original. Las sentencias de una macro deben leerse siempre de derecha a izquierda.
Selection.SpecialCells(xlCellTypeBlanks).Select selecciona las celdas en blanco de la selección original.
Selection.FormulaR1C1 = "=R[-1]C" significa: "La fórmula para todo lo seleccionado es... =R[-1]C (leer el valor de la celda que se encuentra justo encima de mi)". Cuando utilizamos Ctrl+Intro para rellenar celdas, la macro tendrá la palabra Selection delante de la palabra Formula. Cuando sólo se introduce Intro para rellenar una celda, la macro tendrá la palabra ActiveCell delante de la palabra Formula.
Las restantes sentencias de la macro, convierten
las fórmulas en valores.
Ejecución de la macro
Para probar la macro, realiza una copia de la hoja original y accede a Herramientas - Macro - Macros... y pulsa el botón Ejecutar. La macro se ejecuta llenando las celdas vacías.
Observa que al finalizar la ejecución de la macro, aún existe un rango de celdas que queda seleccionado en color negro. Podríamos haber pulsado la tecla Esc y un click en cualquier celda para desactivar esta zona, pero lo hemos hecho así porque vamos a ver cómo podemos modificar y "tocar" el código de la macro.
- Accede a Herramientas - Macros - Macro y pulsa en Modificar
-
Añade estas líneas antes de la sentencia final EndSub:
Application.CutCopyMode = False
Range("A1").Select
- Haz una copia más de la hoja original y ejecuta ahora la macro. La selección final desaparece
|Índice| - |Anterior| - |Siguiente|