macros con excel 2007 1ed - gail perry
TRANSCRIPT
Gail Perry
Traducción:Eloy Pineda RojasTraductor profesional
Director editorial:Editor:Supervisor de producción:
MACROS CON EXCEL® 2007
A Subsidiary of The McGraw-Hill Companies, Inc.
ISBN: 978-607-15-0237-7
Excel 2007 Macros Made Easy
Printed in Mexico
Gail Perry es contadora pública, periodista financiera y autora de más
de 20 libros de software financiero, impuestos y finanzas personales.
Es editora de AccountingWEB, editora colaborador de la revista SMB
Finance, e instructora.
Capítulo 1 Grabación de macros 1
Capítulo 2 Edición de macros 15
Capítulo 3 Creación de macros en Visual Basic 27
Capítulo 4 Almacenamiento de macros 43
Capítulo 5 Comprensión de los comandos de las macros 59
Capítulo 6 Uso de subrutinas y creación de funciones de Visual Basic 73
Capítulo 7 Creación de macros interactivas 85
Capítulo 8 Uso de macros para formato de celdas 99
Capítulo 9 Uso de variables en macros 111
Capítulo 10 Creación de rutinas If/Then/Else 123
Capítulo 11 Exploración de bucles 133
Capítulo 12 Adición de controles a sus hojas de cálculo 145
Índice 155
Bienvenido a Macros con Excel 2007. Este libro fue escrito para quienes usan Excel todos los
días, como usted, que quieren liberarse de la pesadilla de repetir las mismas tareas una y
otra vez. En este libro aprenderá accesos directos poderosos y métodos que ahorran tiempo
para agilizar y recordar las tareas. A diferencia de otros libros de esta serie, se concentra en
enseñarle sólo las cosas que necesita saber para empezar a usar macros de hoja de cálculo
de manera rápida y fácil. No necesita tener un título de programador ni reservar horas y
horas para estudiar con el fin de comprender las lecciones de este pequeño libro y ponerlas
a trabajar para usted de inmediato. En realidad, debe tener la capacidad de crear su primera
macro en unos cuantos minutos.
En este libro descubrirá cómo enseñar a Excel a hacer tareas repetitivas que ocupan
tiempo y energía valiosos que podría dedicar a esfuerzos más productivos. Aprenderá a
proteger la integridad de sus datos al crear macros que eviten que se ingrese información
incorrecta en sus hojas de cálculo. Con el uso de macros de Excel, puede incluso interactuar
con otros usuarios y pedirles datos específicos de entrada. Así, ¡estará listo para dar el salto!
Es hora de hacer que las macros de Excel lo liberen de la pesadilla y hagan más suave y fácil
su vida en el trabajo.
Elementos usados en este libroLeer página tras página de un texto corrido, sobre todo si se trata de un libro práctico,
puede ser mortalmente aburrido. Traté de luchar contra eso al insertar gran cantidad de
ilustraciones que le ayuden a visualizar lo que necesita hacer en su computadora, además
de incorporar interés visual. También agregué varios elementos especiales en este libro
y otros de esta serie, que destacan la información importante adicional y le ayudan a
encontrar rápidamente lo que necesita cuando toma como referencia este libro. He aquí una
descripción de ellos:
Memo Notas marginales, consejos y recordatorios que aclaran un tema,
proporcionan consejos útiles o lo previenen sobre posibles peligros
La manera fácil Grupos prácticos de sugerencias que proporcionan listas de
métodos abreviados o de trucos que facilitan aún más la realización de tareas.
Vínculos Apuntadores a recursos externos útiles para descargas de software,
noticias e información, además de recursos técnicos.
La manera más fácil de crear una macro en
Excel es mediante la grabación de sus pasos
con la grabadora de macros de Excel. Luego, la
próxima ocasión que quiera dar estos pasos,
simplemente encienda la macro grabada
previamente y siéntese con una buena taza
de té mientras observa cómo la macro hace el
trabajo por usted.
Por ejemplo, si quisiera automatizar una tarea en Excel, debe grabarse a sí mismo
realizando la tarea al encender una pequeña grabadora de cinta virtual, que grabará cada
paso a medida que lo ingresa. Cuando haya terminado de ingresar sus pasos, apague la
grabadora y ¡listo! ¡Tiene una macro! Bueno, casi. Hay algunas tareas técnicas que deben
realizarse, como asignar nombre a la macro y decidir dónde almacenarla, pero para todos
los fines prácticos la grabación de macros es muy simple.
Macros con Excel 20072
He aquí los pasos básicos para grabar una macro:
Encienda la grabadora de macros.1.
Ingrese un nombre para la macro.2.
Indique una tecla de método abreviado para la macro (opcional).3.
Indique dónde quiere que se almacene la macro.4.
Ingrese una descripción para la macro (opcional).5.
Inicie la grabadora.6.
Ingrese sus pasos.7.
Detenga la grabadora.8.
Una vez que haya grabado una macro, puede ejecutarla de una de dos maneras:
Si asignó su macro a una combinación de teclas, puede oprimirla en cualquier
momento para ejecutar la macro.
Ya sea que haya asignado o no su macro a una combinación de teclas, puede acceder
a ésta desde la cinta de opciones. Despliegue una lista de macros, elija la macro que quiere ejecutar y luego elija Ejecutar.
Recorreremos cada uno de estos pasos de grabación y ejecución de macros y aprenderemos lo que significan, mientras grabamos algunas macros reales. Luego, más adelante en el capítulo, aprenderemos cómo probar sus macros, junto con métodos alternos para guardarlas y recuperarlas.
Despliegue de la cinta de opciones ProgramadorLa creación de macros es mucho más fácil con el uso de la cinta de opciones Programador, una barra de herramientas especialmente diseñada para ayudarle con la creación, ejecución y revisión de sus macros. Puede acceder a algunos de los comandos de la macro desde la barra de herramientas Ver, pero sus experiencias con macros serán mucho más fáciles si tiene la cinta de opciones Programador en la pantalla.
Siga estos pasos para agregar la cinta de opciones Programador a su pantalla de Excel:
Haga clic en el Botón de Office, en la esquina superior izquierda de la pantalla de 1. Excel. Aparece el menú Office.
3Capítulo 1 Grabación de macros
Haga clic en el botón Opciones de Excel, de la ventana de menús.2.
Asegúrese de que la opción Más frecuentes (véase la figura 1-1) está desplegada en 3. el lado izquierdo de la ventana Opciones de Excel.
Haga clic para marcar la casilla de verificación Mostrar ficha Programador en la 4. cinta de opciones.
Haga clic en Aceptar. La cinta de opciones Programador está disponible ahora al 5. hacer clic en la ficha Programador, en la parte superior de su pantalla de Excel.
Observe que la cinta de opciones Programador es ahora una parte permanente de sus opciones en la cinta. En caso de que decida ya no tener acceso a ella, puede regresar a la ventana Opciones de Excel y desmarcar la casilla de verificación correspondiente a la cinta de opciones Programador.
Creación de una macroLa primera macro que vamos a crear es una que reemplaza su nombre en una celda. Por lo general, cuando grabamos macros tratamos de grabar una tarea que esperamos usar una y
Figura 1-1 Despliegue de la cinta de opciones Programador
Casilla de verificación
de la ficha
Programador
Opciones más
frecuentes
Macros con Excel 20074
otra vez. De modo que si colocar su nombre en una celda es algo que haría repetidamente, esta macro funcionará bien al ahorrarle escribir. Si utiliza con frecuencia un nombre de una empresa en sus hojas de cálculo, o algún otro texto, puede ingresarlo en la macro en lugar de su propio nombre.
He aquí una frase que escuchará una y otra vez en este libro: dé todos los pasos. Esto significa que cada paso es importante, de modo que cuando analicemos la creación y grabación de macros no vamos a omitir ningún paso. Aunque éstos parezcan obvios (como colocar un espacio entre su nombre y su apellido), vamos a mencionar cada uno de los pasos. De esa manera, nada se omitirá y sus macros serán perfectas.
Así, he aquí los pasos que habrán de seguirse (todos los pasos) para nuestra primera macro:
Con su hoja de cálculo de Excel abierta, coloque el puntero en la celda A1. De esta 1. manera, todos estaremos exactamente en el mismo lugar cuando empecemos a grabar la macro.
Haga clic en la ficha Programador para abrir la cinta de opciones correspondiente.2.
Haga clic en la opción Grabar macro de la cinta de opciones. De manera alterna, 3. podría hacer clic en el botón Macro que aparece en la parte inferior izquierda de su pantalla de Excel.
En el cuadro de diálogo Grabar macro, como se muestra en la figura 1-2, en el 4. campo Nombre de la macro, ingrese NOMBRE1 como nombre de la macro. No debe haber espacios en el nombre de una macro.
En el campo Método abreviado, mantenga oprimida la tecla 5. MAYÚS y escriba n para que CTRL+MAYÚS+N sea el método abreviado de teclado para esta macro. (Nota: No usé CTRL+N para mi macro, porque ese método abreviado ya existe en
Figura 1-2 Grabación de una macro
Descripción adicional
Nombre de la macro
Tecla de método abreviado
Ubicación de
almacenamiento
5Capítulo 1 Grabación de macros
Figura 1-3 El botón Macro
Detenga o inicie la grabadora
de macros con este botón
Excel como el comando para cambiar un texto a negritas. Si oprime CTRL+N para el método abreviado de la macro, no recibirá una advertencia de que ya tiene otro uso; en cambio, el uso de la macro se superpondría al del comando original CTRL+N.)
En el campo Guardar macro en, elija “Libro de macros personal”. Se trata del libro 6. universal de macros que está accesible para todas las hojas de cálculo de Excel. Las otras opciones son “Libro nuevo” y “Este libro”. Si elige alguna de esas opciones, la macro se asocia sólo con uno de los libros y no está accesible para los demás.
Ingrese una descripción adicional para esta macro. Tiene la opción de ingresar 7. algún texto que describa lo que hace la macro o cuándo habrá de usarse.
Haga clic en Aceptar. Ahora la grabadora de macros se está ejecutando y grabará 8. todos sus tecleos.
De regreso en la hoja de cálculo, ingrese en la celda A1 su nombre como desea 9. grabarlo en esta macro, dejando un espacio entre cada palabra. Yo he ingresado “Gail Perry” en la celda A1.
Oprima 10. ENTER cuando haya terminado de ingresar su nombre. El puntero se mueve a la celda que se encuentra debajo de donde ingresó su nombre (en este caso, A2).
Haga clic en la opción Detener grabación, en la cinta de opciones Programador. De 11. manera alterna, puede hacer clic en el botón Macro, en la parte inferior izquierda de su pantalla de Excel, como se muestra en la figura 1-3. Ahora la macro está grabada.
Pruebe la macro NOMBRE1Después de grabar su macro, querrá darle una prueba de manejo para asegurarse de que su
macro hace lo previsto.
Siga estos pasos para probar su macro NOMBRE1:
Abra una nueva hoja de cálculo de Excel y coloque su puntero en la celda A1.1.
Oprima 2. CTRL+MAYÚS+N.
Ahora su nombre debe aparecer en la celda A1 y el puntero tiene que moverse a la 3. celda A2. ¡La macro es correcta!
Macros con Excel 20076
¿Qué sucede si coloca su puntero en una celda diferente de A1 y oprime el método
abreviado de teclado para el comando de la macro? Intentémoslo. Haga clic en cualquier
otra celda (diferente de la celda A1) en la hoja de cálculo, y luego oprima CTRL+MAYÚS+N.
¿Qué sucede? Su nombre aparece en la celda donde residía el puntero, pero ahora éste
pasa a la celda A2. En realidad, no importa en qué celda empiece cuando ejecute la macro
NOMBRE1. Su nombre se ingresará en la celda donde inicie y su puntero regresará a la
celda A2.¿Por qué sucede esto? Si piensa de nuevo en la creación de la macro NOMBRE1,
recordará que grabó la introducción de su nombre en la celda A1, habiendo colocado ya el puntero en esa celda antes de empezar el proceso de grabación. Luego oprimió ENTER y el puntero se movió a la celda A2. Esta macro grabó sólo eso: el proceso de ingresar su nombre en la celda ocupada en ese momento, y luego el proceso de su puntero moviéndose a la celda A2. Así, no importa dónde reproduzca esa macro, su puntero regresará a la celda A2 después de ingresar su nombre.
Una perspectiva diferente de la macroAfinemos un poco la macro NOMBRE1. Esta vez, digamos que queremos asegurar que
su nombre se ingrese siempre en la celda A1 cuando ejecuta su macro. Sólo necesitamos
hacer un pequeño cambio en la macro para realizar esta tarea. En lugar de colocar el
puntero en la celda A1 antes de empezar la grabación, para nuestra segunda macro,
encenderemos la grabadora de macros antes de mover el puntero. De esa manera, el
movimiento del puntero a la celda A1 se volverá parte de la macro.
He aquí los pasos a seguir para crear una macro que siempre coloque su nombre en la
celda A1:
Haga clic en la opción Grabar macro de la cinta de opciones.1.
En el campo Nombre de la macro, ingrese 2. NOMBRE2 como nombre de esta macro.
Dejemos en blanco el campo Método abreviado para esta macro.3.
En el campo Guardar macro en, elija “Libro de macros personal”.4.
Si quiere, ingrese una descripción adicional para esta macro.5.
Haga clic en Aceptar. Ahora la grabadora de macros está registrando sus pasos.6.
Oprima 7. CTRL+INICIO para enviar su puntero a la celda A1.
Ingrese su nombre como desea grabarlo en esta macro.8.
7Capítulo 1 Grabación de macros
Oprima 9. ENTER cuando haya terminado de ingresar su nombre. El puntero se mueve a la celda A2.
Haga clic en la opción Detener grabación en la cinta de opciones Programador.10.
Pruebe la macro NOMBRE2Abra una nueva hoja de cálculo. Probaremos esta nueva macro para ver si obtenemos los resultados deseados. Haga clic en cualquier lugar de la hoja de cálculo (pruebe haciendo clic en una celda diferente de A1). Debido a que no asignamos un método abreviado de teclado para esta macro, necesitamos acceder a ésta de manera diferente.
Siga estos pasos para ejecutar la macro NOMBRE2:
Haga clic en el botón Macros de la cinta de opciones Programador. Aparece la 1. ventana Macro.
Haga clic en la macro NOMBRE2 (debe aparecer como PERSONAL.2. XLSB!NOMBRE2.
Haga clic en el botón Ejecutar. Ahora su nombre debe aparecer en la celda A1, y el 3. puntero descansa en la celda A2.
Una variación más de las macrosHemos creado dos macros de nombre y cada una hace algo un poco diferente. Pero cada macro usó lo que llamamos referencias absolutas. Con el uso de referencias absolutas, Excel graba la ubicación exacta a la que mueve el puntero. En cambio, si usamos referencias relativas, Excel graba el movimiento de su puntero en relación con el lugar que ocupa en la hoja de cálculo. Esta macro debe ilustrar la diferencia entre los dos tipos de referencias. Vamos a crear una macro final para ingresar su nombre. En ésta nos gustaría mostrar su capacidad para colocar su nombre en cualquier celda del libro, y haremos que el puntero descanse en la celda que se encuentra debajo de su nombre cuando la macro se complete. Llamaremos a esta macro NOMBRE3.
He aquí los pasos para crear la macro NOMBRE3:
Haga clic en la opción Usar referencias relativas en la cinta de opciones Programador.1.
Haga clic en la opción Grabar macro de la cinta de opciones.2.
En el cuadro de diálogo Grabar macro, en el campo Nombre de la macro, ingrese 3. NOMBRE3 como nombre de esta macro.
Deje en blanco el campo Método abreviado para esta macr4. o.
En 5. el campo Grabar macro en, elija “Libro de macros personal”.
Macros con Excel 20078
Si lo prefiere, ingrese una descripción opcional para esta macro.6.
Haga clic en Aceptar. La grabadora de macros está grabando ahora sus pasos.7.
Sin mover su puntero a una nueva celda, escriba su nombre.8.
Oprima 9. ENTER cuando haya terminado de ingresar su nombre. El puntero se mueve a la celda debajo de su nombre.
Haga clic en la opción Detener grabación en la cinta de opciones Programador.10.
Pruebe la macro NOMBRE3Haga clic en cualquier lugar de la hoja de cálculo (no importa en cuál celda haga clic). Ahora probaremos NOMBRE3.
Haga clic en el botón Macros de la cinta de opciones Programador. Aparece la 1. ventana Macro.
Haga clic en la macro NOMBRE3 (debe aparecer como PERSONAL.2. XLSB!NOMBRE3.
Haga clic en el botón Ejecutar. Ahora su nombre debe aparecer en la celda donde 3. estaba el puntero, que descansa en la celda que se encuentra debajo de su nombre.
Experimente haciendo clic en diferentes celdas de la hoja de cálculo y ejecutando la 4. macro NOMBRE3. Su nombre debe aparecer cada vez donde lo quiera y el puntero descansa en la celda inferior.
Observe que cuando elige ejecutar una macro, no importa si la opción Usar referencias relativas está habilitada o no. Esta opción sólo afecta a la macro cuando se está grabando.
Preste atención a la importancia de decidir en qué celdas está su puntero antes y después de empezar a grabar la macro. Pequeñas decisiones como éstas son la esencia de la escritura correcta de macros. Necesita desarrollar una mentalidad para considerar cada contingencia como si tomara decisiones acerca de la manera en que creará sus macros.
Como puede ver, cada una de estas tres macros funciona de manera diferente:
NOMBRE1 coloca su nombre en cualquier celda, sin importar dónde esté localizado
su puntero y regresa éste a la celda A2 cuando ha terminado.
NOMBRE2 coloca su nombre en la celda A1, sin importar en qué celda ejecuta su
macro. Su puntero regresa a la celda A2 cuando termina la macro.
NOMBRE3 coloca su nombre en cualquier celda, sin importar dónde está localizado
el puntero y regresa éste a la celda que se encuentra debajo de su nombre.
9Capítulo 1 Grabación de macros
Estas pequeñas macros son simples y sólo realizan una tarea. Las diferencias entre estas macros son sutiles, pero importantes. A medida que avancemos en este libro, aprendiendo más acerca de la manera como se graban y crean las macros, verá que los problemas atendidos en estas tres macros se considerarán con frecuencia.
Macro simple de fechaEmpleando los conocimientos que ya obtuvo en este capítulo, creemos una macro sencilla que sitúe la fecha de hoy en la celda de su elección. En primer lugar, decida la manera como desea que aparezca la fecha. Ya hay una fórmula integrada en Excel que coloca la fecha de hoy en una celda. Pero esa fecha no es estática (cambia cada vez que reabre la hoja de cálculo). Suponga que quiere la fecha de hoy en una celda, que la fecha se quede de manera permanente en la celda sin actualizar y que aparezca en un formato como éste:
2 de febrero de 2009
En primer lugar, decida cómo le gustaría ingresar la fecha si estuviera escribiéndola. Recuerde seguir todos los pasos. Pienso que lo primero es hacer clic en la celda donde quiero que aparezca la fecha. Luego usaré la fecha HOY para ingresar la fórmula de la fecha de hoy. Pero esa fórmula usa un formato 2/2/09, y quiero ver el formato que desplegué arriba. Así que ahora necesito cambiar el formato de la celda al estilo que prefiero. Pero aún tengo un problema: la celda se actualizará cada vez que abra la hoja de cálculo. Y quiero que la fecha permanezca estática. Así que a continuación vamos a copiar la fecha al portapapeles. Por último, usaré el comando Pegado especial para pegar el valor de la celda en la propia celda, reemplazando la fórmula. Al final, oprimiré ESC para vaciar el portapapeles. Esto requiere varios pasos. Por ello deseo que una macro haga esto por mí, de modo que no tenga que recorrer todos estos pasos en el futuro cuando quiera asignar una fecha estática a una celda. Aquí vamos.
Figura 1-4 Grabación de la macro de fecha
Haga clic en la celda donde quiere que aparezca 1. la fecha.
Haga clic en la cinta de opciones Programador.2.
Haga clic para deshabilitar la consulta Usar 3. referencias relativas, si está activada (no necesitamos esta característica para esta macro).
Haga clic en el botón Grabar macro.4.
En el cuadro de diálogo Grabar macro (véase la 5. figura 1-4), ingrese un nombre de macro (he usado FechaDeHoy; recuerde que no puede usar espacios).
Macros con Excel 200710
A6. lmacene esta macro en el Libro de macros personal.
Ingrese una descripción opcional.7.
Haga clic en Aceptar.8.
Ahora es el momento de realizar los pasos descritos al principio de esta sección. En 9. primer lugar, haga clic en la cinta de opciones Fórmulas.
Haga clic en la opción Fecha y hora.10.
Haga clic en HOY.11.
En el cuadro Argumentos de función que aparece, haga clic en Aceptar.12.
Haga clic con el botón derecho en la fecha.13.
Elija Formato de celdas del menú emergente.14.
Haga clic en la categoría Fecha, en la ventana Formato de celdas.15.
Elija 14 de marzo de 2001 como Tipo. (Nota: Hay una lista de tipos de datos disponibles 16. en la cinta de opciones Inicio, pero este tipo en particular no aparece en esa lista.)
Haga clic en Aceptar. Ahora su fecha aparece correctamente. Pero esta fecha aún 17. incorpora la función HOY, lo que significa que cambiará si abre la hoja de cálculo mañana. Así que aún no hemos terminado.
Haga clic en la cinta de opciones Inicio.18.
Haga clic en la opción Copiar. (Nota: También podría hacer clic con el botón derecho 19. en la fecha y elegir Copiar del menú emergente.)
En la cinta de opciones Inicio, haga clic en la flecha que se encuentra bajo la opción 20. Pegar.
Elija Pegar valores. Observe que el valor en la barra de fórmulas cambia de HOY() a 21. la fecha real de hoy.
Oprima 22. ESC.
Haga clic en la cinta de opciones Programador.23.
Haga clic en Detener grabación.24.
¡Uff! Son 24 pasos para poner una fecha en una celda. ¿No está contento de que hayamos grabado esta tarea para uso futuro? Pruebe su macro al hacer clic en otra celda, eligiendo la opción Macros en la cinta de opciones Programador y haciendo clic en la macro FechaDeHoy y luego en el botón Ejecutar. Estupendo, ¿no?
11Capítulo 1 Grabación de macros
Formato con macrosHe aquí otra tarea fácil pero repetitiva que puede automatizar con una macro. Supongamos que tiene una pequeña hoja de cálculo que prepara cada mes. Los títulos, el formato y las fórmulas en la hoja de cálculo permanecen sin cambio, mes tras mes. A menudo lo que hace cuando es hora de elaborar una nueva hoja de cálculo es abrir la hoja de cálculo del último mes, borrar los números, guardarla como una hoja de cálculo mensual y llenarla con los números de este mes. No me sorprendería si por lo menos alguna vez ha eliminado los números del último mes y guardado los nuevos para este mes usando el nombre de la hoja de cálculo del último mes. ¡Uy!
Al crear el esqueleto de su hoja de cálculo como una macro, con fórmulas, formato y títulos, es fácil abrir un nuevo archivo de hoja de cálculo, reproducir su macro para configurar la hoja y luego colocar los números de este mes de manera segura, sin tener que preocuparse por guardar sobre la información del último mes.
Probémoslo. En la figura 1-5 se muestra la muy simple hoja de cálculo que crearemos.
He aquí un resumen de los pasos necesarios para crear esta hoja de cálculo: en una hoja de cálculo vacía, ingrese Mes en la celda A1, luego ingrese los nombres
de las ciudades México, Bogotá y Cuzco en las celdas B2, C2 y D2. Ingrese Total en la celda E2. Ponga estos totales en negritas a medida que los ingresa. Ingrese los títulos Ventas, Gastos y Utilidades en las celdas A3, A4 y A5. Ponga estos títulos en negritas a medida que los ingresa. En la celda B5, ingrese una fórmula para restar los gastos a las ventas. Copie la fórmula a C5 y D5. Ingrese una fórmula SUMA para sumar de la celda B3 a la D3 e ingrese el resultado en la celda E3. Copie la fórmula a las celdas E4 y E5.
He aquí los pasos para grabar esto como una macro llamada InformeMensual. Observe que se evitó el uso del ratón para arrastrar sobre las celdas
con el fin de aplicar formato o crear fórmulas.
Figura 1-5 Hoja de cálculo simple
Podría pensar que una plantilla
es una buena herramienta opcional
para crear el esqueleto de una
hoja de cálculo, y tendría razón.
Sin embargo, la ventaja de usar
una macro para esta tarea es que
puede llamar al esqueleto de la
hoja de cálculo en cualquier lugar
usando la macro, incluso desde
una hoja de cálculo existente.
Con una hoja de cálculo abierta, haga clic en la 1. cinta de opciones Programador.
Habilite la característica Usar referencias 2. relativas.
Haga clic en Grabar macros.3.
Ingrese 4. InformeMensual como nombre de esta macro.
Macros con Excel 200712
Guar5. de la macro en el Libro de macros personal.
Ingrese una descripción, si lo desea.6.
Haga clic en Aceptar.7.
Ingrese 8. Mes en la celda A1.
Ingrese 9. México en la celda B2 y oprima CTRL+N para que el título se ponga en negritas.
Ingrese 10. Bogotá en la celda C2 y cámbiela a negritas; ingrese Cuzco en la celda D2 y póngala en negritas; ingrese Total en la celda E2 y aplíquele negritas.
Ingrese 11. Ventas en la celda A3 y cámbiela a negritas; ingrese Gastos en la celda A4 y póngala en negritas; e ingrese Utilidades en la celda A5 y aplíquele negritas.
Lleve el puntero a la celda B5.12.
Escriba un signo de igual (=) y luego coloque el puntero en B3, escriba un guión (-) 13. y llévelo a B4. Oprima ENTER para completar la fórmula.
Copie el contenido de la celda B5 (yo usé 14. CTRL+INSERT; usted también puede hacer clic con el botón derecho y elegir Copiar, o hacer clic en Copiar en la cinta de opciones Inicio).
Pegue en las celdas C5 y D5.15.
Coloque el puntero en la celda E3.16.
Ingrese la fórmula 17. =SUMA( y luego haga clic en la celda B3, mantenga oprimida la tecla MAYÚS y haga clic en la celda D3.
Oprima 18. ENTER.
Copie el contenido de la celda E3 en las celdas E4 y E5.19.
Haga clic en la cinta de opciones Programador y deshabilite la grabadora de macros, 20. o haga clic en el botón Macro en su barra de tareas para apagarla.
Pruebe primero su macro al ingresar datos en la hoja de cálculo para asegurarse de que sus fórmulas funcionan, y luego haga clic en cualquier lugar de su hoja de cálculo o en una nueva y ejecute la macro InformeMensual para desplegar el esqueleto de su informe.
Si no funciona alguna de sus
macros, no se preocupe por eso
en este momento. Analizaremos
la depuración de macros en el
siguiente capítulo.
13Capítulo 1 Grabación de macros
Guardado de macrosCuando creó sus tres macros NOMBRE, se le dieron tres opciones para guardar las macros. Elegimos guardarlas en el Libro de macros personal. Este libro se carga automáticamente cuando abre Excel, y está disponible para todos los libros, de modo que estas tres macros están ahora disponibles para todos sus libros de Excel, incluidos los que pudo haber creado y guardado antes.
Guardado en el Libro de macros personalEncontrará que cuando trata de cerrar Excel, recibirá un mensaje que le pregunta si quiere guardar los cambios que hizo a su Libro de macros personal. Si hace clic en Sí, sus macros se guardarán y estarán disponibles para usted la próxima vez que abra EXCEL.
El Libro de macros personal es un libro oculto, que normalmente no está accesible como un libro visible. El nombre del archivo es Personal.xlsb. En páginas posteriores de este libro nos referiremos más al Libro de macros personal.
Guardado en Este libro (el actual)Otra opción consiste en guardar las macros en este libro. Algunas macros se relacionan con libros específicos y no son útiles en otros. Por ejemplo, si crea una macro que ofrece al usuario la opción de realizar ciertos cálculos sobre los datos de un libro existente, y los cálculos sólo se relacionan con ese libro, no hay necesidad de hacer que la macro quede disponible para todos en el Libro de macros personal. En cambio, guardaría una macro como ésta en el libro actual.
Figura 1-6 Guardado de una hoja de cálculo que contiene macros
Ubicación del libro
de trabajo
Nombre del libro
Activar macros
Macros con Excel 200714
Cuando elige guardar una macro en su libro actual, también debe guardar el libro para conservar la macro. Cuando esté listo para guardar un libro que contiene una macro, debe elegir Libro de Excel habilitado para macros como tipo de libro. Cuando aparezca la ventana Guardar como, siga estos pasos:
Elija la carpeta donde desea guardar el libro en el campo Guardar en (véase la figura 1-6).1.
Ingrese el nombre del libro en el campo Nombre de archivo.2.
Elija Libro de Excel habilitado para macros en el campo Guardar como tipo.3.
Haga clic en Guardar.4.
Guardado en un nuevo libroLa tercera opción consiste en guardar una macro en un nuevo libro. Algunas personas quieren crear macros que estén disponibles para usarlas en otros libros, pero no desean que queden disponibles para todos en el Libro de macros personal. Al guardar las macros en un nuevo libro, elija cuando quiere que la macro esté disponible con sólo abrir ese libro.
En cuanto decida guardar su macro en un nuevo libro, Excel abrirá un nuevo libro en su pantalla. Excel le da al nuevo libro el nombre Libro seguido por un número. Si sólo ha
abierto un libro en esta sesión de Excel, se le llamará Libro2, hasta que lo guarde y le asigne un nuevo nombre. Si antes ha abierto dos libros, el nuevo se llamara Libro3 y así sucesivamente.
Cuando quiera usar la macro que ha guardado en un nuevo libro, debe abrir éste. Su macro quedará disponible para todos los libros de Excel que estén abiertos en su equipo, mientras el archivo esté abierto.
En el capítulo 2, “Edición de macros”, echaremos un vistazo al funcionamiento interno de las macros, y aprenderá a editar y corregir problemas en macros que ya ha creado.
¡Cuidado! ¡Parecerá que no
hay nada en el nuevo libro!
Sin embargo, cuando trate de
guardarlo, se le indicará que lo
guarde como un libro habilitado
para macros.
Preste atención que si decide no
guardar el nuevo libro, perderá su
nueva macro.
En este capítulo nos referiremos a la
aplicación de correcciones y cambios simples
a las macros que ha grabado. Utilizaremos
el Editor de Visual Basic para acceder a las
macros que ya ha creado en el capítulo 1.
Revisaremos esas macros, estudiaremos la
manera como se crearon y haremos algunas
ediciones fáciles. Más adelante, en este libro,
aprenderemos acerca del diseño de macros desde cero al usar el Editor de Visual Basic, y
eso será importante porque muchas macros no pueden grabarse y en cambio tienen que
escribirse, paso a paso. Cuando estemos listos para trabajar en la escritura de macros, se
sentirá cómodo con el Editor, y la idea de diseñar una macro escribiendo los comandos no
le parecerá aterradora.
Macros con Excel 200716
Apertura del editor de Visual BasicLa apertura del editor de Visual Basic es tan fácil que lo puede hacer en un solo paso:
En el grupo Código de la cinta de 1. opciones Programador, como se muestra en la figura 2-1, haga clic en Visual Basic.
Es todo: ¡ya ha abierto el editor!
Examine el editor de Visual BasicHagamos un pequeño recorrido por el editor de VB, porque esta pantalla tiene un aspecto muy diferente de su hoja de cálculo normal de Excel. Revisaremos algunos de los elementos del editor con los que querrá familiarizarse.
Explorador de proyectosEl Explorador de proyectos aparece a la izquierda de la pantalla de Visual Basic, como se muestra en la figura 2-2. Si no lo ve, elija Ver | Explorador de proyectos, del menú, u oprima CTRL+R. El Explorador despliega una lista de todos los libros abiertos en Excel, incluido el Libro de macros personal
Haga clic en la opción Visual Basic
Figura 2-1 El grupo Código de la cinta de opciones
Programador
Botón Ver objeto
Objetos
Botón Alternar carpetas
Submenú Objeto
Botón Ver código
Títulos de libros
Módulos
Figura 2-2 El Explorador de proyectos
(PERSONAL.XLSB), que siempre está abierto, pero que es un libro oculto. Los objetos de Microsoft Excel aparecen como un submenú. Debajo de cada título de libro hay entradas para cada hoja del libro y una entrada para todo el libro. Al hacer clic en cualquiera de los nombres de una hoja o en la entrada This Workbook se le permite ver una lista de las propiedades asociadas con esa hoja o libro en la ventana Propiedades (que se explicará con más detalle en la sección “Ventana Propiedades”, en páginas posteriores de este capítulo). Si se han creado macros dentro del libro (y creamos varias en el capítulo 1 que se encuentran en el Libro de macros personal), verá un submenú para los módulos debajo del título del libro (Módulo1, Módulo2, etc.). Los módulos contienen procedimientos (macros) que Excel puede ejecutar.
17Capítulo 2 Edición de macros
Hay tres botones en la parte superior del Explorador de proyectos. Haga clic en el botón Ver código para desplegar una ventana de código a la derecha de su pantalla de VB. (Esta ventana Código se explicará con más detalle en la sección “Ventana Código”, en páginas posteriores de este capítulo.) Si la ventana de código ya está desplegada, al hacer clic en el botón no ocurre nada. Observe que debe
seleccionar primero un módulo para activar este botón. Haga clic en el botón Ver objeto con un objeto seleccionado (como una de las hojas o libros desplegados en la lista de proyectos) y aparecerá el código de ese objeto. Por ejemplo, puede desplegar rápidamente Hoja1 de Libro1 al hacer clic en ese nombre de hoja y luego en el botón Ver objeto. El botón Alternar carpetas oculta y muestra de manera alternada las carpetas de la ventana Proyecto.
MódulosLos módulos son los lugares en donde se almacenan las macros. Si ha creado macros que se guardaron en un libro determinado, ese libro tendrá un módulo asociado con él y aparecerá en el Explorador de proyectos cuando se abra ese libro. El Libro de macros personal contiene módulos, y el código de las macros que creó en el capítulo reside en éstos. Puede hacer clic una vez en un nombre de módulo y usar el botón Ver código para desplegar el código.
Ventana PropiedadesLa ventana Propiedades despliega los atributos que están asociados con los diversos libros y hojas de Excel que se encuentran desplegados en el Explorador de proyectos. Si la ventana Propiedades no está visible en su ventana, elija Ver | Ventana Propiedades, del
menú de VB, o sólo oprima F4. Hay dos fichas en la ventana Propiedades, Alfabética y Por categorías, como se muestra en la figura 2-3. Cada ficha presenta la misma información, sólo que en orden diferente. Haga clic en una hoja de cálculo o un libro en el Explorador de proyectos y verá las propiedades asociadas en la ventana Propiedades. Un módulo no tiene ninguna propiedad asociada (aparte de su nombre).
Al hacer doble clic en el nombre
de un módulo se abre una
ventana de código que despliega
a éste para todas las macros
que residen dentro de dicho
módulo.
Figura 2-3 Atributos del libro seleccionado
Macros con Excel 200718
Ventana CódigoÉsta ventana despliega el código de Visual Basic asociado con el elemento que está seleccionado en el proyecto. Puede hacer doble clic en un elemento del Explorador de proyectos para ver el código asociado con él. Por ejemplo, en la figura 2-4 se muestra el código de las macros almacenadas en el módulo 1 del Libro de macros personal.
Figura 2-4 Código de macro en la ventana de código
Figura 2-5 La macro NOMBRE1
Inicio del procedimiento Sub
Texto informativo
Código de la macroFinal del procedimiento Sub
Aprendizaje de la lectura de macrosExaminemos las tres macros NOMBRE que creamos en el capítulo 1. Estas macros son muy similares entre sí, pero cada una nos proporciona la oportunidad de aprender algunos de los fundamentos acerca del funcionamiento del lenguaje de programación de macros. En la figura 2-5 se muestra el código de la macro NOMBRE1.
Macro NOMBRE1Como recordará, en la macro NOMBRE1 creada en el capítulo 1 primero colocaba su puntero en la celda A1 antes de grabar, y luego encendía la grabadora, escribía su nombre y oprimía ENTER. Al mirar el código de la macro de NOMBRE1, esto es lo que ve:
19Capítulo 2 Edición de macros
* Sub NOMBRE1()
A cada macro que realiza una tarea se le llama procedimiento Sub. La primera línea de un procedimiento Sub empieza con la palabra Sub seguida por el nombre de la macro. En este caso, el nombre de la macro es NOMBRE1. Si la macro se llamara “GrupoProductos”, la primera línea sería:
* Sub GrupoProductos()
Después del nombre de la macro hay un par de paréntesis. Si la macro requiere alguna información determinada para realizar su tarea, esa información, llamada argumentos, aparece dentro de los paréntesis.
Como se observa en la ventana de código, notará que algunas líneas empiezan con apóstrofos y otros no.
Líneas de comentarioVarias líneas que siguen a Sub Nombre empiezan con un apóstrofo. Éste distingue a las líneas como texto informativo que no afecta la operación de la macro y a menudo se le denomina comentarios. La información que podría ver en esta área de comentarios incluye el nombre de la macro, cualquier información de descripción opcional que ingresó cuando creó la macro y un método abreviado de teclado asociado con la macro. En el caso de la macro NOMBRE1, la información descriptiva incluye una línea que muestra el nombre de la macro y una que muestra el método abreviado de teclado CTRL+MAYÚS+N. Usted tiene permitido escribir información adicional aquí. Siempre y cuando empiece sus líneas con un apóstrofo, puede ingresar comentarios que no tendrán impacto en la operación de la macro.
Líneas de comandoLas líneas que siguen al texto informativo en la figura 2-5 son las de comando. Es la parte de la macro que contiene el lenguaje en código de Visual Basic que ejecuta la operación de la macro. Dependiendo de la complejidad de la macro y el número de comandos que debe aplicar, esta área podría ser muy corta (NOMBRE1 sólo incluye dos líneas de código) o muy larga. Miremos más de cerca las líneas de comando incluidas en la macro NOMBRE1.
ActiveCell.FormulaR1C1 = "Gail A. Perry, CPA"
ActiveCell alude a la celda en que reside su cursor. FormulaR1C1 significa que, para esta macro, la celda activa está designada como fila 1 columna 1 (R1C1, Row 1, Column 1). Éste es el punto del que se lanza la macro, de modo que cualquier referencia al movimiento de la celda en la macro se hará en relación con esta celda, la que se encuentra en la primera
Además de macros, puede
grabar funciones definidas por
el usuario en el editor de Visual
Basic. Las funciones empiezan
con la palabra Function en lugar
de Sub. Las funciones se analizan
en el capítulo 3.
Macros con Excel 200720
fila y la primera columna a partir de la que está empezando su puntero. No importa cuál celda designe como activa, cuando empiece a ejecutar esta macro, esa celda se considera R1C1 para los fines de esta macro. Consulte el análisis acerca de la macro NOMBRE3, en la sección “Macro NOMBRE3”, para conocer más información acerca de esta instrucción. En la macro NOMBRE1, esta información no se usa.
= "Gail A. Perry, CPA"
La información entre comillas, "Gail A. Perry, CPA", es la que la macro colocará en la celda.
Range("A2").Select
Range alude al rango de celdas que se seleccionará en esta macro.("A2") es el rango específico de celdas al que hace referencia esta línea de comando.
De modo que el rango de celdas “A2” alude a la celda única A2.Select es lo que se ha indicado a la macro que debe hacer con el rango de celdas
especificado. En este caso, la instrucción a la macro es seleccionar la celda A2.End Sub es siempre la última línea de la macro.Además de aprender los comandos básicos de las macros que hemos visto en nuestra
macro NOMBRE1, debe examinar el formato de la macro. La primera línea y la última aparecen en el margen izquierdo. Los apóstrofos a la izquierda del texto informativo también se encuentran en tal margen. Las líneas de comando de la macro se muestran con sangría.
Podrá ver los detalles que acompañan a los cambios más ligeros en los comandos de las macros NOMBRE2 y NOMBRE3.
Macro NOMBRE2La diferencia entre las macros NOMBRE1 y NOMBRE2 es que cuando grabamos la macro NOMBRE1, empezamos por colocar nuestro puntero en la celda A1 antes de grabar. La macro NOMBRE2 en el editor de Visual Basic (véase la figura 2-6) es casi igual que la macro NOMBRE1, excepto por estas diferencias:
Figura 2-6 La macro NOMBRE2
Información descriptiva
Código para empezar la macro en la celda A1
21Capítulo 2 Edición de macros
No hay un método abreviado de teclado para NOMBRE2.
Hay un breve texto descriptivo para NOMBRE2 (“Nombre en la celda A1”).
Hay un comando adicional en NOMBRE 2:
Range("A1").Select
El código que aparece en la primera línea del código en NOMBRE2 es el que se grabó
cuando se movió el puntero a la celda A1 después de encender la grabadora de macros.
Macro NOMBRE3La diferencia entre la macro NOMBRE3 y las otras es que ésta funciona desde cualquier posición, en lugar de suponer que el usuario colocará el puntero en la celda A1 para forzarlo a ir a esa celda. Con NOMBRE3, el usuario empieza con el puntero en cualquier celda, ejecuta la macro y el puntero termina en la celda debajo de la celda inicial. El código que coloca el nombre en la celda (ActiveCell.FormulaR1C1 = "Gail Perry") sigue siendo el mismo en las tres macros. Observe la ligera diferencia en el código para la macro NOMBRE3 que se muestra en la figura 2-7.
La última línea contiene este código:
ActiveCell.Offset (1, 0).Range("A1").Select
El comando Offset indica el movimiento del cursor. El comando de la macro está indicando que la nueva celda activa es la que se encuentra una fila abajo y 0 columnas a la derecha (1, 0) de la celda anterior. La instrucción Range("A1").Select indica que, para los fines de esta macro, la nueva ubicación del puntero se denominará como la celda “A1”. La ubicación de la celda puede estar en cualquier lugar de la hoja de cálculo, dependiendo de dónde se encuentre su puntero cuando ejecute la macro NOMBRE3; sin embargo, en lo que respecta a la macro, la nueva ubicación de la celda es A1, y así es como se hará referencia a la celda si se agrega cualquier código adicional a esta macro.
Figura 2-7 La macro NOMBRE3
El código Offset aparece
Macros con Excel 200722
Edición de macrosEs fácil hacer cambios de edición en las macros que ve en el editor de Visual Basic. Puede escribir en las macros como lo haría en cualquier documento, teniendo en cuenta por supuesto, que cuando escribe código, debe usar comandos reales de Visual Basic. Pero puede cambiar el nombre de una macro, ingresar o cambiar la información explicativa en las áreas de comentarios de la macro y cambiar, agregar y eliminar código de macros.
He aquí un cambio fácil. Supongamos que quiere cambiar el nombre que usó en la macro NOMBRE3. Ingresé mi nombre, “Gail Perry”, pero tal vez quiero usar la inicial de mi nombre y mi título profesional: “Gail A. Perry, CPA”. (¡O tal vez escribió mal su nombre y quiere corregirlo!) Puedo editar el nombre como aparece en la primera línea del código de la macro para que se lea de la manera en que quiero:
ActiveCell.FormulaR1C1 = "Gail A. Perry, CPA"
Si voy a una página de la hoja de cálculo y ejecuto la macro NOMBRE3, el cambio ya habrá aplicado y aparecerá el nombre revisado.
Guardado de una macro editadaAunque haga un cambio en su macro, y la pruebe y vea que el cambio se ha grabado, hay un paso necesario más para guardar una macro. Ese cambio que hizo será efectivo en cualquiera de sus hojas de cálculo, mientras que no cierre Excel. En cuanto trate de cerrarlo, se le preguntará si quiere guardar los cambios que hizo al Libro de macros personal. Debe responder Sí a esta pregunta, si quiere que los cambios se guarden de manera permanente.
En lugar de esperar a guardar sus macros cuando salga de Excel, puede guardarlo en cualquier momento en la pantalla de Visual Basic empleando cualquiera de estas técnicas:
Oprima CTRL+G.
Haga clic en el ícono Guardar, de la barra de herramientas de Visual Basic (véase la
figura 2-8).
Figura 2-8 Guarde los cambios hechos en Visual Basic
Haga clic aquí para guardar
23Capítulo 2 Edición de macros
Búsqueda de ayuda en Visual BasicCuando tenga interrogantes, encontrará que hay una amplia ayuda disponible para usted en el editor de Visual Basic.
Si quiere información adicional acerca de cualquier código que aparece en su macro,
haga clic con el botón derecho en una línea de código y elija Información rápida. Se considera que cada elemento de código es un objeto. Cuando pide Información rápida, aparece un recuadro con información acerca del tipo de objeto de que se trata.
Puede encontrar información más detallada acerca de objetos de Visual Basic en
el Examinador de objetos. Desde el interior del editor de Visual Basic, oprima F2, elija Ver | Examinador de objetos del menú o haga clic en el botón Examinador de
objetos en la barra de herramientas (véase la figura 2-9).
Figura 2-9 La barra de herramientas de Visual Basic
Botón Examinador de objetos
Ayuda
Figura 2-10 La ventana Examinador de objetos le lleva a obtener más ayuda
Ingrese aquí el comando o la instrucción
Haga clic para realizar la búsquedaHaga clic sobre los resultados
Aparece la ventana
Examinador de objetos,
como se muestra en la
figura 2-10. Ingrese el
comando o la instrucción
que desee explorar en el
campo Texto de búsqueda.
Haga clic en el botón con
los binoculares para realizar
esta búsqueda. Cuando
aparezca el resultado, haga
clic en la instrucción o
el comando en la lista de
resultados, y luego haga
clic en el botón Ayuda para
conocer más información.
Macros con Excel 200724
Otra manera de ingresar en el sistema de ayuda de Visual Basic es elegir Ayuda |
Ayuda de Microsoft Visual Basic del menú. Ingrese el nombre del objeto acerca del que desee información adicional, y luego haga clic en Buscar. Como opción, puede ingresar la información que está buscando en el campo de Ayuda, en el extremo derecho de la barra de herramientas de VB, donde dice “Escriba una pregunta” (véase la figura 2-11) y luego oprima ENTER. Cuando examine la información de ayuda para un objeto de VB, verá una definición, algún texto narrativo sobre la manera en que puede usarse el objeto, un ejemplo de código de VB empleando el objeto y una descripción de los resultados que producirá.
Puede buscar el contenido del material referenciado del programador de Excel, y tal
vez le resulte mejor organizado y menos abrumador que buscar en todo el sistema de
ayuda. Elija Ayuda | Ayuda de Microsoft Visual Basic del menú, u oprima F1. Aparece
la opción Desarrollador de Excel 2007. Haga clic en Referencia del modelo de objetos
de Excel. Aquí verá una lista detallada de objetos de VB. Haga clic en un objeto y
desplácese hacia abajo para encontrar información adicional acerca de ese objeto.
Una de las mejores maneras de aprender a usar los objetos de VB consiste en
grabar macros como lo hicimos en el capítulo 1 y luego estudiar el código resultante
en el editor de VB. Al examinar el código asociado con una macro que realiza con
éxito los pasos que grabó, aborda su sesión de aprendizaje sabiendo ya lo que hace
el código. Luego sólo es cuestión de familiarizarse con las instrucciones de código
que realizan cada tarea.
La manera más fácil de obtener ayudaDigamos que queremos regresar a la macro NOMBRE3 y, además de ingresar nuestro
nombre en una celda, deseamos que la macro centre el nombre en esa celda. Necesitamos
determinar el comando de la macro para centrar el texto. Puede encontrar lo que está
buscando en la referencia Programador de Excel, pero primero sirve de algo saber que
la alineación de la celda a la izquierda, al centro y a la derecha, se considera alineación
horizontal. Al saber esto, puede abrirse paso en la referencia del desarrollador para
finalmente encontrar la pantalla que describe la
manera de asignar el valor de centrar a la alineación
horizontal. Pero hay una manera mucho más fácil:
¡grabar una macro!
Figura 2-11 Acceso rápido a la ayuda de Excel
Ingrese aquí su pregunta
No es necesario que ingrese su
consulta en forma de pregunta.
25Capítulo 2 Edición de macros
En cualquier momento, puede grabar una macro que realice una tarea. Luego examine la macro en el editor de VB, encuentre el código que necesite, y copie y pegue ese código en su macro existente. Después de eso, puede eliminar la macro de ejemplo que creó porque ya no la necesita.
Para el ejemplo del centrado del texto, siga estos pasos:
Regrese a su hoja de cálculo (haga clic en el botón Ver Microsoft Excel en el extremo 1. izquierdo de la barra de herramientas de VB).
Habilite la grabadora de macros (Grabar macros en la cinta de opciones Programador).2.
Asigne a esta macro el nombre Prueba1 y guárdela en 3. este libro. No hay necesidad de usar el Libro de macros personal para esta macro (no se requiere acceder a esta macro desde cualquier otra hoja de cálculo).
Con su puntero en cualquier celda, despliegue la cinta de opciones Inicio, y luego 4. haga clic en el botón Centrar el texto. No es necesario que haya algún texto en la celda para realizar esta tarea, y no importa cuál celda use. Todo lo que estamos haciendo aquí es cosechar código.
Despliegue la cinta de opciones Programador y haga clic en Detener grabación.5.
Haga clic en el botón Visual Basic para regresar al editor de VB.6.
Verá que se ha agregado un módulo para el libro actual a la ventana Proyecto. Haga 7. doble clic en ese módulo para desplegar la ventana de código. Aparece la macro Prueba1 (véase la figura 2-12).
Es más probable que su
ventana de VB aún esté abierta.
Al oprimir ALT+TAB puede ir
rápidamente a la ventana de VB.
Código para centrar el contenido de la celda
Figura 2-12 Código de macro para formar celdas
Macros con Excel 200726
Observe que se han asignado varios atributos a la selección en la macro Prueba1. 8. Cada vez que aplique un cambio de formato, como el comando de centrado a una celda, el código de la macro asociado muestra un grupo de atributos. Para nuestra situación, sólo necesitamos el código para centrar texto. Éste sería:
With Selection
.HorizontalAligment = xlCenter
End With
El resto de las instrucciones de formato no son parte necesaria del comando para centrar texto en una celda.
Copie y pegue las tres líneas de código mostradas en el paso 8 en su macro 9. NOMBRE3, debajo de la línea que describe el contenido de la celda activa (ActiveCell) y antes de la línea que contiene el comando Offset. (Copié y pegué todo el bloque de código y luego borré las líneas que no necesitaba.) Su macro NOMBRE3 ahora tendrá este aspecto (con su nombre en lugar del mío):
Sub NOMBRE3()'' NOMBRE3 Macro
' Nombre en cualquier celda; el puntero va a la celda debajo del nombre.''
ActiveCell.FormulaR1C1 = "Gail A. Perry, CPA"With Selection
.HorizontalAlignment = xlCenterEnd WithActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Regrese a su hoja de cálculo y pruebe la macro NOMBRE3 al hacer clic en cualquier 10. celda y luego en Macros de la cinta de opciones Programador. Elija NOMBRE3 y haga clic en Ejecutar. Verá que su nombre aparece en la celda actual y está centrado.
Recuerde que cuando cierre
Excel, se le preguntará si quiere
guardar los cambios en el Libro
de macros personal. Asegúrese
de responder Sí para guardar
los cambios que hizo a la macro
NOMBRE3.
Ya no necesita la macro Prueba1. Regrese al 11.
editor de VB y en la ventana Proyecto, haga
clic con el botón derecho en el módulo que
contiene esa macro y elija Quitar Módulo1. Se
le preguntará si desea exportar el módulo antes
de eliminarlo. Responda No. El módulo se habrá
ido, la macro Prueba1 se habrá ido también, y
habrá realizado algo de limpieza.
Vamos a entrar en el mundo de la
construcción de macros de la manera fácil
(empleando los principios que ya empezamos
a explorar en los capítulos 1 y 2). En este
capítulo crearemos varias macros útiles
mientras seguimos familiarizándonos con Visual Basic. Debido a que el objetivo de este
libro es aprender a construir macros a un ritmo cómodo y comprensible, en este capítulo
nos concentraremos en la grabación de macros y luego en el uso del código grabado para
hacer nuevas macros.
Como ya conoce la manera de realizar muchas tareas en Excel (estoy dando por hecho
que si está listo para construir macros, ya domina los fundamentos), aprovecharemos
el conocimiento que posee para crear macros que puedan hacer más fácil, eficiente y
gratificante su experiencia con Excel.
Macros con Excel 200728
En primer lugar, crearemos macros que realizan algunas tareas repetitivas. Hay dos tipos de éstas:
Las tareas que realiza con frecuencia, en diferentes hojas de cálculo.
Las tareas que requieren repetición dentro de una sola hoja de cálculo.
Aquí nos ocuparemos principalmente del primer tipo de tareas repetitivas. Cuando lleguemos a los capítulos 10 y 11, aprenderemos acerca de macros que se repiten a sí mismas dentro de una sola hoja de cálculo.
Además, aprenderemos acerca de la aplicación de lo que conocemos acerca de macros para crear funciones personalizadas.
Despliegue de fórmulas como valoresHay ocasiones en que quiere que una hoja de cálculo esté disponible para alguien más que no necesita ver las fórmulas que usó para calcular los números de la hoja. Esta macro le permite eliminar rápidamente las fórmulas de celdas seleccionadas. Después de que aplique la macro, el valor que aparece en la barra de fórmulas es el mismo que en la celda; ninguna fórmula aparece en la hoja de cálculo.
Empiece por abrir una hoja de cálculo que contiene fórmulas. La hoja de cálculo de la figura 3-1 incluye fórmulas que calculan la comisión de varios vendedores; esas fórmulas son confidenciales, así que queremos ocultar el cálculo en la columna Bono.
El primer paso al crear una macro debe ser planear el proceso de cómo debe realizarse el procedimiento completo. ¡Recuerde realizar todos los pasos! Para cambiar la fórmula en una celda por un valor, he aquí los pasos que debo seguir:
Figura 3-1 Las fórmulas aparecen en la barra de fórmulas
Cambie esta fórmula por un valorFlecha hacia abajo del botón Pegar
29Capítulo 3 Creación de macros en Visual Basic
Hacer clic en la celda que contiene la fórmula.1.
Copiar la fórmula al portapapeles (hacer clic en el botón Copiar de la cinta de 2. opciones Inicio).
Abrir el menú Pegar (hacer clic en la flecha hacia debajo de Pegar, en la cinta de 3. opciones Inicio).
Elegir Pegar valores.4.
Eliminar el recuadro que indica que el contenido de la celda aún se encuentra en el 5. portapapeles (oprima ENTER o ESC).
Ahora que ha comprendido los pasos, es hora de grabar ese proceso en una macro. He aquí los pasos para volver automático este proceso y hacer que la macro quede disponible para otras hojas de cálculo.
Con la hoja de cálculo que contiene las fórmulas abiertas, haga clic en una celda que 1. contiene una fórmula que desee ocultar.
Haga clic en Grabar macro en la cinta de opciones Programador. No es necesario 2. usar referencias relativas para esta macro, porque queremos tener la posibilidad de aplicarla celda tras celda, no hacer que tenga relación con celdas específicas.
Asigne un nombre a la macro. Yo he usado FórmulaAValor.3.
Asegúrese de que la macro va al Libro de macros personal.4.
Estamos seleccionando la
celda antes de grabar la macro;
no queremos que la macro
seleccione una celda por
nosotros.
Si en una celda cambia una
fórmula por un valor, el proceso
es permanente. Una vez que se
ha eliminado la fórmula, no va a
desplegar la fórmula de nuevo.
Haga clic en Aceptar. No di a esta macro una 5. descripción; el nombre de la macro parece suficientemente descriptivo.
Haga clic en Copiar en la cinta de opciones 6. Inicio.
Haga clic en la flecha hacia abajo del botón Pegar 7. en la cinta de opciones Inicio.
Haga clic en Pegar valores. Observe que la 8. fórmula en la barra de fórmulas cambia de inmediato por un valor.
Oprima 9. ESC.
Apague la grabadora de macros.10.
Macros con Excel 200730
Pruebe la macroHaga una ejecución de prueba con su macro. Haga clic en una celda que contenga
una fórmula y, luego, en el botón Macros de la cinta de opciones Programador. Elija
FórmulaAValor y haga clic en Ejecutar.
Ahora probemos la selección de un rango de celdas y la nueva ejecución de la macro.
Así como puede seleccionar un rango de celdas y realizar otras operaciones, puede usar
su macro de la misma manera. Resalte un rango de celdas que contiene fórmulas y luego
haga clic en Macros y elija FórmulaAValor. Ahora todas las celdas resaltadas sólo contienen
valores y la fórmula ya no aparece.
Visualización del código de la macroEs hora de echar un vistazo a esta macro en el editor de Visual Basic. Haga clic en el botón
Visual Basic, en la cinta de opciones Programador. El código de su macro estará localizado
en uno de los módulos del Libro de macros personal. Verá este libro en la ventana Proyecto.
Para ver el código de los módulos dentro de ese libro, haga doble clic en los nombres de
los módulos, en la ventana Proyecto. Como opción, puede elegir Herramientas | Macros,
en el editor de VB, seleccionar Proyecto VBA (PERSONAL.XLSB) en el campo Macros en,
y cuando aparezca la macro que desee ver en la lista Nombre de macro, haga clic en ella y
luego en el botón Modificar.
He aquí el código que aparece:
Sub FórmulaAValor()Selection.CopySelection.PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone, SkipBlanks _:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Al examinar el código, vemos que la primera línea de código bajo el nombre de la
macro, Selection.Copy, copia la celda seleccionada al portapapeles. A continuación
se ejecuta el comando Pegado especial, pero revise todas las instrucciones que siguen a
Selection.PasteSpecial:
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False,
Transpose:=False
31Capítulo 3 Creación de macros en Visual Basic
Todas estas instrucciones representan los elementos que acompañan al uso del comando
Pegado especial en Visual Basic. El único comando que en realidad ejecuta un cambio en la
hoja de cálculo es Paste:=xlPasteValues. El resto de los comandos son superfluos e
innecesarios para la ejecución de la macro. Puede eliminarlos, si desea limpiar el código de
su macro, pero no pasa nada dejarlos allí.
La última línea del código, Application.CutCopyMode = False, es el comando
que se grabó cuando se oprimió la tecla ESC. Este comando elimina la información del
portapapeles y elimina el marco alrededor de las celdas seleccionadas.
Si quiere experimentar aún más, puede eliminar los elementos excesivos (las líneas
Operation, SkipBlanks y Transpose) de la macro y luego probarla de nuevo. Verá
que funciona bien y elimina las fórmulas de sus celdas, reemplazándolas con valores. El
código de la macro ya limpio se verá así:
Sub FórmulaAValor()' FórmulaAValor Macro
Selection.CopySelection.PasteSpecial Paste:=xlPasteValuesApplication.CutCopyMode = False
End Sub
Elaboración de una macro a partir de pequeñas macrosAl revisar la nueva cinta de opciones en Excel, puede ver que Microsoft ha puesto a su disposición muchos comandos que puede aplicar con el rápido clic del ratón. Comandos que antes tenía que buscar entre menús ahora están disponibles en las cintas de opciones. Pero aunque los comandos están visibles, aún tiene que realizar algunos pasos para usarlos. En primer lugar, tiene que imaginar en cuál cinta de opciones se encuentra su comando y luego tiene que buscar su ícono o revisar en los menús desplegables que aparecen por aquí y por allá en las cintas de opciones. Algunos comandos se encuentran en el menú contextual (el menú de acceso directo que se despliega) o la minibarra de herramientas que aparece cuando hace clic con el botón derecho en la hoja de cálculo.
Si usa de manera rutinaria varios comandos cuando crea o edita hojas de cálculo, ahorre tiempo al colocar estos comandos en una macro. De esa manera, cada vez que abra una nueva hoja de cálculo, si necesita aplicar esos cambios puede hacer todos a la vez al ejecutar una macro. Haga la prueba de grabar una macro que use todos los comandos a la vez, pero tal vez sea más fácil grabar cada comando por separado y luego integrar todos los comandos en una macro en el editor de VB.
Macros con Excel 200732
Para este ejercicio, grabaremos macros que realicen estas tareas:
Establecer las líneas guía para que se impriman.
Cambiar la orientación de la página de vertical a horizontal.
Expandir el ancho de la columna a 10.
Grabe macros pequeñasLa primera macro que vamos a grabar habilitará las líneas guía para la impresión de la hoja de cálculo. Por lo general, éstas sólo son para despliegue; no se imprimen a menos que lo indique. La habilitación de las líneas guía imprimibles requiere que marque la casilla de verificación Imprimir, del área Líneas de cuadrícula, en la cinta de opciones Diseño de página.
Encienda la grabadora de macros.1.
Llame a esta macro LíneasGuía.2.
Guarde la macro en 3. este libro. No vamos a necesitar esta pequeña macro (tomaremos el código que necesitamos y luego podemos eliminar la macro cuando cerremos el libro sin guardarla).
Haga clic en Aceptar.4.
Haga clic en la cinta de opciones Diseño de página.5.
En el área Opciones de la hoja, marque la casilla de verificación Imprimir, debajo de 6. la característica Líneas de cuadrícula (véase la figura 3-2).
Apague la grabadora.7.
Figura 3-2 Cambio de las opciones de la hoja
Clic para revisar el cuadro Líneas de cuadrícula
A continuación grabaremos una macro para cambiar la orientación de la página de vertical a horizontal. Para realizar esta tarea en Excel, activamos la cinta de opciones Diseño de página, hacemos clic en la flecha de la opción Orientación y luego hacemos clic en Horizontal, como se muestra en la figura 3-3. Así que grabemos esto:
33Capítulo 3 Creación de macros en Visual Basic
Podría preguntarse qué debe hacer
si, cuando despliegue la cinta de
opciones Diseño de página, la
casilla de verificación Imprimir ya
está marcada. La grabadora de
macros está ejecutándose pero
no puede realizar la tarea. Siga
adelante y haga clic en la casilla
Imprimir. Esto tendrá el efecto
de desmarcarla. No importa.
Corregiremos esto en el editor de
VB.
Encienda la grabadora de macros.1.
Nombre: 2. Orientación. Ubicación: Este libro.
Haga clic en la ficha Diseño de página.3.
Haga clic en la flecha hacia abajo del botón 4. Orientación.
Haga clic en Horizontal.5.
Apague la grabadora.6. Figura 3-3 Cambio de la orientación
Haga clic en la opción Horizontal
Como puede ver, este proceso de grabación de macros es muy fácil. Nos queda una macro por grabar, y luego será hora de poner todo nuestro proyecto en una macro que podamos usar de manera repetida. Para esta macro final queremos expandir el ancho de la columna para que despliegue 10 caracteres (en oposición a la opción predeterminada de 8.43 caracteres). Necesitamos decidir cuántas columnas tendrán esta designación. La manera más fácil de proceder consiste en cambiar el ancho de las columnas en toda la hoja de cálculo. De esa forma habremos cubierto cualquier número de columnas que podríamos necesitar. Por tanto, cuando se grabe
esta macro, seleccionaremos toda la hoja de cálculo y luego haremos el ajuste de columnas para que todas las columnas se vean afectadas. Por último, agregaremos un paso para hacer clic en la celda A1 para que la selección de todo el libro se deshabilite. He aquí los pasos:
Encienda la grabadora de macros.1.
Nombre: 2. AnchoColumna. Ubicación: Este libro.
Haga clic en el cuadro Seleccionar todo que aparece sobre la fila número 1, a la 3. izquierda de la columna A.
Haga clic con el botón derecho sobre una letra de columna y elija Ancho de 4. columna del menú contextual.
En el cuadro de diálogo Ancho de columna (véase la figura 3-4), ingrese 5. 10 como nuevo ancho.
Haga clic en Aceptar.6.
Haga clic en la celda7. A1.
Apague la grabadora de macro8. s.
Macros con Excel 200734
Pruebe las macrosAntes de seguir adelante, probemos nuestras macros para asegurarnos de que hacen lo que se supone que deben hacer. Abra un nuevo libro. En la cinta de opciones Programador, haga clic en Macros, seleccione la macro LíneasGuía y luego haga clic en Ejecutar. Repita estos
pasos con las macros Orientación y AnchoColumna. Si hay algún problema en la ejecución de cualquiera de las macros, se le redirigirá al editor de VB con un mensaje de error. En lugar de tratar de depurar estas pequeñas macros, lo más fácil es borrar el código de la macro en el editor de VB, regresar a su hoja de cálculo y volver a grabar la macro.
Recolección del código de la macroAhora que estamos listos para ensamblar una macro que realizará todo lo que hicimos en las tres pequeñas macros, necesitamos dejar los confines amigables de la pantalla del libro y abrir el editor de VB. En la cinta de opciones Programador, haga clic en el botón Visual Basic, u oprima ALT+F11, y aparecerá el editor de VB.
Como recordará, almacenamos las pequeñas macros en el libro actual. Ni siquiera hemos dado un nombre a ese libro, y eso está bien, porque, cuando hayamos finalizado, no será necesario guardarlo, ni
las macros asociadas con él. Verá su libro y cualquier
otro que tenga abierto, en la ventana Explorador de
¿Le sorprendió que tuviera
acceso a sus nuevas macros
cuando abrió el nuevo libro?
Recuerde que, mientras esté
abierto el libro que contenga las
macros, éstas se encontrarán
disponibles para todos los demás
libros abiertos. En cuanto cierre
el libro donde están almacenadas
sus macros, éstas ya no se
encontrarán disponibles para
todos los demás libros.
Figura 3-4 Establecimiento de un nuevo ancho de columna
Seleccionar todas las celdas
No es necesario que
despliegue la cinta de opciones
Programador cada vez que
quiera encender o apagar la
grabadora de macros. Puede
realizar cualquiera de estas
acciones al hacer clic en el
botón Macros que se encuentra
en la parte inferior de su hoja de
cálculo.
35Capítulo 3 Creación de macros en Visual Basic
¡No cierre su libro! Sus macros
están almacenadas en él.
proyectos de su pantalla de VBA, como se muestra
en la figura 3-5. Si no aparece la ventana Explorador
de proyectos, elija Ver | Explorador de proyectos en el
editor de VB, u oprima CTRL+R.
Necesitamos encontrar las pequeñas macros
que creó. ¿Ve el libro que estábamos usando? Es un
VBAProject, que aparece en la ventana Explorador
de proyectos. Si le dio un nombre al libro, ese
nombre aparecerá entre paréntesis. Si no tiene
un nombre, verá (Libro1) o (Libro2) o cualquier
número de libro que esté usando. Las macros están
almacenadas en el módulo que acompaña al libro.
Verá el módulo en el menú que se encuentra debajo
del título del libro.
Haga doble clic en el módulo para abrir la ventana
de código del módulo. Recorra la ventana y verá que
todas sus pequeñas macros están allí. Estas macros
no se ven tan pequeñas, ¿verdad? Veremos que hay
una gran cantidad de material de código en esas
macros que no necesitamos. Para crear nuestra nueva
macro, vamos a copiar, o recolectar, sólo el código que
necesitamos.
Mientras recorre las macros, verá que cada una empieza y termina con una línea Sub.
También notará que una línea horizontal separa a cada macro (eso facilita la visualización
del final de una macro y el inicio de la otra).
Abra un nuevo móduloNecesitamos encontrar un lugar para colocar nuestra nueva macro. Dependiendo de
cuántas sesiones de creación de macros haya tenido y cuánto trabajo haya guardado, podría
haber varios módulos o sólo un par de ellos en el área VBAProject (PERSONAL.XLSB) del
Explorador de proyectos. Casi todos estos módulos ya tienen algún código almacenado.
Puede hacer adiciones a uno de esos módulos, pero para mantener las cosas limpias y
ordenadas abramos un nuevo módulo.
Haga clic en el título del Libro de macros personal (VBAProject (PERSONAL.XLSB)) y
luego elija Insertar | Módulo del menú. Aparece un nuevo módulo bajo el Libro de macros
personal, y se muestra una ventana de código nueva y vacía.
Figura 3-5 El Explorador de proyectos
Las macros están
almacenadas en los
módulos
Macros con Excel 200736
Organice sus ventanas de móduloEs probable que la nueva ventana aparezca justo sobre la otra ventana de código del
módulo, la que contiene el código de sus pequeñas macros. Desplace las barras de título
alrededor de las ventanas del módulo y cambie el tamaño de éstas para que pueda ver la
ventana del módulo del Libro de macros personal y la del módulo del libro que contiene su
código de las pequeñas macros (véase la figura 3-6).
Construya su nueva macroEstamos listos para empezar a elaborar su macro en el editor de VB, empleando las piezas de código que recolectará de las tres pequeñas macros que grabamos. He aquí los pasos para construir su nueva macro:
Ingrese la palabra 1. Sub seguida por un nombre para su nueva macro, después incluya un juego de paréntesis de apertura y cierre. He decidido dar a mi nueva macro el nombre MiHojaConfiguración. Recuerde que no puede incluir espacios en el nombre de su macro.
Oprima 2. ENTER cuando la primera línea de su macro esté en su lugar. ¡Sorpresa! La última línea de su macro (End Sub) aparece automáticamente. Todo el código que ingrese se colocará entre estas dos líneas de texto.
Figura 3-6 La ventana Código
37Capítulo 3 Creación de macros en Visual Basic
Puede ingresar todas las líneas
de comentarios que desee en
una macro; sólo asegúrese
de empezar cada una con un
apóstrofo. Puede ingresar líneas
en blanco si desea agregar algún
espacio entre los comentarios y
el código.
El primer comando With... End With contiene código que se relaciona con la impresión de las filas y columnas de título. No tiene nada que ver con la impresión de las líneas guía, y puede ignorar este segmento de código de la macro LíneasGuía.
La siguiente línea, ActiveSheet.PageSetup.PrintArea = "", es un comando que se relaciona con el área de impresión de la hoja de cálculo. Observe que no hay un comando entre las comillas. Esta línea de código no realiza ninguna operación y es innecesaria en el proceso de impresión de las líneas guía.
La tercera sección del código en la macro
LíneasGuía contiene otra instrucción With... End With. Ésta incluye muchas líneas de comando. Busque hacia abajo la línea que dice .PrintGridlines = True. Éste es el comando que buscamos, y es necesario que esté flanqueado por las instrucciones With... End With. El resto del código sólo explica las características predeterminadas de configuración de página, y como ninguna de estas características cambiará (aparte
Puede copiar y pegar la línea de
título de una macro existente en
la nueva ventana de módulo, y
luego sobrescribir el nombre de
la macro copiada con el de su
nueva macro.
La construcción With... End With es una característica común
de las macros VBA. Cada vez que
vea una instrucción que empiece
con With, recuerde que toda la
instrucción termina con la línea
End With, y así toda la colección
de información entre estas dos
líneas es parte del mismo código.
Ingrese algunas líneas de comentario debajo de la línea de título de la macro. 3. Empiece una línea de comentario con un apóstrofo. De esta manera el programa de la macro no tomará por error sus comentarios como código ni tratará de interpretar comandos de sus comentarios. En la línea de comentario puede describir su macro. Cuando oprima ENTER después de cada línea de comentario, verá que la línea cambia de color para distinguirla del código de programación.
Estamos listos para colocar algún código en esta macro. Empecemos con el código 4. de la macro LíneasGuía. Observe que hay tres secciones en el código de esta macro. La primera empieza con With ActiveSheet.PageSetup y termina con End With.
Macros con Excel 200738
También tiene la opción de
simplemente escribir las
líneas de código en la nueva
macro, pero no lo recomiendo.
Aunque suena que es muy
fácil escribir, es aún más fácil
escribir mal parte del texto u
omitir signos de puntuación.
No se arriesgue con su código.
Al copiar y pegar, se asegurará
de que su código sea exacto y
correcto.
Figura 3-7 El código de la macro
después de agregar la primera
pequeña macro
del comando Gridlines), este comando no es necesario para la operación de esta macro. He aquí el código que es importante para nosotros:
With ActiveSheet.PageSetup.PrintGridlines = True
End With
Puede copiar estas líneas de código en 5. particular y pegarlas en la nueva macro. O puede copiar y pegar todo el bloque que empieza con la segunda línea de código With ActiveSheet.PageSetup y terminarla con el código End With, y luego borrar todas las líneas que no son necesarias para esta macro.
En la figura 3-7 se muestra la macro hasta el mome6. nto.
En este punto ha ingresado código suficiente en la nueva macro como para que 7. realice una prueba. Tiene la estructura de macro correcta, con las líneas Sub y End Sub, y hay un comando de macros completo. Puede esperar hasta que hayamos terminado de probar la macro, o puede ir a una nueva hoja de cálculo y hacer ahora una prueba de manejo. Si decide probar la nueva macro, abra una nueva hoja de cálculo, haga clic en Macros en la cinta de opciones Programador, elija MiHojaConfiguración y haga clic en Ejecutar. Luego haga clic en la ficha de la cinta de opciones Diseño de página y verá que se ha marcado la casilla de verificación Imprimir de la característica Líneas de cuadrícula.
Estamos listos para el siguiente fragmento de código en nuestra nueva macro, 8. de modo que regresemos al editor de VB si aún no está allí. Encuentre la macro Orientación. Esta vez estamos buscando el código que cambia la orientación
39Capítulo 3 Creación de macros en Visual Basic
de vertical (la opción predeterminada) a horizontal. Una vez más, tenemos las
dos secciones With... End With de la macro y una línea de comandos
independiente relacionada con el área de impresión. En la segunda sección
With... End With se encuentra el código para la orientación:
.Orientation = xlLandscape
Observe que las instrucciones With... End With que flanquean a este código son
idénticas a las que aparecían en la macro LíneasGuía. ¿Adivine lo que significa? No
tiene que repetir estas instrucciones en su nueva macro. Puede repetir estas líneas de
comando si lo desea, y agregar el siguiente código a su nueva macro:
With ActiveSheet.PageSetup.Orientation = xlLandscape
End With
O puede ahorrarse algunas líneas y colocar el código de orientación dentro de la
instrucción With... End With existente, de la manera siguiente:
With ActiveSheet.PageSetup.PrintGridlines = True.Orientation = xlLandscape
End With
Tenemos que agregar una pieza más a nuestra macro: el comando para ampliar los 9. márgenes a 10 caracteres. Encuentre la macro AnchoColumna y busque el código
que aparece a continuación:
Cells.SelectSelection.ColumnWidth = 10Range("A1").Select
La primera línea de código es el comando para seleccionar todas las celdas de la hoja
de cálculo. La segunda línea ordena a Excel que tome la selección (todas las celdas)
y cambie el ancho de columna a 10. La línea final de código mueve el puntero a
la celda A1 y selecciona esa celda. Recuerde que hicimos esto para que no siga
seleccionada toda la hoja de cálculo cuando la macro deja de ejecutarse.
Es necesario agregar estas tres líneas de comando a su nueva macro. Seguirán a la
instrucción End With que ya aparece en su macro. Recuerde que puede copiar y
pegar estas líneas de comandos. La macro final tiene este aspecto:
Macros con Excel 200740
Sub MiHojaConfiguración()'' Macro que contiene comandos básicos de' configuración, incluida la habilitación de' líneas guía, el cambio de orientación y el' aumento del ancho de columna a 10 caracteres.'
With ActiveSheet.PageSetup.PrintGridlines = True.Orientation = xlLandscape
End WithCells.SelectSelection.ColumnWidth = 10Range("A1").Select
End Sub
Es más bien sorprendente mirar todas esas líneas de código en las pequeñas macros que
grabamos y ver que sólo necesitamos una cantidad tan pequeña de líneas de código para
completar nuestras tareas.
Pruebe su nueva macroEs hora de hundir el acelerador y ver la manera en que corre la nueva macro. Regrese a su área del libro (ALT+F11 lo lleva allí rápidamente) y abra un nuevo libro. Haga clic en la ficha Programador y luego en Macros, y encuentre su nueva macro en la lista. Haga clic en la macro MiHojaConfiguración y haga clic en Ejecutar.
Ahora se aplican todos los cambios a su nuevo libro. Haga una nueva revisión al abrir la cinta de opciones Diseño de página y revisar la orientación y el comando Imprimir de la característica Líneas de cuadrícula. Luego haga clic con el botón derecho en cualquier letra de columna y seleccione Ancho de columna. Verá que ahora el ancho de la columna es 10. Todos sus cambios deben haberse aplicado. Si la macro no funcionó como se planeó, regrese al editor de VB y examine la información precisa que se encuentra en la macro. Debe coincidir con el ejemplo dado en la sección anterior. Haga cualquier cambio necesario.
Elimine macros antiguasNo es necesario que conserve todas las pequeñas macros que creó en el proceso para la elaboración de la nueva macro. En realidad, es aconsejable eliminar las macros si existe posibilidad de que haya cambiado algunos elementos (por ejemplo, cortar y pegar texto en lugar de copiar y pegar, lo que afinaría la creación de su nueva macro, pero que evitaría
41Capítulo 3 Creación de macros en Visual Basic
que la pequeña macro hiciera el trabajo). El objetivo de crear las pequeñas macros fue simplemente proporcionar elementos de código para nuestra nueva macro. Ya se utilizaron con este fin y no son necesarias.
En el editor de VB puede simplemente eliminar el código de la macro antigua al resaltar el código y borrarlo.
He aquí otra manera de eliminar una macro. Regrese al libro que contiene las macros. En la ficha Programador, haga clic en el botón Macros. En el cuadro Nombre de la macro (véase la figura 3-8), haga clic en el nombre de la macro que ya no quiere, y luego haga clic
en el botón Eliminar. Se le preguntará si quiere eliminar la macro. Haga clic en Sí (véase la
figura 3-9), y la macro se eliminará.Por último, puede eliminar macros no deseadas con sólo eliminar el libro que contiene
las macros. Si cierra el libro sin guardarla, todo lo asociado con ese libro se eliminará, incluidas sus macros.
Eliminación de macros del Libro de macros personalMientras seguimos en el tema de eliminar macros, este es un buen momento para mencionar que el proceso de eliminar macros del Libro de macros personal es un poco complicado.
Puede abrir la lista de macros, como lo hicimos en el ejemplo anterior, y hacer clic en una macro que esté localizada en el Libro de macros personal, y luego hacer clic en Eliminar,
Figura 3-9 Haga clic en Sí para eliminar la macroFigura 3-8 Eliminación de macros no deseadas
Haga clic para eliminar la macro seleccionada
Seleccione una macro
Macros con Excel 200742
pero eso no lo llevará muy lejos. Aparecerá un mensaje que le indica que está tratando de editar una macro en un libro oculto y que tiene que mostrar el libro.
Debido a que el Libro de macros personal está oculto, se ha agregado una capa adicional de protección y su macro es sólo un poco más segura de lo que sería si estuviera en un
libro regular. Puede mostrar el Libro de macros personal al seguir estos pasos:
Des1. pliegue la cinta de opciones Vista.
Haga clic en el botón Mostrar ventana.2.
Elija PERSONAL.3.
Haga cl4. ic en Aceptar.
Ahora el libro se muestra y puede eliminar macros desde la opción Macros de la cinta de
opciones Programador.
Cuando haya terminado de eliminar macros, asegúrese de volver a ocultar el Libro de
macros personal. Con éste como su ventana activa, haga clic en el botón Ocultar ventana de
la cinta de opciones Vista y el libro volverá a ocultarse.Otro método, tal vez más fácil, de eliminar macros en el Libro de macros personal es ir
al editor de VB y eliminar el código. No tiene que mostrar/ocultar la hoja de cálculo para hacer los cambios en el editor de VB.
Cuando trate de cerrar Excel, se le preguntará si quiere guardar los cambios que ha hecho al Libro de macros personal. ¡Por todos los medios, responda Sí! No sólo se guardará cualquier eliminación que haya hecho, sino también todas las macros que creó durante esta sesión. De otra manera, si cierra Excel y decide no guardar los cambios que ha hecho al Libro de macros personal, ¡es momento de regresar al principio de este capítulo y volver a empezar!
Antes de que sigamos más allá con el
desarrollo de las macros, debemos dominar
la manera de guardar y seguir los pasos de
nuestras macros. Antes de que se dé cuenta,
tendrá docenas de macros y deseará contar
con algunas maneras fáciles de encontrar y
usar las macros que haya creado.
Macros con Excel 200744
Si está siguiendo este libro desde el principio, habrá creado un puñado de macros que
están almacenadas en el Libro de macros personal. Además, creó algunas macros que
pertenecían a un libro en particular, y luego esas macros desparecieron cuando decidimos
no guardar el libro. Cuenta con algunas opciones diferentes cuando decide dónde guardar
sus macros:
Guardar las macros en el Libro de macros personal. Estas macros están disponibles
para todos sus libros.
Guardar las macros en el libro activo que está usando cuando crea la macro. Estas
macros estarán disponibles para cualquier otro libro, siempre que esté abierto el
archivo del libro que contiene las macros y, por supuesto, esas macros siempre
estarán disponibles para cualquiera que use el libro en que se encuentran.
Guardar las macros en un libro dedicado a macros. La creación de libros de macros
le permite organizar sus macros de la manera que tenga más sentido para usted y
sus experiencias en Excel. Puede abrir un libro de macros cada vez que desee usar
las macros almacenadas en él.
Dónde almacenar macrosAhora que conoce sus opciones relacionadas con el lugar donde almacenará las macros,
puede empezar a pensar cómo desea organizarlas. ¿Quiere mantener las macros en
categorías, como macros usadas para formar hojas de cálculo, para organizar datos, para el
trabajo, para pasatiempos, y así sucesivamente? ¿O quiere tener ciertas macros disponibles
para todos sus proyectos de Excel? ¿Tiene macros que sólo usa cuando está trabajando en
una hoja de cálculo particular? La respuesta a estas preguntas le ayudará a decidir dónde
guardar sus macros.
La decisión del lugar en que se guardará una macro se toma cuando se empieza a
crearla. Si está grabando una, se elige una ubicación en el cuadro de diálogo Grabar macro.
Si está creando una macro en el editor de VB, debe abrir un módulo del libro donde desea
que se almacene la macro e ingresar el código en la ventana de código asociada con ese
módulo.
Guarde macros en el Libro de macros personalCasi todas las macros que hemos creado hasta ahora residen en el Libro de macros
personal. Estas macros están disponibles cada vez que abre Excel y en todas las hojas de
cálculo que esté usando. No tiene que buscarlas ni que abrir ningún archivo en especial
para encontrarlas.
45Capítulo 4 Almacenamiento de macros
Cuando hace cualquier cambio al Libro de macros personal, ya sea que grabe una nueva macro, edite una existente o cree una nueva en el editor de VB, o que elimine por completo una macro, necesitará guardar sus cambios. Puede guardarlos desde el interior del editor de VB. Asegúrese de que el puntero del ratón esté localizado en algún lugar dentro del Libro de macros personal, ya sea en una ventana de código, en uno de los elementos del Libro de macros personal en la ventana Proyecto o en la ventana Propiedades con un elemento del Libro de macros personal desplegado. Luego elija Archivo | Guardar Personal.XLSB del menú (véase la figura 4-1). Todos los cambios que haya hecho durante esta sesión
se guardarán. Si planea dedicar una gran cantidad de tiempo a realizar tareas en el editor de VB, tiene sentido guardar con frecuencia su libro de esta manera (no sólo el Libro de macros personal, sino cualquier libro en que esté haciendo cambios).
Como opción, puede cerrar el editor de VB sin guardar y no se perderá nada. Más adelante, cuando trate de cerrar Excel, verá un mensaje que le pregunta si quiere guardar los cambios que hizo al Libro de macros personal. Al hacer clic guardará todo su trabajo.
Use libros para macrosLas macros que se relacionan con tipos particulares de uso de Excel podrían almacenarse mejor en libros dedicados a ese uso. Por ejemplo, cada vez que necesite aplicar formato, puede abrir el libro que contiene las macros de formato. Luego, cuando sea necesario aplicar el formato a otras hojas de cálculo y tendrá acceso a todas las macros que necesite.
Una ventaja de almacenar macros en libros separados es que son portátiles. Puede copiar un archivo que contiene sus macros, darlo a alguien más, y sus macros estarán disponibles en la computadora de esa persona. Otra ventaja de almacenar macros en libros individuales es que puede organizar sus macros por tema y evitar poner muchas macros en el Libro de macros personal, lo que dificulta organizarlas todas.
Bajo las nuevas reglas de asignación de nombre a archivos para Excel 2007, los libros deben guardarse como archivos habilitados para macros con el fin de aprovechar las macros guardadas en ellos. Los archivos habilitados para macros tienen la extensión XLSM en lugar de la extensión XLSX que se aplica a los libros típicos de Excel. Trate de guardar un libro que contiene macros sin especificar que desea la extensión de archivo XLSM y recibirá un mensaje (véase la figura 4-2) explicando que, al guardar el libro sin habilitarlo para macros, lo guardará como si estuviera libre de macros. Todas las macros asociadas con ese libro se perderán.
Cuando guarde un libro habilitado para macros, elija Archivo | Guardar, y aparecerá el cuadro de diálogo Guardar como. Ingrese el nombre de archivo que desee usar, y luego
Figura 4-1 Guardar el Libro de
macros personal
Macros con Excel 200746
haga clic en la flecha hacia abajo del campo Guardar como tipo. Elija Libro de Excel habilitado para macros; se aplicará la extensión de archivo que necesita, y sus macros se guardarán y estarán disponibles para uso futuro.
Guarde macros en el libro actualLas macros de uso limitado pueden almacenarse en un libro particular. Por ejemplo, si crea una hoja de cálculo que analiza los datos de ventas ingresados por los vendedores y produce informes utilizando esos datos, tal vez quiera escribir una macro que le permita pedir a los vendedores que ingresen los datos necesarios para esos informes y luego generarlos. Esa macro tendría poco uso fuera de esa hoja de cálculo en particular, de modo que tiene sentido almacenar la macro dentro del libro.
Otro ejemplo es el que vimos en el capítulo 3. Creamos macros exclusivamente con el propósito de recolectar material codificado y no había necesidad de mantenerlas más allá de ese uso limitado, de modo que tenía sentido almacenarlas en la hoja de cálculo actual, y luego las macros que ya no eran necesarias se eliminaron cuando se cerró la hoja de cálculo sin guardarla.
Uso de módulos en VBADe manera muy sencilla, un módulo es el lugar donde reside el código de una macro. Puede considerar a los módulos como hojas de cálculo adicionales; sin embargo, no son visibles a menos que esté en el editor de Visual Basic, donde puede ver los contenidos de todos los módulos asociados con cualquier libro abierto, como también los módulos asociados con el Libro de macros personal.
Los nombres de los módulos pueden cambiarse en el editor de Visual Basic, de modo
que una vez que empieza a elaborar macros por su cuenta, puede organizarlas al colocarlas
en hojas de cálculo de módulo particulares y
asignarles nombres a las hojas con nombres que
tengan algún significado.
Para cambiar el nombre de un módulo, haga clic
una vez en él para seleccionarlo, haga doble clic en
el nombre del módulo en la ventana Propiedades
y luego ingrese un nuevo nombre. Por ejemplo, se
cambió el nombre del módulo que contiene todas las
Figura 4-2 Al hacer clic en Sí guardará el archivo sin macros
Si la ventana Propiedades no
aparece en el editor de VB, elija
Ver | Ventana Propiedades, del
menú, haga clic en el botón
Ventana Propiedades de la barra
de herramientas, u oprima F4.
47Capítulo 4 Almacenamiento de macros
Figura 4-3 Cambio de nombre
de los módulos
Aquí aparece el nuevo nombre
Cambie aquí el nombre del módulo
macros con nombre que se crearon en el capítulo 1 por MacrosNombre (véase la figura 4-3).
Éstas son algunas cosas que puede hacer con los módulos:
Ver el contenido de cualquier
módulo al hacer doble clic en el módulo, en la ventana Proyecto.
Insertar un nuevo módulo al
elegir Insertar | Módulo, del menú.
Copiar un módulo de un
libro a otro al arrastrar el módulo a otro libro en la ventana Proyecto. El módulo copiado tendrá el mismo nombre que el original.
Elaboración de macros que estén disponibles para los demásYa analizamos la opción de guardar macros dentro de un libro. En ese caso, puede dar éste a alguien más, y esa persona tendrá entonces acceso a las macros. Tome en cuenta que el usuario tendrá que estar de acuerdo con habilitar las macros para usar las que se encuentran en el libro.
Para copiar macros a otro libro, necesita tener abiertos en su computadora el libro de destino y el que contiene las macros. (Si las macros están en su Libro de macros personal, ese libro ya está abierto.) Siga esos pasos para copiar una macro a un nuevo libro.
Haga clic en la opción Seguridad de macros en la cinta de opciones Programador. Aparece la ventana Centro de confianza (véase la figura 4-4). Observe cuál configuración de macro está habilitada. Elija la opción Habilitar todas las macros (no recomendado; puede ejecutarse código posiblemente peligroso) y luego haga clic en Aceptar.
Haga clic en el botón Visual Basic u oprima 1. ALT+F11 para desplegar el editor de VB.
En la ventana Explorador de proyectos, encuentre el módulo o los módulos que 2. contienen la macro o las macros que desea copiar.
Macros con Excel 200748
Arrastre el módulo o los módulos al libro de destino.3.
Oprima 4. ALT+F11 para regresar a las hojas de cálculo.
Abra de nuevo el Centro de confianza (véase el paso 1) y regrese a la configuración 5. de macro que se había usado antes; luego haga clic en Aceptar.
Guarde el libro en que copió las macros con una extensión de archivo XLSM.6.
Protección de sus macrosHay varias razones por las que tal vez quiera salvaguardar sus macros. He aquí las que yo he tenido; tal vez las suyas sean más:
Trabajó mucho para crear su macro: no quiere que nadie más la cambie o, peor aún,
juegue con el código para que no funcione nunca más.
La información de su macro es privada: no quiere que otros usuarios conozcan los
secretos de la manera como operan sus macros.
Tiene tres opciones para proteger sus macros:
Puede hacer que las macros de VBA sean completamente inaccesibles para todos, 1. excepto usted mismo.
Puede hacer visibles las macros, pero no permitir que alguien que conozca la 2. contraseña que las protege haga cambios.
Puede permitir que sólo las personas que conocen su contraseña tengan derecho de 3. cambiar su código de VBA.
La opción de protección se encuentra dentro del editor de VBA. He aquí los pasos a seguir:
Figura 4-4 Habilitación de macros
Cambie la configuración de las macros
49Capítulo 4 Almacenamiento de macros
Haga clic en el nombre del proyecto en la 1. ventana Proyecto.
Haga clic con el botón derecho y elija 2. Propiedades de VBAProject (este comando también está disponible en el menú Herramientas).
Haga clic en la ficha Protección de la 3. ventana Propiedades del proyecto que aparece, como se muestra en la figura 4-5.
Marque Bloquear proyecto para 4. visualización, si quiere aplicar un bloqueo completo de sus macros de VBA. Nadie podrá editar ni ver sus macros, a menos que posean la contraseña correcta. Ingrese la contraseña en los campos proporcionados y luego haga clic en Aceptar.
¡Cuidado! Ya existen muchos
métodos abreviados de teclado
en Excel. Si elige utilizar uno
existente para su macro (como
CTRL+N, que se utiliza para activar
la característica de Negritas),
Excel cambiará el método
abreviado predeterminado por el
de su macro. El método abreviado
ya no funcionará para el comando
predeterminado. Consulte la lista
de métodos abreviados de teclado
existentes en Excel en el cuadro al
final de este capítulo.
Figura 4-5 Protección de macros
Marque aquí para restringir la visualización y edición del código de VBA
Ingrese dos veces la contraseña
Como opción, deje la casilla de verificación sin marcar, pero ingrese una contraseña 5. en los campos proporcionados si quiere que sus macros de VBA estén disponibles sólo para quienes conocen la contraseña.
Haga clic en Aceptar para guardar sus opciones6. .
Asignación de teclas de método abreviado a macrosLas macros que sólo usa de manera ocasional tal
vez no necesiten alguna característica especial de
acceso directo. Ya es lo suficientemente fácil hacer
clic en el botón Macros de la barra de herramientas
Programador, ver las macros disponibles, hacer clic
en la que desee y luego en el botón Ejecutar para
ejecutarla. Son sólo tres clics, o cuatro si tiene que
hacer clic en la ficha Programador (¿necesita ahorrar
más tiempo?).
Macros con Excel 200750
Bueno, al parecer la respuesta es sí, así que Excel
tiene una opción que le permite asignar macros a
métodos abreviados de teclado. Una vez que haya
asignado la combinación de teclas, puede oprimirla
en su teclado y la macro se ejecutará, omitiendo por
completo el menú Macros. Es muy simple, sobre
todo si prefiere usar más el teclado que el ratón,
pero por supuesto el truco está en que ¡tiene que
recordar el método abreviado que asignó a la macro!
Hay tres maneras de asignar una tecla de método
abreviado a una macro:
Grabación de macros Ingrese la combinación de teclas en el cuadro Grabar macros. Como se muestra en la figura 4-6, hay un campo Método abreviado, y la etiqueta del campo indica que, sin importar lo que ingrese, su método abreviado debe incluir la tecla CTRL. Puede ingresar una letra o un número en el cuadro Método abreviado. También tiene la opción de oprimir la tecla MAYÚS mientras ingresa su letra o número, y luego el método abreviado de la macro será CTRL+MAYÚS+cualquier tecla que ingrese. Sólo puede usar un número o letra para los métodos abreviados de su macro (o un carácter, si está usando la tecla MAYÚS con las teclas numéricas).
Edición de macros Cambie el método abreviado de teclado asociado con una macro al hacer clic, primero, en el botón Macros, de la cinta de opciones Programador. Encuentre la macro cuyo método abreviado quiere cambiar y
Figura 4-6 Asigne métodos abreviados de teclado
cuando elija un nombre para su macro
En el editor de VB hemos visto
que asignó un método abreviado
de teclado cuando grabó
una macro, que ese método
abreviado aparece en la sección
de comentarios, en la parte
superior de la macro, justo abajo
del nombre de éste. No puede
editar la información del método
abreviado de teclado que aparece
en el editor de VB y esperar que
el método abreviado cambie.
Esta información aparece como
comentario, no es un comando,
de modo que ningún cambio que
haga al comentario afectará al
comando del método abreviado.
¡Recuerde! Los métodos
abreviados de teclado siempre
empiezan con CTRL y sólo
contienen un carácter (una
minúscula o un número). Tiene
la opción de incluir la tecla MAYÚS
después de CTRL, si quiere usar
una letra mayúscula o un carácter
que sólo se accede con la opción
MAYÚS.
51Capítulo 4 Almacenamiento de macros
Figura 4-7 Ingrese, edite o elimine un
método abreviado de teclado
haga clic una vez en esa macro. Haga clic en el botón Opciones. Aparece el cuadro de diálogo Opciones de macro (véase la figura 4-7), mostrando el nombre de la macro, la tecla de método abreviado (si la hay) asociada con esa macro y el campo Descripción. En este cuadro de diálogo, puede cambiar una tecla de método abreviado, borrar una existente o agregar una tecla donde no existía alguna. Haga clic en Aceptar para guardar sus cambios.
Creación de nuevas macros de VBA Cuando crea una nueva macro de VBA empleando el editor de VB, no hay posibilidad de asignar un método abreviado de teclado a la macro. En cambio, debe regresar al punto anterior, donde se indica cómo usar la característica Opciones de macro para asignar un método abreviado a una nueva macro.
CTRL+MAYÚS+( Muestra las filas ocultas de la selección.
CTRL+MAYÚS+) Muestra las columnas ocultas de la selección.
CTRL+MAYÚS+& Aplica el contorno a las celdas seleccionadas.
CTRL+MAYÚS_ Quita el contorno de las celdas seleccionadas.
CTRL+E Aplica el formato de número General.
CTRL+MAYÚS+$ Aplica el formato Moneda con dos posiciones decimales (los números
negativos aparecen entre paréntesis).
CTRL+MAYÚS+% Aplica el formato Porcentaje sin posiciones decimales.
CTRL+MAYÚS+^ Aplica el formato numérico Exponencial con dos posiciones
decimales.
CTRL+MAYÚS+# Aplica el formato Fecha con el día, mes y año.
CTRL+MAYÚS+@ Aplica el formato Hora con la hora y los minutos e indica AM o PM.
CTRL+MAYÚS+! Aplica el formato Número con dos posiciones decimales, separador
de miles y signo menos (–) para los valores negativos.
CTRL+MAYÚS+* Selecciona el área actual alrededor de la celda activa (el área de datos
delimitada por filas y columnas en blanco).
En una tabla dinámica, selecciona todo el informe de tabla dinámica.
CTRL+MAYÚS+: Inserta la hora actual.
CTRL+MAYÚS+" Copia el valor de la celda situada sobre la celda activa, en la celda o en
la barra de fórmulas.
CTRL+MAYÚS+SIGNO MÁS( +) Muestra el cuadro de diálogo Insertar para insertar celdas en blanco.
Macros con Excel 200752
CTRL+SIGNO MENOS (–) Muestra el cuadro de diálogo Eliminar para eliminar las celdas
seleccionadas.
CTRL+; Inserta la fecha actual.
ALT+` Cambia entre mostrar valores de celda y mostrar fórmulas de la hoja
de cálculo.
CTRL+' Copia una fórmula de la celda situada sobre la celda activa, en la
celda o en la barra de fórmulas.
CTRL+1 Muestra el cuadro de diálogo Formato de celdas.
CTRL+2 Aplica o quita el formato de negritas.
CTRL+3 Aplica o quita el formato de cursiva.
CTRL+4 Aplica o quita el formato de subrayado.
CTRL+5 Aplica o quita el formato de tachado.
CTRL+6 Cambia entre ocultar objetos, mostrarlos o exhibir marcadores de los
objetos.
CTRL+8 Muestra u oculta símbolos de esquema.
CTRL+9 Oculta filas seleccionadas.
CTRL+0 Oculta columnas seleccionadas.
CTRL+E Selecciona toda la hoja de cálculo.
Si la hoja de cálculo contiene datos, CTRL+E selecciona la región actual.
Si oprime CTRL+E una segunda vez, se selecciona la región actual y sus
filas de resumen. Oprimiendo CTRL+E por tercera vez, se selecciona
toda la hoja de cálculo.
Cuando el punto de inserción está a la derecha de un nombre de
función en una fórmula, muestra el cuadro de diálogo Argumentos de
función.
CTRL+MAYÚS+A inserta los paréntesis y nombres de argumento cuando
el punto de inserción está a la derecha de un nombre de función en
una fórmula.
CTRL+N Aplica o quita el formato de negritas.
CTRL+C Copia las celdas seleccionadas.
CTRL+C seguido de otro CTRL+C muestra el portapapeles.
CTRL+J Utiliza el comando Rellenar hacia abajo para copiar el contenido y el
formato de la celda situada más arriba de un rango seleccionado a las
celdas de abajo.
CTRL+B Muestra el cuadro de diálogo Buscar y reemplazar con la ficha Buscar
seleccionada.
MAYÚS+F5 también muestra esta ficha, mientras que MAYÚS+F4 repite la
última acción de buscar.
CTRL+MAYÚS+F abre el cuadro de diálogo Formato de celdas con la ficha
Fuente seleccionada.
CTRL+I Muestra el cuadro de diálogo Ir a.
53Capítulo 4 Almacenamiento de macros
F5 también muestra este cuadro de diálogo.
CTRL+L Muestra el cuadro de diálogo Buscar y reemplazar con la ficha
Reemplazar seleccionada.
CTRL+K Aplica o quita el formato de cursiva.
CTRL+ALT+K Muestra el cuadro de diálogo Insertar hipervínculo para hipervínculos
nuevos o el cuadro de diálogo Modificar hipervínculo para
hipervínculos existentes seleccionados.
CTRL+U Crea un nuevo libro en blanco.
CTRL+A Muestra el cuadro de diálogo Abrir para abrir o buscar un archivo.
CTRL+MAYÚS+O selecciona todas las celdas que contienen comentarios.
CTRL+P Muestra el cuadro de diálogo Imprimir.
CTRL+MAYÚS+F abre el cuadro de diálogo formato de celdas con la ficha
fuente seleccionada.
CTRL+D Utiliza el comando Rellenar hacia la derecha para copiar el contenido
y el formato de la celda situada más a la izquierda de un rango
seleccionado a las celdas de la derecha.
CTRL+G Guarda el archivo activo con el nombre de archivo, la ubicación y el
formato de archivo actuales.
CTRL+F Muestra el cuadro de diálogo Crear tabla.
CTRL+S Aplica o quita el formato de subrayado.
CTRL+MAYÚS+U cambia entre expandir y contraer de la barra de fórmulas.
CTRL+V Inserta el contenido del Portapapeles en el punto de inserción y
reemplaza cualquier selección. Disponible solamente después de
haber cortado o copiado un objeto, texto o el contenido de una celda.
CTRL+R Cierra la ventana del libro seleccionado.
CTRL+X Corta las celdas seleccionadas.
CTRL+Y Repite el último comando o acción, si es posible.
CTRL+Z Utiliza el comando Deshacer para invertir el último comando o
eliminar la última entrada que escribió.
CTRL+MAYÚS+Z utiliza los comandos deshacer o rehacer para invertir
o restaurar la última corrección automática cuando se muestran las
etiquetas inteligentes de autocorrección.
Asignación de macros a la barra de herramientasComo ya sabe, el antiguo concepto de personalizar las barras de herramientas en versiones anteriores de Excel ya no existe en 2007. Las barras de herramientas con sus botones modificables y los menús con sus comandos intercambiables son del pasado.
Macros con Excel 200754
Bueno, casi. Hay un área de la central de comandos de Excel donde aún tiene cierta flexibilidad, y es la pequeña barra de herramientas Acceso rápido que se encuentra en la
parte superior de la pantalla de Excel (véase la figura 4-8). No tiene total flexibilidad con esta barra de herramientas, pero sí cuenta con más libertad que con las cintas de opciones.
Agregue comandos comunes a la barra de herramientasLa barra de herramientas Acceso rápido se personaliza al hacer clic en la flecha hacia abajo que se encuentra a la derecha de la barra de herramientas. Verá un menú corto de algunos de los comandos más familiares de Excel, incluidos Nuevo, Abrir, Guardar, Impresión rápida, así sucesivamente, como se muestra en la figura 4-9. Los comandos con una marca de verificación ya aparecen en su barra de herramientas. Haga clic en cualquiera de los comandos no marcados para agregarlos a la barra.
Figura 4-9 Personalización de la barra de herramientas Acceso rápido
Haga clic aquí para acceder a comandos adicionales
Marque los elementos para desplegarlos en el menú
Figura 4-8 Barra de herramientas Acceso rápido de Excel
Haga clic para mostrar el menú
Agregue comandos adicionales a la barra de herramientasTiene la opción de personalizar aún más al elegir la opción Más comandos, que aparece en el menú Personalizar. En la ventana Opciones de Excel que aparece (véase la figura 4-10), haga clic en cualquier comando que aparezca en la lista del lado izquierdo de la ventana y luego haga clic en Agregar para agregar el comando a la barra de herramientas. Uno de
55Capítulo 4 Almacenamiento de macros
los comandos de la lista es Ver macros. La adición de este comando a la barra de herramientas Acceso rápido le da la capacidad de desplegar la ventana Macros en cualquier momento. Una vez que haya agregado este comando a la barra de herramientas, se ahorra la molestia (si puede llamarle así a hacer un clic) de abrir la cinta de opciones Programador antes de que pueda desplegar la ventana Macros.
¡Pero espere! ¡Hay más! En la parte superior de la lista hay un menú desplegable llamado Comandos disponibles en (véase la figura 4-10). Haga clic en la flecha para desplegar el menú de comandos (véase la figura 4-11) y verá que no sólo tiene acceso a todos los comandos de Excel, cualquiera de ellos puede agregarse a la barra de herramientas Acceso rápido, sino que también puede hacer clic en la opción Macros, y todas las macros que residen en su Libro de macros personal se desplegarán en la lista de
Figura 4-10 Elección de botones para agregar a la barra de herramientas
Haga clic para guardar sus cambios
Haga clic aquí para desplegar los comandos de la barra de herramientas
La elección de Ver macros coloca el botón Macros en la barra de herramientas
Haga clic para agregar un botón a la barra de herramientas
Figura 4-11 Despliegue de sus macros
Elija Macros para desplegar todas las macros en la lista de comandos
Macros con Excel 200756
comandos. Elija cualquier macro al hacer clic en ella, luego haga clic en Agregar y habrá agregado la macro a la lista de comandos del botón que quiere desplegar en su barra de herramientas.
Agregue macros a la barra de herramientas¡Pero espere! ¡Todavía hay más! (sueno como en un infomercial, ¿no? ¡Estoy a punto de
lanzar un juego de cuchillos sin costo adicional!). Si agrega más de una macro a su barra de herramientas Acceso rápido, verá muy pronto que todas las macros se parecen. Tienen el mismo diseño para sus botones. ¡Esto no sirve! ¡Usted quiere que se distingan entre sí! Por supuesto, puede dejar el aspecto del botón como está y hacer clic en Aceptar. Cuando los botones de macro aparezcan en su barra de herramientas serán iguales, pero puede colocar el cursor sobre el botón y ver el texto informativo que le indica el nombre de la macro.
Otra opción consiste en cambiar el aspecto de los botones. De regreso a la ventana Personalizar, haga clic una vez en cualquier comando de su lista, a la derecha de la ventana (en este caso, querrá hacer clic en una de las macros que ha agregado a la barra de herramientas). Luego haga clic en el botón Modificar, que se encuentra en la parte inferior de la lista. Aparece la ventana Modificar botón, como se muestra en la figura 4-12, mostrando casi 200 diseños de botón para que elija uno. Más aún, en el campo Nombre para mostrar, puede cambiar el
Figura 4-12 Personalización del botón de una macro específica
Ingrese un nombre descriptivo
Haga clic en una imagen para el botón de esta macro
Haga clic en una macro
57Capítulo 4 Almacenamiento de macros
Figura 4-13 La barra
de herramientas
personalizada
Barra de herramientas Acceso rápido personalizada
¡Ya ha visto esta ventana
Opciones de Excel! Cuando hace
clic en el botón Opciones de
Excel, en la parte superior de la
pantalla, aparece esta ventana.
Haga clic en Personalizar, en la
parte izquierda de la ventana,
para acceder a la información de
personalización de la barra de
herramientas.
nombre de algo aburrido como “PERSONAL.XLSB!FórmulaAValor” por “Cambiar fórmulas por valores”. Haga clic en Aceptar para cerrar la ventana después de hacer sus selecciones.
Personalice su barra de herramientas para un libro determinadoAlgo más, antes de que deje la ventana Opciones de Excel. Arriba de la lista, a la derecha, hay una lista desplegable Personalizar barra de herramientas de acceso rápido. Como opción predeterminada, cualquier cambio que haga en esta ventana afecta la barra de herramientas Acceso rápido de todo Excel; pero si lo prefiere, puede elegir la otra opción, Para Libro1, donde Libro1 es el nombre de su libro actual. En realidad cuenta con la opción
de crear una barra de herramientas Acceso rápido que pertenezca exclusivamente a un libro. Se trata de una herramienta poderosa para las ocasiones en que cree macros que pertenecen a un solo libro. Facilite el acceso a todas las macros desde la barra de herramientas Acceso rápido de ese solo libro.
Por último, haga clic en Aceptar para guardar sus cambios. Ahora puede echar un vistazo a su nueva barra de herramientas, completamente personalizada para hacer más fáciles sus experiencias en Excel (figura 4-13).
En este capítulo verá cómo escribir macros en
lugar de simplemente grabarlas. La grabación
es un excelente método, pero resulta más fácil
hacer algunas cosas a mano, o simplemente
no se pueden grabar. Por ejemplo, puede
desplegar mensajes para el usuario en la barra de estado de Excel, como se ilustrará en
un ejemplo del capítulo 7. Pero no hay manera de grabar esta acción. Debe programarse
manualmente al escribir el código.
Y recuerde que también hay un tercer método muy común para crear macros. Primero
graba y usa el editor para modificar lo que ha grabado.
Este capítulo concluye con una revisión general de los comandos de Visual Basic de uso
más común, además de las características básicas más importantes del editor de VB.
Macros con Excel 200760
Escritura de su primera macroInicie Excel y luego oprima ALT+F11. Verá el editor de VB como se muestra en la figura 5-1.
Como opción predeterminada, se muestran tres ventanas principales en el editor de VB. En la esquina superior izquierda se encuentra el Explorador de proyectos, que despliega también el libro actual, además de las hojas de cálculo que contiene. Debajo se encuentra la ventana Propiedades, donde se muestran los diferentes atributos del objeto seleccionado (en este caso, Hoja1). También puede usar esta ventana para editar las propiedades desplegadas. Por ejemplo, podría hacer clic en la propiedad Nombre y cambiarlo de Hoja1 a Revisión o lo que desee. Cuando oprime ENTER, el nombre cambia en la ventana Propiedades y en el libro de Excel. Observe que no es el mismo que en la propiedad (Nombre) en la parte superior de la ventana Propiedades, que se usa internamente dentro del editor de VB. Lo más importante es que la ventana Propiedades le da una manera conveniente de editar las características de los objetos. Esta ventana es más útil cuando se crean ventanas personalizadas de interacción con el usuario llamadas UserForms (este tema se desarrolla en el capítulo 7).
Es en la ventana de código donde usted escribe sus macros. Puede hacer doble clic en cualquier hoja o en Este libro, en el Explorador de proyectos, para abrir una ventana de código de hoja o del libro actual. La ventana pasa de gris a blanco, lo que significa que ahora puede escribir comandos de programación en ella.
Figura 5-1 El editor de VB, mostrando el Explorador de proyectos, la ventana Propiedades y la ventana de código
Ventana Propiedades
Explorador de proyectos
Ventana de código
61Capítulo 5 Comprensión de los comandos de las macros
Figura 5-2 Grabación en el Libro de macros
personal en el Explorador de proyectos
Excel le permite almacenar macros en
cualquier hoja de cálculo, en el libro
actual (ThisWorkbook en el Explorador de
proyectos) o en módulos. (Los módulos son
contenedores convenientes donde puede
poner las macros que desee que estén
accesibles desde cualquier otra ubicación
en un proyecto.) Además, si escribe o graba
una macro realmente útil que quiere tener
disponible siempre, hay una manera de
almacenar macros para usarlas con cualquier
libro de Excel que abra, ahora o en el futuro.
Para que una macro quede disponible
en cualquier lugar y momento, grábela o
escríbala en el Libro de macros personal.
Cada vez que Excel inicia, carga este libro
especial (es el equivalente al archivo Normal.
dotm de Microsoft Office Word 2007).
Recuerde que cuando hace clic en el botón
Grabar macro en Excel, se abre un cuadro
de diálogo. En la figura 5-2 puede ver, en el
cuadro de lista Guardar macro en, que una
opción es almacenar esta macro grabada en
el Libro de macros personal. Al elegir esta
opción se agrega este libro y sus macros al
Explorador de proyectos. Así que la grabación
es una manera rápida de escribir también
macros en la Libro de macros personal.
Siga adelante y agregue un módulo ahora. Elija Insertar | Módulo. Ahora se agrega Módulo1 al Explorador de proyectos, y su ventana de código queda disponible para que programe. Ahora puede escribir una macro en la ventana de código, oprimir F5 para probarla y, si es necesario, hacer algunas modificaciones para que funcione de la manera que desea.
Imaginemos que para su primera macro hecha de manera manual, quiere crear una etiqueta vertical en lugar del típico encabezado de columna. Tiene un rango de números, como se muestra en
la figura 5-3, y quiere describirlos al desplegar una etiqueta a la izquierda. Puede ver un ejemplo en la figura 5-4.
En el Módulo1 del editor de VB, escriba esta macro:
Sub Girar() With Selection
.MergeCells = True .VerticalAlignment = xlCenter .Orientation = 90 .Font.Size = 20
End With
End Sub
Macros con Excel 200762
Figura 5-3
Quiere crear una
macro que gire
estas etiquetas
para que sean
verticales
Ahora pruébela al arrastrar su puntero para seleccionar de la celda A10 a la A1. Observe que esto incluye, en la celda A1, el título Puntos de junio, como se muestra en la figura 5-3.
Con el rango seleccionado, regrese al editor: oprima ALT+F11, haga clic en cualquier lugar de su macro y luego oprima F5 para ejecutarla. Debe ver el resultado que se muestra en la figura 5-4.
Entendiendo el código En esta macro no tiene que seleccionar manualmente las celdas que desea girar (sobre todo en el código). En cambio, permite que el usuario seleccione el rango y luego use el comando With Selection. Este método es obviamente más flexible que un
rango rígido (pero, por supuesto, exige que el usuario dé pasos adicionales).La estructura With (entre los comandos With Selection y End With) es práctica
si quiere hacer varios cambios a la vez a un rango u otro objeto. No tiene que escribir varias veces el destino (Selection en este caso), como aquí:
La grabación de macros es una
estupenda manera de hacer que
VB cree código. Pero otro método
abreviado consiste en revisar
el sistema de ayuda del editor
de VB para encontrar ejemplos
de código. Tal vez no necesite
trabajar desde cero si logra
encontrar código de ejemplo que
haga lo que busca, o por lo menos
algo similar. Sólo copie el código
de la pantalla de ayuda, péguelo
en una ventana de código en el
editor y luego modifíquelo de
acuerdo con lo necesario.
63Capítulo 5 Comprensión de los comandos de las macros
Figura 5-4 Así es como desea que se vea la hoja después de ejecutar su macro
Selection.MergeCells = TrueSelection.VerticalAlignment = xlCenterSelection.Orientation = 90
Selection.Font.Size = 20
En lugar de esta redundancia, pone el conjunto completo de cambios en una estructura With. Las estructuras With también mejoran la legibilidad de su código, porque puede ver que todos los elementos de la lista de propiedades pertenecen al mismo objeto.
Además, observe que sólo he incluido las propiedades necesarias en este código: MergeCells, VerticalAlignment, Orientation y Font.Size. No es necesario especificar propiedades adicionales (como FontStyle o Underline) porque no estoy cambiando la fuente ni agregando subrayado a este texto.
Limpieza del códigoTenía la opción de grabar la macro del ejemplo anterior, en lugar de escribirla a mano. Probemos ese método para ver lo que sucede. Cuando se graba una macro, todas las
propiedades del objeto se graban, no sólo las que en realidad se necesitan para la modificación que se está realizando. Esto significa que aunque sólo esté cambiando la orientación, la propiedad pertinente y muchas otras también se incluyen en la macro grabada.
Macros con Excel 200764
Veamos cómo funciona esto y cómo corregirlo. Siga estos pasos:
Selec1. cione una celda con algún texto en ella.
Haga clic en la ficha Programador de la cinta de opciones, y luego haga clic en el 2. ícono Grabar macro para iniciar el proceso de grabación.
Haga clic con el botón derecho en esa celda y elija Formato de celdas en el menú 3. contextual.
En el cuadro de diálogo Formato de celdas que se abre, haga clic en la ficha 4. Alineación.
Arrastre el indicador de Orientación hasta que marque 90 grados (o ajuste el valor 5. en el cuadro de texto Grados).
Haga clic en Aceptar para cerrar el cuadro de diálogo.6.
Haga clic en el ícono Detener grabación, en la sección Código de la cinta de 7. opciones (la ficha Programador debe estar seleccionada).
Oprima 8. ALT+F11, y luego abra la macro grabada en el editor de VB. Debe ver un código como éste:
With Selection .HorizontalAlignment = xlGeneral .VerticalAlignment = xlBottom .WrapText = False .Orientation = 90 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False
End With
Ninguna de estas propiedades, excepto una, cambian: la única propiedad que cambió mientras grababa es Orientation. No obstante, la grabadora tomó una instantánea de todas las propiedades posibles.
Muchos programadores editarán esta macro grabada. Eliminarán todo, excepto las propiedades importantes, como la que cambió en este ejemplo. Esta eliminación de las propiedades que no cambian facilita, más adelante, la visualización de lo que en realidad está haciendo la macro. Y la limpieza también evita que, por accidente, cambie importantes propiedades de la celda. El único cambio de propiedad necesario es la orientación, de modo que puede eliminar todas las demás líneas:
65Capítulo 5 Comprensión de los comandos de las macros
With Selection.Orientation = 90
End With
En nuestro ejemplo anterior (la demostración de cómo escribir una macro a mano) también incluimos algunas modificaciones de propiedades adicionales: la combinación de las celdas seleccionadas, el centrado del texto y el aumento del tamaño de la fuente. Pero recordará que la sangría, el cambio de línea del texto y otras propiedades se dejaron fuera. No eran necesarios, aunque la grabadora siempre las incluya.
Los elementos de Visual BasicBasic tiene décadas de existencia, y durante varias de ellas fue el lenguaje de programación más popular. Sigue siendo el de uso más fácil, aunque ahora los programadores académicos y profesionales lo han abandonado a favor de C y sus descendientes.
¿Por qué Basic es tan fácil? Porque su objetivo explícito es ser lo más parecido al inglés en su dicción y su sintaxis. En otras palabras, para terminar la ejecución de una macro de Basic, utiliza el comando End. Para concluir una estructura With, utiliza el comando End With, etc. Para comparar dos años de impuestos, usa una “frase” muy legible de Basic como esta:
If ImpuestosHoy = ImpuestosPasados Then Goto NoChange
Cuando es posible, Basic trata de usar palabras en inglés y frases similares a las del inglés. ¿Para alguien que habla ese idioma habría algo más comprensible?
Comandos de uso comúnEchemos un vistazo a algunos de los comandos de Basic más usados, incluidos ejemplos de código que ilustran cómo puede emplear estos comandos en su propia programación de Excel. Esta revisión general de ninguna manera pretende ser exhaustiva, pero le presentará algunos conceptos importantes de programación y le dará ideas de algunas cosas que puede hacer al codificar macros a mano.
Varios comandos importantes se cubren en otras partes de este libro: cuadros de mensajes en el capítulo 7, variables en el
Recuerde que si necesita realizar alguna
tarea no descrita aquí, su primer paso debe
ser oprimir F1 para abrir la característica de ayuda del editor
de VB. Por ejemplo, si quiere permitir que su usuario vea
el cuadro de diálogo para abrir archivos que está integrado
en Excel, busque en la ayuda de VBA algo como acceso a
archivos. Uno de los temas mostrados es Propiedad FileDialog,
y contiene un excelente ejemplo de código que puede pegar
en su macro. Si no encuentra algo en la ayuda integrada, elija
Ayuda | MSDN en Web y busque allí.
Macros con Excel 200766
capítulo 9, código de toma de decisiones If...Then en el capítulo 10 y bucles For...Next en el capítulo
11. Sin embargo, lo que sigue en este capítulo es un repaso de varios comandos útiles adicionales de VBA que debe conocer, incluidos varios conjuntos de comandos agrupados en categorías como manipulación de texto, cálculos financieros y administración de fechas y horas.
Manipulación de textoCuando trabaja con texto en macros, es probable que el conjunto de comandos de manipulación de texto le resulte muy útil.
Por ejemplo, en ocasiones necesita buscar una parte de un texto. Digamos que le pide al usuario que escriba su dirección de correo electrónico en un cuadro de entrada (descritos en el capítulo 7). Una manera de asegurarse de que en realidad ingresa una dirección de correo electrónico apropiada consiste en buscar el símbolo @ en la cadena, que se incluye en todas las direcciones de correo electrónico.
Para buscar una subcadena en una cadena se utiliza el comando InStr, como se muestra a continuación:
Sub IngresarCorreo()cadDirCorreo = InputBox("Por favor escriba su direcciónde correo electrónico")prueba = InStr(cadDirCorreo, "@")
If prueba = 0 ThencadDirCorreo = InputBox("Por favor, pruebe de nuevo; no incluyó el simbolo@ en su dirección de correo electrónico")
End If
End Sub
Cuando ejecuta esta macro, el comando InStr pone un cero en la variable prueba si no se encuentra un símbolo @ en el texto que el usuario ingresa en el cuadro de entrada (este texto se almacena en la variable cadDirCorreo). De este modo podemos probar lo anterior mediante esta línea de código y responde con una segunda solicitud de la dirección si encontramos un cero:
If prueba = 0 Then
Tal vez pueda imaginar muchas situaciones en programación donde sería útil analizar una frase o un párrafo para ver si la palabra o frase determinada puede encontrarse dentro del bloque de texto.
Oprima F1 y luego busque en la ayuda de VBA
Manipulación de cadenas, resumen de palabras
clave.
67Capítulo 5 Comprensión de los comandos de las macros
VBA incluye un grupo grande de comandos de manipulación de texto, incluidos los siguientes:
El comando Mid es similar a InStr, excepto que Mid regresa una subcadena cuando proporciona la posición de inicio y la longitud de la subcadena que busca. Por ejemplo:MsgBox Mid("HolaTodos", 2, 3)
Da como resultado: ola.¿Lo comprendió?
El comando Replace también está relacionado con InStr, excepto que elimina una cadena de destino e inserta otra en su lugar, como esta:MsgBox Replace("HolaTodos", "Todos", "Mundo")
El resultado es: HolaMundo.
El comando Left extrae una subcadena (también hay un comando Right):MsgBox Left ("Señora López", 6)
Da como resultado: SeñoraLCase cambia todos los códigos a minúsculas (hay también un comando UCase para mayúsculas):MsgBox LCase("HolaTodos")
El resultado es: holatodos
El comando Format tiene muchas variaciones (argumentos), y le permite gran libertad sobre la manera de desplegar texto, fechas, resultados financieros, etc. Oprima F1 y busque ayuda en Manipulación de cadenas, resumen de palabras clave.Len le indica el número de caracteres (la longitud de una cadena):MsgBox Len("HolaTodos")
El resultado es: 9
Fecha y horaCuando necesita emplear información de hora o fecha en una macro, VBA le ofrece un conjunto de comandos útiles. He aquí algunos ejemplos:
Sub FechaHora()MsgBox NowMsgBox DateMsgBox TimeMsgBox Day(Now)MsgBox Month(Now)MsgBox Hour(Now)MsgBox Minute(Now)
End Sub
Macros con Excel 200768
Si ejecuta esta macro, verá una serie de datos de fecha y hora desplegados.
VBA incluso tiene algunos comandos que realizan cálculos de hora, como el comando DateDiff, que le indica cuántos días hay entre hoy y una fecha futura, como esta:
Sub DiferenciaFechas()FechaFutura = "12/12/2012"MsgBox "Días a partir de hoy: " & DateDiff("d", Now, FechaFutura)
End Sub
MatemáticasTodas las operaciones comunes, y no tan comunes, están disponibles en VBA. Tiene + para sumas, – para restas y * para multiplicaciones. El símbolo de la división es la diagonal (/):
MsgBox 5 / 4
El resultado es: 1.25
Sin embargo, sólo por si acaso, hay otra forma de división que usa la diagonal invertida
(\), llamada división de enteros. Todo esto elimina cualquier posición decimal de la
respuesta:
MsgBox 5 \ 4
El resultado es: 1Si alguna vez ha encontrado un uso para eso, hágamelo saber. Observe que esto no
redondea el número; lo trunca. Por ejemplo, 5 \ 3 también da 1 como resultado, aunque redondeado sería 2. Si realmente quiere redondear use el comando Round, y especifique el número de posiciones decimales que quiere. Aquí queremos tres posiciones decimales:
MsgBox Round(5 / 3, 3)
El resultado es: 1.667Más allá de estos operadores, también encontrará algunas funciones matemáticas
(busque Ayuda para Funciones matemáticas).Y para todas las ocasiones en que tiene que calcular una secante hiperbólica inversa, no
se preocupe, está allí.
Para ver los diferentes comandos de fecha y
hora en VBA, oprima F1 y luego busque Fecha y
hora, resumen de palabras clave.
69Capítulo 5 Comprensión de los comandos de las macros
Cálculos financierosVBA incluye un conjunto de comandos que proporcionan algunas de las características de una calculadora financiera. Los contadores y otras personas relacionadas con las matemáticas empresariales pueden usar estos comandos para construir herramientas de cálculo financiero. Y debido a que las macros son muy flexibles, puede personalizar sus cálculos mucho más de lo que es posible aun con las calculadoras más costosas.
He aquí un ejemplo que muestra cómo encontrar el monto total de interés que pagará por una hipoteca durante la vida del préstamo. Usted proporciona
la siguiente información a la macro: tasai, rangodepago, periodostotales, valoractual, valorfuturo, vencido. Luego el comando IPmt le puede devolver el interés total que pagará durante la vida de ese préstamo.
He aquí cómo funciona: tasai es la tasa de interés de su préstamo y debe expresarse como la tasa mensual porque sus pagos serán mensuales. Debido a que probablemente conocerá el interés anual, debe dividirlo entre 12. Nuestra tasa es 6%, de modo que la cifra de la tasa debe ser .06 (la tasa de interés) / 12 (los meses del año). La tasa resultante es .005.
El rangodepago es la cantidad del tiempo total del préstamo del que quiere calcular el interés. Usaremos un bucle For...Next para este cálculo, de modo que la variable rangodepago cambie dinámicamente cuando estemos calculando, recorriendo la vida total del préstamo.
Los periodostotales son el número de veces que paga la hipoteca en la vida del préstamo. La nuestra es una hipoteca a 15 años, y pagamos mensualmente. De modo que periodostotales es 15 * 12 (lo que da como resultado 180).
El valorpresente representa el monto total de su préstamo. Nuestra casa cuesta $50 000 (es un valor máximo), pero debe expresar este número como negativo, de modo que es –50000. El valorfuturo es el saldo que quiere tener al final de la hipoteca. Para préstamos, el valorfuturo es cero.
El valor vencido es 1 ó 0. Vale 1 si los pagos están vencidos al principio de cada mes. Vale 0 si están vencidos al final del mes. Pagamos al final, de modo que vencido es 0.
Observe que el comando MsgBox no requiere el uso de paréntesis:
MsgBox Date
funciona igual que
MsgBox (Date)
Sin embargo, si está proporcionando una lista de argumentos a un comando (consulte el resumen del capítulo 7), debe usar paréntesis, como este argumento Now proporciona al comando Hour:
Hour (Now)
Al igual que con los comandos de fechas,
también encontrará un conjunto generoso
de comandos financieros en VBA. Oprima F1 y busque
Financieras, resumen de palabras clave. (En ocasiones, palabras
clave se utiliza como sinónimo de la palabra comando.)
Macros con Excel 200770
Ahora que hemos respondido estas preguntas, podemos usar la siguiente macro para calcular el interés:
Private Sub Interés()tasai = 0.005periodostotales = 180valorpresente = -50000valorfuturo = 0vencido = 0For rangodepago = 1 To periodostotalesinterésTemp = IPmt(tasai, rangodepago, periodostotales, valorpresente, valorfuturo, vencido)interésTotal = interésTotal + interésTempNext rangodepagoMsgBox "El total que pagará por este préstamo es: " & Format(interésTotal + Abs(valorpresente), "###,###,##0.00")MsgBox "De esto, los intereses son: " & Format(interésTotal, "###,###,##0.00")
End Sub
Cuando ejecuta esta macro, le indica que el total que pagará por el préstamo es de $75 947.11. Y de eso, $25 947.11 corresponde a intereses.
No se alarme por el código. Es fácil comprender el comando Format, por ejemplo, cuando busca en la ayuda de VBA. Sólo haga clic en la palabra Format en su código de macro para poner el cursor de inserción parpadeante en él, luego oprima F1 y verá muchas docenas de ejemplos de su uso.
Para comprender la manera de emplear los diversos comandos financieros en VBA, también encontrará gran cantidad de ejemplos de código para ellos.
ErrorEn ocasiones querrá colocar un manejador de errores en sus macros. De esta forma, si algo sale mal, su macro no detendrá misteriosamente la ejecución, o atemorizará de otra manera al usuario. En cambio, puede desplegar un mensaje que explique lo que sucedió y lo que puede hacer el usuario al respecto.
He aquí una estructura típica de manejo de errores. En primer lugar, le debe indicar a VBA adónde ir: un lugar en la macro donde puso la etiqueta Mostrarlo, si ocurre un error:
On Error GoTo Mostrarlo
Puede usar el nombre que quiera en lugar de Mostrarlo; es sólo un destino en que la
macro empieza a ejecutar el código si ocurre un error.
71Capítulo 5 Comprensión de los comandos de las macros
A continuación tenemos una línea que induce un error falso (Error 70) para que podamos probar el manejador de errores. Esta línea se reemplazará por el código actual de su macro.
Generalmente, aparece el comando Exit Sub justo sobre cualquier manejador de código. Esto evita que el programa alcance al manejador, a menos que en realidad un error nos envíe a éste.
Luego la sección Mostrarlo imprime el mensaje de error, en este caso Permiso
denegado (porque indujimos el error 70). Por último, el comando VB Resume Next se usa para enviar VB de regreso a la línea que sigue a On Error GoTo:
Sub Errors ()On Error GoTo showitError 70
Exit SubShowit:
MsgBox Error (Err)Resume Next
End Sub
Este código despliega la descripción del error en un cuadro de mensaje para el usuario. Sin embargo, antes de que termine su macro y la dé a otros, tal vez quiera reemplazar el mensaje integrado por uno propio, más útil, más descriptivo, como:
MsgBox ("Consulte al administrador de la red. No tiene permiso de seguridad para hacer esto.")
Desarrollado durante décadas de
retroalimentación por parte del usuario,
grupos de enfoque y refinamiento, el editor
de VB es una gema pulida. No importa
cuántos años dedique, ni qué tan a fondo
vaya en la programación con VBA, dudo que
siquiera llegue a desear una característica en
particular. Posee todo lo que un programador
necesita.
Sin embargo, los principiantes pueden
tener un buen inicio al conocer de antemano
varias características importantes. No vale
la pena tropezarse con ellas. Sólo le daré lo
esencial en este resumen.
Los menús Archivo y EdiciónLos menús Archivo y Edición contienen casi todas las herramientas esenciales que encontraría en un procesador de palabras. Y cualquier editor para el programador es un procesador de palabras, aunque bastante especializado. El menú Edición incluye las usuales opciones de búsqueda, corte, copia, pegado y otras características de manipulación de texto, pero también engloba opciones específicas para la programación. Haga clic en un comando como MsgBox en el editor de código, para seleccionarlo, y luego pruebe a elegir Edición | Información rápida para ver la sintaxis de este comando.
Macros con Excel 200772
El menú VerEn el menú Ver puede elegir que se muestren
las importantes ventanas Explorador de
proyectos o Propiedades, si las ha cerrado
antes. También puede desplegar la Caja
de herramientas, si está trabajando en un
UserForm (consulte el capítulo 7).
El menú FormatoEl menú Formato contiene diversas opciones,
casi todas útiles cuando está optimizando un
UserForm.
El menú DepuraciónEn el menú Depurar encontrará todo tipo de
características útiles que pueden ayudarle a
rastrear errores elusivos en su código.
El menú EjecutarEn el menú Ejecutar, la opción más útil
aquí para los principiantes es Ejecutar |
Restablecer. Haga clic en ella si alguna
vez ha visto el mensaje mostrado en la
ilustración.
Los principiantes se sienten abrumados
con este mensaje de error. Se despliega
cuando ejecuta una macro que tiene un error,
y el editor de VB ingresa automáticamente
en el “modo de interrupción”, una condición
especial donde se detiene la ejecución de la
macro. Sin embargo, también sucede algo
más: la ejecución adicional de esa macro
o cualquiera otra no es posible ahora en
este modo (los programadores usan varias
herramientas en el menú Depuración durante
el modo de interrupción). Pero con frecuencia
deseará salir de este modo y regresar al modo
normal. Para salir de este modo, elija Ejecutar
| Restablecer.
Eso es todo. No he cubierto cada opción
ni, por supuesto, cada menú. Algunos se
explican por sí solos, como la opción Ventana
| Cascada. Si no sabe lo que significa esto en
un procesador de palabras, pruébelo y vea.
Una subrutina es como una pequeña macro que opera dentro de una macro más grande. El
código de la subrutina reside dentro de la macro principal. Cuando una macro llama a una
subrutina, la ejecución se desvía al área de la subrutina de la macro.
Un uso común para las subrutinas consiste en dividir una macro compleja en partes
más pequeñas. Además, las subrutinas pueden ser útiles en macros que proporcionan una
opción al usuario. Si selecciona la opción A, la macro se desvía a la subrutina A. Seleccione
la opción B y entra en acción la subrutina B. Por ejemplo, digamos que ha definido dos
áreas de impresión en la pantalla. La macro pregunta al usuario que indique cuál área
se debe imprimir. La elección del área de impresión 1 hace que la macro se desvíe a la
subrutina Impresión1. La elección del área de impresión 2 hace que la macro se desvíe a la
subrutina Impresión2. En este escenario, cuando se ha completado o cancelado el trabajo
de impresión, termina la ejecución de la macro. La elección de una tercera opción, Cancelar,
hace que la macro siga sin imprimirse o, en este caso, llegue al final.
Macros con Excel 200774
Como opción, si una función dentro de su macro produce un conjunto de resultados, se ejecuta una subrutina; otro conjunto de resultados hace que se ejecute una subrutina diferente. Por ejemplo, la macro examina una celda que contiene un número. Si éste es menor de 1 000, la celda se redondea a 1 000. Si el número es mayor, no hay cambio en el contenido de la celda.
Creación de una subrutinaDebido a que una subrutina se ejecuta dentro de una macro existente, es necesario que haya una manera de separar los comandos de la subrutina del resto de la macro. Esto se hace al asignar un nombre a la subrutina. La macro llama entonces a la subrutina por su nombre con el comando GoTo. La propia subrutina empieza con su nombre, como primera línea, seguido por las líneas de comandos asociadas con la subrutina, y ésta termina con un comando End. Como alternativa, puede llamar a la subrutina con el comando GoSub. Cuando use GoSub, la operación regresa al punto de partida en la macro cuando la subrutina termina.
He aquí un ejemplo. Digamos que ha designado dos áreas de su hoja de cálculo como áreas de impresión diferentes, y ha asignado nombres de rango a estas áreas, ÁreaImpresión1 y ÁreaImpresión2. Quiere crear una macro que le pregunte al usuario si quiere imprimir lo que conoce como Informe 1 (que es igual a ÁreaImpresión1) o Informe 2 (que es igual a ÁreaImpresión2). Su respuesta se almacena en la macro como 1 o 2. Si responde 1, la macro ejecuta una subrutina llamada Impresión1. Si responde 2, la macro ejecuta una subrutina llamada Impresión2. Si el usuario responde algo diferente de 1 o 2, la pregunta aparece de nuevo y tiene otra oportunidad de responder. También se trata a la pregunta como una subrutina, de modo que se le puede llamar, si es necesario.
Asignación de nombre a una subrutinaDesigne el nombre de una subrutina ingresando el que desee, seguido de dos puntos. Use sólo una palabra para el nombre de la subrutina. Para este ejemplo, se llamará de la siguiente manera a las tres subrutinas:
Respuesta:Impresión1:Impresión2:
A estos nombres se les denomina etiquetas.
Trate de evitar la asignación de
nombres a subrutinas que sean
iguales a un comando real de VBA.
Esto se facilitará más a medida
que se familiarice con VBA.
75Capítulo 6 Uso de subrutinas y creación de funciones de Visual Basic
Llamado a las subrutinasLa primera subrutina necesaria para esta macro realiza las tareas de plantear la pregunta al usuario. Este código es muy simple: utiliza el concepto de un cuadro de entrada con un campo disponible para que el usuario ingrese su respuesta. Los cuadros de entrada se analizan con más detalle en el capítulo 7. Por ahora sólo usaremos el código InputBox con una descripción mínima. El código empieza con una variable que se asigna al valor del InputBox. Así que cada vez que el usuario ingrese su respuesta (en este caso 1 o 2), ese
valor se asignará a la variable, que llamaremos Informe. He aquí la línea de código:
Informe = InputBox("Ingrese 1 para imprimir Informe 1; Ingrese 2 para
imprimir Informe 2")
La información que aparece entre comillas es el texto que se mostrará en el cuadro de entrada que el usuario verá. Su entrada de 1 o 2 se convierte en el valor de la variable, Informe.
Una vez que Informe tiene un valor, la macro puede seguir adelante al determinar cuál subrutina ejecutar, con base en el valor de Informe.
Su macro establecerá eso: si el valor de Informe es 1, entonces se ejecutará la subrutina Impresión1. Si el valor de Informe es 2, entonces se ejecutará la subrutina Impresión2. Si Informe tiene cualquier otro valor, vuelve a aparecer la pregunta. El código
es muy sencillo:
If Informe = 1 ThenGoTo Impresión1
ElseIf Informe = 2 ThenGoTo Impresión2
ElseGoTo Pregunta
End If
Con el uso del concepto de un comando If/Then/Else, la macro permite al usuario
tomar una elección inteligente. Aprenderemos más acerca de las rutinas If/Then/Else
en el capítulo 10, pero como puede ver, el concepto es muy fácil de comprender.
Escritura de subrutinasLas subrutinas de este ejemplo son comandos de impresión de VBA. Puede encender su
grabadora de macros y grabar la impresión de un área para recopilar el código. Antes de
grabar la macro, asigne al área de impresión el nombre ÁreaImpresión1 y ÁreaImpresión2
(seleccione el área, haga clic en el Cuadro de nombres, escriba el nombre y oprima
ENTER). Luego, con la grabadora de macros encendida, haga clic en la flecha hacia abajo
Macros con Excel 200776
en el Cuadro de nombres (véase la figura 6-1), elija ÁreaImpresión1 para seleccionar el área, y luego elija Botón de Office | Imprimir | Selección | Aceptar. Apague la grabadora y encontrará este código en su editor de VB.
Application.Goto Reference:="ÁreaImpresión1"ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)"
Este es todo el código que necesita para su subrutina, por lo que la subrutina Impresión1 tendrá este aspecto:
Impresión1:Application.Goto Reference:="ÁreaImpresión1"ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)"End
La subrutina Impresión2 será idéntica a la subrutina Impresión1, con excepción de que se sustituye Impresión2 y ÁreaImpresión2. La última subrutina que necesitamos crear para que esto funcione es el área Pregunta de la macro, que utiliza el código ImputBox analizado antes, además de la instrucción If/Then/Else. En primer lugar, la macro le planteará al usuario la pregunta, y luego ejecutará los comandos de impresión apropiados:
Sub ImpresiónEspecial()Pregunta:Informe = InputBox("Ingrese 1 para imprimir Informe 1; Ingrese 2 para imprimir Informe 2")If Informe = 1 Then
GoTo Impresión1ElseIf Informe = 2 Then
GoTo Impresión2Else
GoTo PreguntaEnd IfImpresión1:
Application.Goto Reference:="ÁreaImpresión1"
Figura 6-1 Asignación de nombres de rango a áreas de impresión
Cuadro de nombre
77Capítulo 6 Uso de subrutinas y creación de funciones de Visual Basic
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)"End
Impresión2:Application.Goto Reference:="ÁreaImpresión2"ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)"End
End Sub
En la figura 6-2 se muestra el aspecto que tendrá la operación de la macro para el usuario.
Si realmente quiere ser creativo y hacer que esta macro sea más accesible para el usuario, de modo que no tenga que buscarla en el menú Macros, puede colocar la orden para la macro en un botón y colocar dicho botón en la hoja de cálculo real. En el capítulo 12 se analiza cómo funciona este proceso.
Figura 6-2 Llamada a una subrutina
El usuario ingresa 1 o 2 aquí
Ejecución de macros como subrutinasHa visto cómo podemos insertar subrutinas en una macro y llamar esos fragmentos de código, según sea necesario. También puede hacer que una macro llame a otra como si fuera una subrutina, porque en realidad todas las macros son técnicamente subprocedimientos para el uso de los comandos Sub, End Sub al empezar y terminar cada macro. Una vez que se crea una macro, su nombre sirve como un comando. Por lo tanto, puede designarse a la macro ObténMiNombre para que llame a la macro NOMBRE1
creada en el capítulo 1.
Sub ObténMiNombre()NOMBRE1End Sub
Aunque este ejemplo en particular podría parecer inútil (la creación de una nueva macro con el propósito de llamar a una macro existente), puede visualizar la utilidad de este proceso si piensa crear muchas macros diferentes y llamarlas cuando las necesite
Macros con Excel 200778
en el curso de una nueva macro. Por ejemplo, en el capítulo 1 creamos una macro que aplica varios cambios de formato a una hoja de cálculo. Es muy posible que la colocación de muchos comandos grabados en una sola macro podría agobiar al programador novato de macros, sobre todo si la persona que grabó los comandos cometió errores y luego los corrigió, o si eligió agregar diferentes características de formato. La macro puede crecer mucho y ser difícil de descifrar y depurar, en caso de que no se ejecute como está planeado.
En cambio, mediante el uso de la técnica de llamar a otras macros que se muestra aquí, podría crear varias pequeñas macros de formato, asegurarse de que cada una haga su tarea
de manera apropiada, y luego crear una macro que llame a las diversas piezas del proyecto
general de formato, de una en una.
Por ejemplo, tome una macro llamada ENCABEZADOS que cree y forme los
encabezados de una hoja de cálculo, una macro llamada COLUMNAS que asigne el ancho
de columna y numere códigos de formación, una macro llamada FILAS que forme los
títulos de la fila y una macro llamada TOTALES que coloque totales en la parte inferior
de cada columna de números. Las cuatro macros pueden combinarse en una macro
ConfiguraciónInformeMensual como ésta:
Sub ConfiguraciónInformeMensualENCABEZADOSCOLUMNASFILASTOTALESEnd Sub
Echaremos un vistazo a la formación de macros con mayor profundidad en el capítulo 8 y analizaremos este proceso de ejecución de macros como subrutinas en ese momento.
Con el uso de las habilidades que aprendimos en el capítulo 7, puede incluso personalizar el formato aún más, al preguntar al usuario, con la ayuda de un cuadro de entrada, cuáles características de formato le gustaría utilizar, y luego usar las subrutinas para llamar a las diversas macros de formato, según se necesiten.
Creación de una función personalizadaDe manera similar a la creación de macros, puede usar el editor de VB para crear sus
propias funciones personalizadas. Las funciones que cree se agregan a la lista de funciones
de Excel, de modo que puede llamarlas con la misma facilidad de la función PROMEDIO
o CUENTA. Esto ahorra mucho tiempo si necesita ejecutar cálculos complicados. No
sólo puede condensar sus cálculos en una función simple, sino que dicha función puede
quedar disponible para las demás hojas de cálculo de Excel. Otro uso para las funciones
personalizadas es proteger los detalles de un cálculo.
79Capítulo 6 Uso de subrutinas y creación de funciones de Visual Basic
Use una función para facilitar un cálculo complicadoSuponga que necesita calcular de manera regular los impuestos sobre la renta de una corporación. Los impuestos corporativos se calculan en diferentes niveles, y la tasa impositiva cambia a medida que aumentan los ingresos de la corporación contribuyente. Así, por ejemplo, una corporación con ingresos
gravables de $100 000 paga una tasa de 15% sobre los primeros $50 000, 25% sobre los siguientes $25 000 y 34% sobre el resto. Los impuestos sobre la renta corporativas para 2008 se muestran en la tabla 6-1.
Es posible escribir una fórmula IF anidada que calcule estos impuestos, sin importar
el nivel de ingresos, pero no hay duda de que será una fórmula complicada y difícil de
reconstruir si tiene que usarla con frecuencia. En cambio, puede crear una función que haga
el cálculo por usted. Con esto no tendrá que preocuparse nunca más de crear una fórmula de
nuevo, pero puede compartir la función con alguien más que necesite calcular los impuestos
corporativos.
Para crear la nueva función, a la que llamaremos ImpCorp, abra el editor de VB.
Haremos que quede accesible para todas las hojas de cálculo, de modo que abra un nuevo
módulo en el Libro de macros personal (haga clic en VBAProject (PERSONAL.XLSB) y
luego elija Insertar | Módulo).
La primera línea de una función es diferente de un macro, aunque el proceso
de creación sea básicamente el mismo. En lugar de Sub nombremacro, ingresará
Function nombrefunción, o en este caso:
Function ImpCorp
Además, como recordará, los nombres de las macros van seguidas por un conjunto de paréntesis. Necesitamos eso también para el nombre de la función. En este caso, vamos a colocar una palabra dentro de los paréntesis: Ingresos. Ingresos será
Ingresos gravables
Mayores de Menores de Tasa impositiva
$ 0 $ 50 000 15%
50 000 75 000 25%
75 000 100 000 34%
100 000 335 000 39%
335 000 10 000 000 34%
10 000 000 15 000 000 35%
15 000 000 18 333 333 38%
18 333 333 .......... 35%
Tabla 6-1 Tasas impositivas de ingreso gravable empresarial de 2008
La palabra Function le indica
a Excel que ésta es una función.
Llamar a ésta una función en
lugar de un macro permite que
Excel agregue la función a la lista
maestra de funciones.
Macros con Excel 200780
la variable que se necesita para esta función (la función realiza cálculos sobre la cantidad de ingresos). Al colocar Ingresos entre paréntesis hará que esta función nos pida que identifiquemos cuál celda contiene los ingresos para los objetivos de los cálculos de ImpCorp. Así que la primera línea completa de nuestra función será:
Function ImpCorp(Ingresos)
Ahora estamos listos para ingresar el código de esta función. Vamos a usar la instrucción de VBA Select Case, un procedimiento que es similar a la instrucción IF. La estructura Select Case le permite ordenar que una acción sólo se realice si se cumple cierta condición. En esta situación, estableceremos el Case igual a la cantidad especificada como Ingresos. Una vez que establecemos que estamos funcionando con la cantidad de Ingresos, podemos presentar la lista de criterios establecidos en la lista de impuestos de la tabla 6-1. He aquí su aspecto:
Function ImpCorp(Ingresos)Select Case IngresosCase Is > 18333333: ImpCorp = Ingresos * 0.35Case Is > 15000000: ImpCorp = 515000 + (Ingresos - 15000000) * 0.38Case Is > 10000000: ImpCorp = 3400000 + (Ingresos - 10000000) * 0.35Case Is > 335000: ImpCorp = 113900 + (Ingresos - 33500) * 0.34Case Is > 100000: ImpCorp = 22250 + (Ingresos - 100000) * 0.39Case Is > 75000: ImpCorp = 13750 + (Ingresos - 75000) * 0.34Case Is > 50000: ImpCorp = 7500 + (Ingresos - 1500) * 0.25Case Is > 0: ImpCorp = Ingresos * 0.15End SelectEnd Function
La manera en que este procedimiento de caso
funciona es que, en cuanto se cumplan los criterios
del caso, se realiza el cálculo, y la función se detiene.
Si los ingresos de la corporación son de $15 000 001,
se examinará el primer criterio de caso, y como los
ingresos no son > $18 333 333, esto será rechazado
y la función pasará al segundo criterio. Debido a
la aplicación de este criterio, el cálculo se realiza
en este punto de la función, y las opciones de caso
restantes se ignoran. Si los ingresos de la corporación
son de $10 000, la función pasará a cada uno de los
escenarios posibles, rechazando cada uno, hasta que
el escenario final Case Is > 0 se cumpla, y se
calculen los impuestos.
Si está confundido sobre la
manera en que decidimos
dónde van los paréntesis en las
fórmulas que aparecen en esta
función, consulte la sección
“Operadores aritméticos en
orden de preferencia”, en el
capítulo 9.
Guarde rápidamente sus
cambios en el editor de VB, al
oprimir CTRL+G.
81Capítulo 6 Uso de subrutinas y creación de funciones de Visual Basic
Una vez que ingrese la función en el editor de VB, elija Archivo | Guardar PERSONAL.XLSB, y está listo para probar esta función.
De regreso a la hoja de cálculo, ingrese algunos números en una columna. Estos
números representan los ingresos gravables de algunas corporaciones. Siga estos pasos
para ejecutar su nueva función:
Figura 6-3 Ingresos gravables que necesitan cálculo de impuestos
Aquí aparecerá el cálculo de sus impuestos
Figura 6-4 Búsqueda de su nueva función
Elija Todas
Haga clic en su función
Haga clic en la celda donde 1. quiere que aparezca el primer cálculo de impuestos (véase la figura 6-3).
Haga clic en la ficha Fórmulas.2.
Haga clic 3. en el botón Insertar función, en la cinta de opciones.
En el cuadro de diálogo 4. Insertar función (véase la figura 6-4), seleccione la categoría Todas.
Recorra la lista alfabética 5. hasta que encuentre su función ImpCorp. Estará alfabetizada bajo la “I”, pero aparecerá como PERSONAL.XLSB!ImpCorp.
Haga clic en Aceptar.6.
Haga clic en el cuadro identificador de celdas en la ventana Argumentos de función, 7. luego en la celda que contiene los ingresos gravables y, al final haga clic, en el botón rojo para regresar a la ventana Argumentos de función. Como opción, puede ingresar la referencia a celda para la celda de ingresos gravables en el campo Ingresos de la ventana Argumentos de función. Observe que el cálculo de impuestos aparece ahora en esta ventana. Véase la figura 6-5.
Haga clic en Aceptar para colocar el cálculo de 8. impuestos en su hoja de cálculo.
Recuerde que su nueva función
se llama en realidad PERSONAL.
XLSB!ImpCorp. Si trata de ingresar
ImpCorp como nombre de la
función en su hoja de cálculo,
obtendrá un mensaje de error.
Macros con Excel 200782
Observe que ahora puede copiar esta fórmula a otras celdas de su hoja de cálculo sin 9. tener que abrir de nuevo la ventana Insertar función.
Use una función personalizada para ocultar datos confidencialesEn lugar de planear una fórmula en una hoja de cálculo donde todos pueden verla, puede crear una función que viva en el editor de VB, donde sólo ojos autorizados pueden ver el proceso de cálculo. Por ejemplo, digamos que es hora de calcular las bonificaciones para los empleados y que el cálculo de éstas es una fórmula secreta.
Empezaremos con una hoja de cálculo que presente una lista de los empleados y los ingresos trimestrales que generaron. En esta empresa ficticia, las ventas del segundo trimestre suelen ser más altas debido a la naturaleza estacional del negocio. Por lo anterior, los propietarios de la empresa desean recompensar a sus vendedores con una bonificación más elevada para las ventas que excedan la cuota en los trimestres 1, 3 y 4, y una menor
para el trimestre 2. He aquí la fórmula secreta:
Ventas T1 * .1%
Ventas T2 * 0.05%
Ventas T3 * 0.08%
Ventas T4 * 0.075%
He aquí la función que los propietarios de la empresa desean crear:
Function Bono (T1, T2, T3, T4)Bono = T1 * .001 + T2 * .0005 + T3 * .0008 + T4 * .00075End Function
Figura 6-5 Uso de la función ImpCorp
Aquí aparecen los cálculos
Ingrese aquí la referencia a celda
Haga clic aquí para usar su ratón para identificar la referencia a celda
83Capítulo 6 Uso de subrutinas y creación de funciones de Visual Basic
Figura 6-6 Ingrese referencias a celda como argumentos de función
Ingrese aquí la referencia a celda
Figura 6-7 Ocultamiento de los detalles de cálculo en funciones
No aparece aquí información del cálculo
Cuando esta función se ingresa en un módulo del Libro de macros personal y se guarda, se une a las demás en la lista de funciones y está accesible para cualquier macro, pero sin revelar la fórmula de cálculo.
Aplique la función al hacer clic en la celda donde quiere que aparezca la bonificación, elegir Bono de la lista de Funciones (véase la figura 6-6) y luego ingresar las referencias a celda para los montos T1, T2, T3 y T4. Una vez ingresada una bonificación, la función puede copiarse a otras celdas.
Observará que en la barra de fórmulas sólo se muestra el nombre de la función y las referencias a celdas, pero no la información de cálculos. Véase la figura 6-7.
Como ha visto en capítulos anteriores, muchas
macros pueden ejecutarse por sí mismas, sin
necesidad de ninguna entrada por parte del
usuario. Por ejemplo, si crea una macro que
ingresa sus iniciales en la celda de la esquina
superior izquierda, tendría este aspecto:
Sub InsertarIniciales()Range("A1").SelectActiveCell.FormulaR1C1 = "GP"
End Sub
Sin embargo, otras macros requieren que detenga la ejecución de la macro y pida al
usuario alguna entrada. ¿Tal vez quiera que el usuario escriba sus iniciales? Es correcto
codificar directamente los comandos de acceso de las iniciales si usted es la única persona
que usará la macro. Pero si quiere que la macro sea útil para otros, tiene que dejar que
ingresen sus iniciales. Esto significa aceptar la entrada del usuario mientras la macro se está
ejecutando. Una manera de aceptar la entrada del usuario mientras se ejecuta una macro
consiste en desplegar un cuadro de entrada para el usuario.
Macros con Excel 200786
En programación, un argumento es algún dato
que usted proporciona para un comando
como InputBox. En VBA, estos datos se
encuentran entre paréntesis. He aquí la
sintaxis completa para el comando InputBox
en VBA:
InputBox(Mensaje, Título, Predeterminado, Izquierda, Arriba, ArchivoAyuda, IDAyudaContextual, Tipo)
Cada elemento dentro de los paréntesis
es un argumento. Pero casi todos los
argumentos son opcionales (puede omitirlos
y, con frecuencia, simplemente no los
necesita, que es la razón por la que, en primer
lugar, son opcionales). El único argumento
necesario para un cuadro de entrada es
Mensaje, que es una breve etiqueta que
aparece arriba del cuadro de texto en donde
el usuario escribe sus datos. Esta leyenda
le indica al usuario lo que debe escribir. De
modo que la programación que despliega
el tipo más simple de cuadro de entrada
sólo usa un argumento, Mensaje, como se
muestra en seguida:
x = InputBox("Por favor ingrese sus iniciales")
En la figura 7-1 se muestra este cuadro de
entrada. El usuario ve el mensaje descriptivo
y puede escribir lo que desee en el cuadro de
texto.
Si no proporciona el argumento Título,
la barra de título del cuadro de entrada
despliega Microsoft Excel. Sin embargo,
puede, si lo desea, proporcionar su propio
argumento para el título, de la siguiente
manera:
x = InputBox("Por favor ingrese sus iniciales","Ingrese sus iniciales")
En la figura 7-2 se ilustra el resultado de
agregar un título opcional.
El tercer argumento, Predeterminado, también es opcional, pero puede ser útil en algunas situaciones. Digamos que tiene una idea de la información que el usuario escribirá. Puede ahorrarle tiempo al usuario si despliega esa información como opción predeterminada en el cuadro de texto. De esa manera, el usuario no tendrá que escribir nada si su opción predeterminada es correcta. Simplemente debe oprimir ENTER, o hacer clic en el botón Aceptar. Sin embargo, el usuario también tiene la libertad de reemplazar su texto predeterminado con su propia entrada, si es necesario. He aquí cómo agregar un argumento predeterminado para el comando InputBox:
x = InputBox("Por favor ingrese sus iniciales", "Ingrese sus iniciales", "GP")
Observe, en la figura 7-3, que los datos de opción predeterminada GP se seleccionan automáticamente (aparecen resaltados) para que el usuario sólo tenga que escribir algunos datos nuevos, si es necesario. Si estos datos predeterminados no estuvieran seleccionados, el usuario tendría que seleccionarlos para reemplazarlos.
Como puede ver, cada argumento que agrega entre paréntesis está separado de los demás por comas. Y es necesario que tenga estos argumentos en el orden apropiado. En este caso, el orden es: Mensaje, Título, Predeterminado, etcétera. Este orden es la manera en que VBA sabe cuál argumento es cuál, y no confunde, por ejemplo, el título con el mensaje. Incluso los argumentos opcionales deben incluirse (o las comas que indican que se omiten), si se usan argumentos posteriores. Por ejemplo, si quiere incluir un texto predeterminado, pero omitir el título, debe usar el número adecuado de comas, como se muestra a continuación:
x = InputBox("Por favor ingrese sus iniciales", , "GP")
87Capítulo 7 Creación de macros interactivas
Un cuadro de entrada se despliega ante el usuario al emplear el comando InputBox. Pero antes de que pueda usar de manera efectiva comandos como éste, necesita comprender el concepto de argumentos en programación. InputBox, como muchos otros objetos, tiene una lista de argumentos.
Observe que los argumentos opcionales se incluyen entre corchetes; los argumentos obligatorios, como Prompt, en la figura 7-4, no llevan corchetes.
Cómo funciona el cuadro de entradaTal vez se haya preguntado acerca de la X en los ejemplos de código anteriores. Se trata de una variable, y exploraremos esta herramienta de programación esencial a profundidad en el capítulo 9. Por ahora, basta con comprender que cuando el usuario escribe algunos datos y hace clic en el botón Aceptar (u oprime ENTER) para cerrar el cuadro de entrada, la X contiene los datos que el usuario escribió. De modo que luego puede usar X en su macro para recuperar los datos.
En programación, el término
incluido en el código o conectado
en el código significa que algo se
incluyó en la macro que nunca
cambia. En el ejemplo anterior,
las iniciales GP se insertan en
la celda de la esquina superior
izquierda. Están conectadas en el
código porque son mis iniciales.
Sin embargo, a veces se requiere
un método más flexible. En lugar
de proporcionar los datos GP en
su macro, usted permite que el
usuario proporcione sus propias
iniciales. Usted obtiene estos
datos al usar un cuadro de entrada
o algún otro tipo de “control”,
como un cuadro de mensaje, o un
cuadro de lista, como verá más
adelante en este capítulo.
Figura 7-1 El tipo más simple de cuadro de entrada
El usuario ingresa las iniciales en el campo de entrada
Figura 7-2 Puede agregar un título adicional a su cuadro de entrada
Figura 7-3 Puede proporcionar información predeterminada que
el usuario tiene libertad de aceptar o reemplazar
Figura 7-4 La característica Información rápida muestra la lista de
argumentos de un vistazo
Macros con Excel 200788
Escritura de la macro completaEn este ejemplo, quiere poner las iniciales del usuario en la celda de la esquina superior izquierda. He aquí la macro completa que despliega el cuadro de entrada y luego pone lo que escriba el usuario en la celda de la hoja de cálculo:
Sub ObtenerIniciales() x = InputBox("Por favor ingrese sus
iniciales", "Ingrese sus iniciales")
Range("A1").SelectActiveCell.FormulaR1C1 = x
End Sub
Este código despliega primero un cuadro de entrada para el usuario, y cuando éste cierra ese cuadro, cualquier cosa que haya escrito en el cuadro de texto del cuadro de entrada estará contenido ahora en la variable X.
Escritura y prueba del código del cuadro de entradaEs hora de que escriba el código que despliega un cuadro de entrada y luego pruebe ese código en el editor de VB. Siga estos pasos:
Puede ver los argumentos
de cualquier comando de
VBA con sólo hacer clic en su
código, para mover el cursor
parpadeante de inserción a
ese comando. Luego oprima
F1 y verá abierta la ventana
de ayuda con ese comando
incluido. Por supuesto, no todos
los comandos de VBA tienen
argumentos, pero muchos sí.
Al escribir un comando como
InputBox en la ventana de
código de VBA y luego oprimir la
barra espaciadora, desencadena
la característica Información
rápida del editor de Visual Basic,
que despliega toda la lista de
argumentos disponible para el
comando. En la figura 7-4 se
muestra la lista de argumentos
del comando InputBox.
Con Excel ejecutándose y una hoja de cálculo visible, oprima 1. ALT+F11.
Eso abre el editor de VB para que pueda escribir una macro.2.
En el editor de VB, elija Insertar | Módulo. 3. Se abre un nuevo contenedor de macros (un módulo que contiene varias macros). El
editor despliega una ventana en blanco a la derecha (la ventana de código) y resalta
el módulo recién creado en el Explorador de proyectos (si tiene visible el explorador),
como se muestra a la izquierda de la figura 7-5.
El nuevo módulo será llamado Módulo1 si es el primero que agrega al proyecto.
Al siguiente módulo se le asigna, como opción predeterminada, el nombre
Módulo2 y así sucesivamente. Sin embargo, siempre puede hacer clic en un nombre
del módulo en el Explorador de proyectos para seleccionarlo y luego cambiar su
propiedad Nombre en la ventana Propiedades (que se muestra en la parte inferior
89Capítulo 7 Creación de macros interactivas
Si el usuario no escribe
información en el cuadro de
texto, la variable X no contendrá
nada. En ocasiones es útil probar
si el usuario escribió algo, y
puede hacerlo al ver si X = ""
(una cadena vacía), con un
código como éste:
If x = "" Then Exit SubEste código causa que la
macro deje de ejecutarse
(para salir de la subrutina) si
el usuario no escribió nada en
el cuadro de entrada. En otras
palabras, cualquier código de
programación que se encuentre
debajo de esta línea será
ignorado por VBA si el usuario
deja el cuadro de texto en blanco.
Usamos una estructura If...Then (descrita con destalle en el
capítulo 10) para probar el valor
de la variable X.
izquierda, en la figura 7-5). A muchos programadores les gusta dar nombres
descriptivos a sus módulos, como MacrosImpuestos o MacrosInventarios.
Escriba el siguiente código en el módulo de código:4.
Sub ObtenerIniciales()Dim cadIniciales As String
cadIniciales = InputBox("Por favor ingrese sus iniciales", "Ingrese sus iniciales")
Range("A1").SelectActiveCell.FormulaR1C1 = cadIniciales
End Sub
Observe que he usado el comando Dim aquí para declarar formalmente una variable
(cadIniciales) que contendrá la entrada del usuario. Ésta se considera una buena
práctica de programación porque la declaración de variables puede evitar algunos
tipos de errores, y también hacer que el código sea un poco más fácil de comprender
y leer. También usé otra convención común, asignar a la variable el prefijo cad,
Figura 7-5 Escriba o modifique macros en la ventana de código, a
la derecha del editor de VB
Macros con Excel 200790
identificándolo como un tipo de variable de cadena (de texto). Por último, el empleo de la palabra Iniciales en el nombre de la variable facilita ver el propósito de ésta.
Por último, pruebe su macro recién escrita oprimiendo 5. F5.
Esto le indica al editor que ejecute la macro, y también oculta el editor para que pueda ver lo que sucede en la hoja de cálculo actual. Observe que al oprimir F5 se ejecutará cualquier macro en que se encuentre el cursor de inserción parpadeante. Por lo anterior, asegúrese de hacer clic dentro del código de la macro para poner el cursor en él antes de oprimir F5.
Cuadros de mensajes: la comunicación más simple con el usuarioSi quiere desplegar un mensaje al usuario acerca de algo mientras se ejecuta una macro (pero no necesita ninguna entrada del usuario), utilice un cuadro de mensaje. Este control es similar a un cuadro de entrada, pero un cuadro de mensaje no tiene un cuadro de texto en que el usuario pueda escribir. Y, en su forma más simple, un cuadro de mensaje sólo tiene un botón, Aceptar, en que el usuario hace clic después de leer lo que diga el cuadro de mensaje. En el comando MsgBox, usted escribe el mensaje como el argumento Mensaje, y es el único argumento requerido. El comando para crear un cuadro de mensaje tiene la siguiente abreviatura: MsgBox.
MsgBox ("Se ha cambiado el formato de las celdas.")
Cuando el mensaje se despliega (véase la figura 7-6), los usuarios no pueden proporcionar ninguna entrada a su macro. Todo lo que pueden hacer es clic en Aceptar u oprimir ENTER para elegir el cuadro de mensaje.
Uso de los botones del cuadro de mensaje para retroalimentaciónSin embargo, puede usar un cuadro de mensaje para regresar información limitada del usuario a su macro. Para esto, puede desplegar varios conjuntos de botones integrados. He aquí la sintaxis formal para los argumentos que puede proporcionar a un cuadro de mensaje:
MsgBox(mensaje[, botones] [, título] [, archivoayuda, contexto]
Observe que Mensaje es el único argumento necesario. Sin embargo, el argumento Botones
Figura 7-6 Un cuadro de mensaje
simple sólo despliega información
para el usuario, pero no puede regresar
ninguna entrada del usuario a la macro
91Capítulo 7 Creación de macros interactivas
puede incluirse como opción para desplegar botones diferentes de Aceptar, que es el predeterminado. Los cinco conjuntos opcionales de botones para un cuadro de mensaje se muestran en la tabla 7-1.
Todo lo que tiene que hacer para desplegar un conjunto opcional de botones es proporcionar el número Valor como argumento de Botones. Digamos, por ejemplo, que quiere desplegar los botones comunes Sí, No y Cancelar. Usaría el valor 3 como argumento de Botones, como se ilustra en el siguiente código:
x = MsgBox("¿Desea seguir adelante?", 3)
Ejecute este código y verá el cuadro de mensaje desplegado en la figura 7-7.
Figura 7-7 El cuadro de
mensaje proporciona al usuario
la retroalimentación para su
macro, con base en el botón en
que se hace clic
Constante Valor Descripción
vbOK 1 Aceptar
vbCancel 2 Cancelar
vbAbort 3 Abortar
vbRetry 4 Reintentar
vbIgnore 5 Ignorar
vbYes 6 Sí
vb No 7 No
Constante Valor Descripción
vbOKCancel 1 Despliega los botones
Aceptar y Cancelar.
vbAbortRetryIgnore 2 Despliega los botones
Abortar, Reintentar
e Ignorar.
vbYesNoCancel 3 Despliega los botones
Sí, No y Cancelar.
vbYesNo 4 Despliega los botones
Sí y No.
vbRetryCancel 5 Despliega los botones
Reintentar y Cancelar.
Tabla 7-1 Botones opcionales que pueden desplegarse en un
cuadro de mensaje
Tabla 7-2 Valores devueltos por el clic en uno
de los botones del cuadro de mensaje
Observe que cuando utiliza el argumento Botones, debe proporcionar una variable que contendrá el resultado (el botón que haya elegido el usuario). En nuestro código de ejemplo usamos la variable X. Después de que el usuario hace clic en un botón, X contiene uno de los valores mostrados en la tabla 7-2.
He aquí una macro completa que ilustra la manera de usar botones en su código:
Sub Mensaje()x = MsgBox("¿Desea seguir adelante?", 3)If x = 7 Then Exit Sub
Macros con Excel 200792
MsgBox ("Muy bien, seguirá ejecutándose esta macro.")
End Sub
Cuando se ejecuta esta macro, despliega un
cuadro de mensaje con botones Sí, No y Cancelar.
Obtenemos la respuesta del usuario en la variable X.
Esa respuesta puede ser 6, 7 o 2, si el usuario hizo
clic en el botón Sí, No o Cancelar, respectivamente.
En este caso, usamos una estructura If...Then
para probar el valor de X. Si es 7, el usuario respondió
al hacer clic en No cuando se le preguntó si quería
seguir adelante, de modo que se pasa a la subrutina
de salida (Exit Sub), y con ello se detiene la
ejecución de la macro. Pero si hizo clic en los botones
Sí o Cancelar, no se va a la subrutina de salida; se
ejecuta el resto de la macro y se despliega otro cuadro
de mensaje.
Uso de la barra de estado para retroalimentación más sutilLos cuadros de entrada y de mensaje son maneras
excelentes de comunicarse entre su macro y el
usuario. Pero tienen una posible desventaja: detienen
la macro en su ejecución igual que un vendedor que
pone su pie en la puerta.
No puede seguir ejecutando una macro hasta que el cuadro de entrada o de mensaje
esté cerrado. Se asienta allí y exige que se le note. A menudo esto es conveniente. Su macro
quiere que el usuario esté seguro de ver el mensaje, o que proporcione alguna información.
¿Pero qué pasa con situaciones en que quiere desplegar información que el usuario tiene la
opción de ignorar? Tome el ejemplo de páginas anteriores de este capítulo. Usó un cuadro
de mensaje para indicar al usuario que se ha cambiado el formato de las celdas. Por lo
general, el usuario sabe que se acaba de cambiar, de modo que no hay necesidad de detener
todo para desplegar un cuadro de mensaje que les indique esto. Sin embargo, en ocasiones
tal vez quiera revisar si se ha cambiado el formato de las celdas.
Una solución consiste en mostrar este tipo de información opcional en la barra de
estado de la ventana de Excel. La información será visible para el usuario, pero no detendrá
Algunos programadores
prefieren usar constantes
integradas en lugar de valores
cuando realizan tareas como la
especificación de argumentos
o la prueba de variables. En
ocasiones, cuando revisa
una lista de argumentos en
el sistema de ayuda de VBA,
verá tablas como las 7-1 o 7-2.
Cuando escribe su macro puede
usar cualquier valor (como 2)
o la constante (una palabra
descriptiva, como vbCancel).
He aquí la manera en que se
vería el código de ejemplo si
decide usar las constantes:
Sub Mensaje()
x = MsgBox("¿Desea seguir adelante?", vbYesNoCancel)
If x = vbNo Then Exit Sub
MsgBox ("Muy bien, seguirá ejecutándose esta macro")
End Sub
93Capítulo 7 Creación de macros interactivas
la ejecución como lo hace un cuadro de mensaje. He aquí un ejemplo que muestra cómo usar el objeto StatusBar en su código para desplegar un mensaje:
Sub MensajeBarraEstado()Application.StatusBar = "Se ha cambiado el formato de las celdas..."End Sub
Pruebe esta pequeña macro y vea cómo funciona. Para borrar el contenido de la barra de estado, use este código:
Application.StatusBar = ""
Creación de cuadros de diálogo personalizadosAhora sabe cómo usar varios conjuntos de botones para proporcionar al usuario
una manera de comunicar información simple a su macro (como cancelar, ignorar o
reintentar). Pero en ocasiones quiere permitir que el usuario seleccione de un grupo
más grande o variado de opciones. Por ejemplo, en lugar de forzar al usuario a escribir el
nombre de un estado, puede proporcionar una lista de todos los estados desde Alabama
hasta Wyoming.
O tal vez necesite obtener información amplia y compleja del usuario. Probablemente
requiera desplegar un formulario para que lo llenen. Para esto puede crear su propio
cuadro de diálogo personalizado. No es un cuadro de entrada ni de mensaje, pero en
cambio algo que cree para agregar requisitos especiales de interacción con el usuario. El
editor de VB tiene herramientas sofisticadas que le permiten diseñar muchos tipos de
formularios que el usuario puede llenar. Se les llama UserForms. Pueden ser pequeños,
como cuadros de entrada, o abarcar toda la pantalla. Los UserForms permiten gran libertad
al diseñarlos y decidir cuáles controles colocar en ellos.
Ofrecimiento al usuario de una lista de opcionesPara ver cómo funcionan los UserForms, diseñemos uno ahora. Agregará un ListBox a
un formulario, y también añadirá botones Cancelar y Aceptar para que el usuario pueda
cerrar su cuadro de diálogo (a un UserForm, cuando se despliega ante el usuario, suele
llamársele cuadro de diálogo).
En este ejemplo, querrá desplegar una lista de opciones para el usuario. Supongamos
que, de manera regular, necesita cambiar el tamaño de fuente en varias celdas a pequeño,
Macros con Excel 200794
mediano y grande. Quiere desplegar un cuadro de diálogo en que el usuario puede hacer
clic para seleccionar estas opciones.
Para agregar un UserForm a su proyecto, siga estos pasos:
Inicie la ejecución de Excel y oprima 1. ALT+F11 para abrir el editor de VB.
Elija Insertar | UserForm.2.
Ahora ve que el editor tiene el aspecto de la figura 7-8, con un nuevo formulario en
blanco en la ventana de la derecha (a ésta se le llama ventana de diseño cuando está
construyendo un formulario). También ve el Cuadro de herramientas a la izquierda,
que contiene los diversos controles que puede agregar al formulario. Si no la ve,
elija Ver | Cuadro de herramientas.
Mueva el puntero del ratón por el Cuadro de herramientas. Cada vez que detenga el 3. ratón sobre un ícono, aparecerá una descripción de ese ícono.
Localice el control Botón de comando, en el Cuadro de herramientas, y luego 4. arrástrelo y colóquelo en su formulario.
Cuando coloca un control, quedará seleccionado automáticamente (tiene un marco 5. gris alrededor con varios controladores para arrastrar que puede usar para cambiar el tamaño).
Figura 7-8 He aquí su
nuevo UserForm, listo para
que le agregue controles
95Capítulo 7 Creación de macros interactivas
Arrastre estos manejadores hasta que tenga un 6. botón más o menos cuadrado (véase la figura 7-9 para referencia).
Repita los pasos 4 al 6 para agregar un segundo 7. botón.
Ahora haga clic en el botón de la izquierda 8. para seleccionarlo. Luego localice su propiedad Caption en la ventana Propiedades. Observe que, como opción predeterminada, tiene la leyenda CommandButton1, CommandButton2, o cualquier número que represente el orden en que los agregó al formulario. En cualquier caso, quiere que el botón de la izquierda tenga la leyenda Aceptar. Así que Haga doble clic en la leyenda actual (como CommandButton1) en la columna de la derecha en la ventana Propiedades. Esto selecciona el nombre existente. Escriba Aceptar y oprima ENTER. Observe que la leyenda en el propio botón cambia de inmediato.
Repita el paso 8 para cambiar la leyenda del botón 9. de la derecha por Cancelar. Ahora tiene el conjunto de botones típico Aceptar y Cancelar de casi todos los cuadros de diálogo, como se ve en la figura 7-9.
Ahora agregue un control 10. ListBox a este formulario.
Si quiere cambiar rápidamente
entre vista de código y de diseño,
haga clic en los íconos Ver código
o Ver objeto, en la barra de título
del Explorador de proyectos,
como se muestra en la figura
7-10.
Figura 7-9 Ahora tiene los botones
Aceptar y Cancelar familiares en su
UserForm
Ver código
Ver objeto
Figura 7-10 Haga clic en los íconos para
cambiar entre Vista de código y Vista de
diseño
Adición de elementos a un cuadro de listaAhora que tiene la superficie visible de su formulario, necesita escribir algún código que llene el ListBox con las opciones que desea desplegar ante el usuario. Para obtener la ventana de código,
puede hacer doble clic en cualquier lugar del UserForm. Pero para este ejemplo, haga doble clic en el botón que ha llamado Cancelar.
Ahora se abre la ventana, con algunos subs ya creados. El editor ha proporcionado lugares donde puede escribir el código que responda cuando el usuario hace clic en
Macros con Excel 200796
cualquier lugar de los botones, o el propio UserForm. (A estos subs que reaccionan a los clics del usuario se les denomina manejadores de eventos; un clic es un evento que sucede, y necesita manejarlos con algún código.)
Usted simplemente quiere cerrar este cuadro de diálogo y terminar la ejecución de este pequeño programa si el usuario hace clic en el botón Cancelar. Así que agregue este simple código a cualquier botón de comando al que haya denominado Cancelar:
Private Sub_CommandButton1_Click()EndEnd Sub
Ahora pruebe esto. Oprima F5. Se despliega el UserForm. Haga clic en el botón Cancelar. Ahora desaparece el UserForm. Exactamente lo que quería.
Ahora necesita agregar las opciones al ListBox. Para esto utilice el comando AddItem. De regreso al editor de VB, observe en la parte superior de la ventana de código que hay dos listas desplegables. Abra la de la izquierda y seleccione UserForm. La lista de la derecha contiene todos los eventos que puede manejar para el propio UserForm. En la lista de la derecha, haga clic en el evento Activate. El editor inserta el sub correcto para manejar este evento.
La activación ocurre cuando se creó el UserForm, aún antes de que el usuario la vea desplegada. Así que éste es un buen lugar para poner código de limpieza, cualquier cosa que necesite hacérsele al formulario antes que el usuario interactúe con él.
Desea desplegar tres opciones de tamaño de fuente al usuario: Pequeño, Mediano y Grande. Usted está diseñando este formulario, de modo que puede asignar el nombre que desee a estas opciones: pequeño, chiquito, lo que sea. He aquí el código que ahora debe escribir en el evento Activate:
Private Sub UserForm_Activate()ListBox1.AddItem ("Pequeño")ListBox1.AddItem ("Mediano")ListBox1.AddItem ("Grande")End Sub
Pruebe esto al oprimir F5 y observar cómo estas opciones se despliegan para el usuario. Haga clic en el botón Cancelar para cerrar el UserForm. Tal vez quiera cambiar el tamaño del cuadro de lista en este momento, para que quepa adecuadamente en las opciones desplegadas (que no haya demasiado espacio en blanco, pero que tampoco se tape alguna opción). Si hace el cuadro demasiado pequeño, el editor agregará automáticamente barras de desplazamiento.
Respuesta a la selección del usuarioNuestro trabajo final consiste en escribir el código que reacciona cuando el usuario selecciona una opción en el ListBox y hace clic en el botón Aceptar. Este código debe
97Capítulo 7 Creación de macros interactivas
hacer que la fuente de la celda actual sea pequeña, mediana o grande (de acuerdo con el elemento del ListBox que elija el usuario).
Este código debe ir en el evento Clic del botón Aceptar. Debe revisar en cuál opción se ha hecho clic, en el ListBox, y luego hacer los cambios adecuados en el tamaño de la fuente.
Para saber en cuál elemento se hizo clic en el ListBox, debe usar la propiedad ListItem. He aquí cómo funciona: un valor de –1 significa que no se seleccionó nada (de modo que sólo responderá cerrando el cuadro de diálogo sin hacer nada). Un valor de 0 significa que se hizo clic en el primer elemento (pequeño en este ejemplo). Un valor de 1 significa que se seleccionó el segundo elemento, y
uno de 2 significa que el usuario eligió el tercer elemento, Grande. He aquí el código que debe escribir en el evento Click del botón Aceptar:
Private Sub CommandButton2_Click()
If ListBox1.ListIndex = 0 Then Selection.Font.Size = 8If ListBox1.ListIndex = 1 Then Selection.Font.Size = 12If ListBox1.ListIndex = 2 Then Selection.Font.Size = 18
EndEnd Sub
No es necesario probar –1 (sin selección), porque este código sólo cambia el tamaño si ListIndex es 0, 1 o 2. Si el número del índice de la lista es –1, no sucede nada, que es el resultado que queremos.
Siga adelante y oprima F5 para ver el efecto de sus esfuerzos. Por supuesto, puede modificar este formulario para que se amolde a sus necesidades: agregue todos los elementos que desee a la lista.
Asimismo, puede hacer mucho más con UserForms. Puede agregar controles del Cuadro de herramientas para desplegar imágenes, agregar etiquetas o cuadros de texto, crear conjuntos de botones o casillas de verificación para que el usuario haga clic, además de otros tipos de interfaces.
Tal vez se esté preguntando
por qué 0 representa el primer
elemento de un ListBox, 1
representa el segundo, etcétera.
Esto es debido a un error
cometido hace décadas cuando la
programación apenas empezaba.
Algún comité ya olvidado
decidió: ¿por qué desperdiciar
el 0? ¡Usemos el cero como
valor inicial para listas! No
fue una buena idea, pero es
demasiado tarde para corregir
esta rareza en la programación
de computadoras.
Puede encontrar gran cantidad de código
de ejemplo en línea. Un buen lugar para
empezar es elegir Ayuda | MSDN en la Web. Esto lo lleva al
portal de una rica colección de ejemplos de programación.
O puede usar Google para buscar ejemplos de código
específicos, como Excel ListBox.
Como sabe, hay gran cantidad de
posibilidades de formato disponibles en
las cintas de opciones de Excel. Pero en
ocasiones la selección de formato no es
exactamente lo que está buscando, o hay
tantos cambios de formato que los pasos para alcanzar el aspecto deseado de su hoja de
cálculo parecen interminables. Puede personalizar las herramientas de formato para que
cubran sus necesidades con la ayuda de macros, y también puede automatizar una revisión
completa del formato en macros que pueden llevarse al uso rápidamente.
Macros con Excel 2007100
Uso de macros para cambiar formatos existentesExcel proporciona una selección de formatos de fecha que, a primera vista, parece cubrir toda presentación posible de fechas. Pero para algunos la selección no es lo suficientemente completa. Puede publicar una fecha empleando su propio estilo único al asignar el comando de fecha y el estilo deseado a una macro.
Al observar las opciones de formato de fecha americano (haga clic en una celda y elija Formato de celdas, luego haga clic en la categoría Fecha), veo que no hay una opción para 14/03/2001, una fecha que usa diagonales, despliega el día y el mes con el número de dígitos necesarios (sin ceros) y el año de cuatro dígitos.
Por lo general, cuando crea un formato personalizado, el nuevo formato reside dentro del libro donde fue creado. Podemos crear un formato de fecha personalizada y hacer que quede disponible para otros libros al guardar el proceso en una macro.
Podemos grabar este proceso de personalización de fechas, de modo que primero hagamos a un lado el cuadro de formato de nuestra hoja de cálculo. No queremos que la
grabadora de macros grabe el movimiento del cursor, de modo que coloque el puntero en cualquier celda donde le gustaría ver que aparezca una fecha antes de que empiece a grabar.
Para grabar la nueva macro de formato de fecha, siga estos pasos:
No se desespere cuando vea
14 de marzo como fecha en
la lista de formatos de fecha.
Excel usa 14/3/01 como fecha
predeterminada sólo para fines
de despliegue de los diferentes
estilos. La fecha real que ingrese
en una celda aparecerá una vez
que haya elegido un estilo.
Figura 8-1 Grabación de nuestro estilo de
fecha personalizado
En la cinta de opciones Programador, haga 1. clic en Grabar macro.
Ingrese 2. MiFormatoFecha como nombre de la macro.
Asigne esta macro al método abreviado 3. CTRL+MAYÚS+D si planea usarla con frecuencia.
Almacene la macro en el Libro de macros 4. personal, para que esté disponible para todos sus libros.
Ingrese una descripción, 5. Formato de fecha 14/03/2001 como recordatorio (véase la figura 8-1).
Haga clic en Aceptar.6.
101Capítulo 8 Uso de macros para formato de celdas
Diseñe aquí su formato de fecha personalizado
Figura 8-2 Personalización de un formato
Figura 8-3 Macro MiFormatoFecha personalizada
Haga clic con el botón derecho en su celda activa y elija Formato de celdas.7.
Elija la categoría Personalizada.8.
Desplácese hasta encontrar las opciones de fecha y haga clic una vez en dd/mm/9. aaaa, el formato más parecido al que queremos usar.
En el campo Tipo (véase la figura 8-2), personalice su formato de fecha para que se 10. muestre d/m/aaaa.
Haga clic en Aceptar.11.
Apague la grabadora de macros al hacer clic en la opción Detener grabación.12.
Pruebe su macro al ingresar una fecha en la celda que acaba de formatear. Yo ingresé 12/03/01 y mi nuevo formato presentó la fecha 12/3/2001, ¡tal como lo quería ver! Ahora pruebe más su macro al cerrar el libro, abrir uno nuevo e ingresar una fecha en la celda. Luego oprima CTRL+MAYÚS+D mientras su puntero está en la celda para asignar el formato deseado a la celda.
Si examina el código en el editor de VB, verá que todos los pasos anteriores dieron como resultado una línea de código VBA muy sencilla, mostrado en la figura 8-3.
Cambio del aspecto de una hoja de cálculoPuede crear macros simples para formatear las diferentes áreas de su hoja de cálculo. Luego, en lugar de recorrer las cintas de opciones o tratar de
Macros con Excel 2007102
recordar métodos abreviados de teclado o comandos de menú contextual, puede resaltar un área de su hoja de cálculo, mostrar su lista de macros y aplicar rápidamente el tipo de formato que le gustaría usar.
Una macro para formar encabezados de columnaEsta macro aplica su estilo de encabezado de columna favorito: fuente Arial en negritas, centrada y 12 puntos. Debido a que las características de formato están disponibles en pantalla, en la cinta de opciones,
puede grabar esta macro. Seleccione algunas celdas a las que desea aplicar el formato, o con sólo una celda seleccionada, siga estos pasos:
Inicie la grabadora de macros y asigne un nombre a la macro. Por lo general, no 1. asigno métodos abreviados de teclado a menos que los use con frecuencia. Debido a que voy a crear varias macros de formato diferentes, sólo voy a asignar nombres y no métodos abreviados, para que no confunda los métodos abreviados que van con las macros. (En la figura 8-4 se muestra que estoy asignando a la macro el nombre EncabezadosColumna.) Luego haga clic en Aceptar para iniciar la grabadora.
Con la celda o celdas ya seleccionadas, haga clic en la cinta de opciones Inicio y 2. aplique sus opciones de formato: negritas, centrada y fuente Arial en 12 puntos.
Haga clic en el botón Detener grabación en la parte inferior de la hoja de cálculo.3.
Si echa un vistazo al código VBA que se obtiene de esa macro, en la figura 8-5, puede ver en primer lugar que la macro empieza por aplicar la característica Negritas a las celdas seleccionadas. A continuación, hay una serie de instrucciones With Selection, aplicando las otras opciones que hemos hecho a las celdas seleccionadas. También puede ver que hay gran cantidad de código desperdiciado.
Puede decidir que se deje intacto todo el código, pero recomiendo que se limpie la macro para que
sólo se usen las líneas de código necesarias. Esto es
así para que, dentro de meses o años, cuando revise
de nuevo esta macro, no tenga que recorrer las líneas
de código tratando de recordar lo que se ha realizado. Figura 8-4 Creación de una macro de
aplicación de formato
El ingreso de una descripción le ayudará a recordar cuáles características de formato aplicará esta macro
La selección de las celdas antes
de encender la grabadora de
macros se debe a que no querrá
que el proceso de grabación
incluya la selección de las celdas.
Ese proceso se vuelve parte de
la macro grabada y, por tanto,
interfiere con la aplicación de la
macro a diferentes áreas de las
celdas seleccionadas en el futuro.
103Capítulo 8 Uso de macros para formato de celdas
Además, si alguien más examina esta macro, el código necesario será obvio y las líneas adicionales de código se habrán ido. Será mucho más fácil comprender la macro.
Tras una revisión, veo que el primer bloque With Selection produce una alineación al centro. El comando para esto aparece en la primera línea del código debajo del comando With Selection; ninguna de las demás instrucciones de la sección son necesarias para centrar y pueden eliminarse, dejándonos con la siguiente
instrucción.
With Selection.HorizontalAlignment =
xlCenterEnd With
El segundo segmento o With Selection del código VBA de esta macro se aplica a la siguiente selección de fuente, Arial. El resto de ese segmento es innecesario, pero ¡espere! Eche un vistazo a la segunda línea del código de la selección:
With Selection.Font
.Name = "Arial"
.Size = 11
End With
Cuando grabé la imposición de la fuente Arial en mis celdas seleccionadas, el comando de fuente Arial se colocó en la macro, y también se aplicó el tamaño de fuente predeterminado de 11, junto con otras opciones predeterminadas (como no subrayado, no índices, etcétera). En el siguiente segmento With Selection de mi código, se ordenó el cambio al tamaño de fuente de 12, pero no hay razón para no consolidar un poco más e incorporar el tamaño de fuente revisado en la misma área del código que en la selección de fuente. Por tanto, mostramos las dos líneas de código necesarias, después del resto de las
líneas de código en la sección que se ha eliminado:
With Selection.Font.Name = "Arial".Size = 11
End With
Figura 8-5 Examen del código de la macro grabada
Macros con Excel 2007104
Al hacer este cambio en el código, podemos eliminar ahora la última área de With Selection del código VBA. De modo que ahora la macro final tiene este aspecto:
Sub EncabezadosColumna()' EncabezadosColumna Macro' Encabezados de columa en negritas, centrados, Arial 12 puntos
Selection.Font.Bold = TrueWith Selection
.HorizontalAlignment = xlCenterEnd WithWith Selection.Font
.Name = "Arial"
.Size = 12End With
End Sub
Una macro para formatear el aspecto de los númerosCon frecuencia creará una hoja de cálculo llena de números, y descubrirá que el formato de número predeterminado aplicado por Excel no es el que quiere. No se usa el mismo formato siempre, pero hay algunos formatos estándar usados con tanta frecuencia que sería bueno poder seleccionarlas rápidamente, con la menor cantidad posible de clics. Mi estilo de formato de números favorito es Coma, sin posiciones decimales, y prefiero que los números negativos se desplieguen en rojo y con un signo de menos.
Una vez más, voy a seleccionar celdas (o incluso una sola celda) antes de encender la grabadora de macros (este proceso evita que la grabadora trate de grabar mis movimientos de celda o la selección del ratón). De esa manera puedo aplicar fácilmente el formato a cualquier celda con sólo seleccionar las celdas y luego ejecutar la macro.
He aquí los pasos para crear una macro que aplicará mi estilo favorito de formato de número.
Figura 8-6 Grabación de la macro
FormatoNúmero
Encienda la grabadora de macros. Asigne un 1. nombre a esta macro, guárdela en el Libro de macros personal y proporcione una breve descripción, similar al ejemplo de la figura 8-6. Luego haga clic en Aceptar para iniciar la grabación.
Aplique los formatos de número que le gusten a 2. la celda o las celdas seleccionadas. Puede hacer clic en la cinta de opciones Inicio para encontrar algunas de las herramientas de formato de número, o puede hacer clic con el botón derecho
105Capítulo 8 Uso de macros para formato de celdas
en la celda o las celdas seleccionadas, elija Formato de celdas y luego Número,
después haga sus selecciones de formato (véase la figura 8-7). Haga clic en Aceptar
para aplicar sus elecciones.
Si hay formatos de fuente que desea aplicar a sus números, como una selección de 3.
fuente, una alineación o una característica de subrayado, también puede hacer esas
selecciones en este momento.
Cuando se hayan hecho todas las selecciones de formato, apague la grabadora de 4.
macros.
Pruebe su macro al ingresar algunos números en una nueva área de su libro, y luego elija
su macro FormatoNúmero de la lista Macros.
Una vez más, tiene sentido examinar el código de su macro en busca de líneas
innecesarias de código. Si sólo aplicó un formato de número, el código es simple y no
necesita mucha refinación. Si también aplicó selecciones de fuente, habrá líneas de código
que pueden eliminarse al limpiar el código y hacerlo más comprensible. He aquí el código
de mi macro FormatoNúmero:
Sub FormatoNúmero()' FormatoNúmero Macro' Coma, sin centavos, negativos en rojo
Selection.NumberFormat = "#,##0_ ;[Red]-#,##0"End Sub
Cambie el aspecto de una hoja de cálculoA veces querrá cambiar no sólo el aspecto de los números o encabezados,
sino el de la hoja de cálculo como un todo. Tal vez quiera desplegar la hoja de cálculo sin líneas guía, o ajustar el ancho de las columnas. Quizás prefiera un estilo y un tamaño específicos de fuente. Podemos crear una macro que aplica estas especificaciones a una hoja de cálculo.
Dependiendo de los tipos de cambios que quiera aplicar, puede seleccionar previamente
toda la hoja de cálculo (al hacer clic en el cuadro que se encuentra a la izquierda de la letra
Figura 8-7 Elección de un formato de número
Haga clic en la ficha Número para desplegar las opciones de formato
Seleccione opciones de posiciones decimales. Uso de coma y presentación de números negativos
Macros con Excel 2007106
de la columna A), o puede seleccionar algunas columnas o filas. Como preparación para
grabar esta macro, piense en lo que afectará. Si va a ajustar anchos de columna, necesitará
seleccionar algunas columnas. De igual manera, necesitará seleccionar algunas filas si
quiere ajustar la altura de las filas.
Para este ejemplo de una macro que cambie el aspecto de una hoja de cálculo, voy a
seleccionar toda la hoja después de que empiece a grabar. Mi macro, a la que llamaré
MiConfiguraciónHoja, eliminará líneas guía, ajustará el ancho de la columna a nueve
caracteres y establecerá Arial como fuente de toda la hoja de cálculo.
Encienda la grabadora de macros. Asigne un nombre a la macro, almacénela en 1. el Libro de macros personal y proporcione una breve descripción, similar a la
figura 8-8.
Haga clic en el botón Seleccionar todo, en la esquina superior izquierda de la hoja 2. de cálculo.
Figura 8-8 Formateo de una hoja de cálculo
Haga clic en la cinta de opciones Diseño 3. de página, y luego desmarque la casilla Ver debajo del encabezado Líneas de cuadrícula.
Desplace una de las barras de columna entre 4. los encabezados de letra de columna para que el nuevo ancho de las columnas seleccionadas sea de nueve caracteres.
Cambie la fuente a Arial en la cinta de 5. opciones Inicio.
Apague la grabadora de macros.6.
Pruebe la macro al abrir un nuevo libro y ejecutar la macro. Al examinar el código VBA, verá que el único cambio que tal vez quiera hacer sea eliminar el código excedente en el área With Selection.Font, donde el único código que necesito es éste:
With Selection.Font.Name = "Arial"
End With
La macro completa se puede ver en la figura 8-9.
107Capítulo 8 Uso de macros para formato de celdas
Cambio del esquema de color de una hoja de cálculoHe aquí una pequeña macro que puede usar para aplicar un cambio de formato al color de fondo de su hoja de cálculo. Con esta macro puede cambiar el
aspecto de las filas de su hoja de cálculo para que cada tercera fila sea verde, como las viejas impresiones de computadora de las décadas de 1970 y 1980.
Esta macro usa algunas características que se analizarán con mayor profundidad en otro apartado de este libro, pero como la macro trata principalmente con formato, es apropiado incluirla aquí. Hay un bucle For/Next en esta macro; aprenderá a crear sus propios bucles For/Next en el capítulo 11. También creará una variable en esta macro. Esto le ofrece un buen anticipo para el siguiente capítulo, el 9, que está dedicado por completo a las variables.
Para usar esta macro, se selecciona un área de su hoja de cálculo. Dentro de esta macro, a la que he llamado ColorAlterno, se crea una variable para indicar el número de filas que seleccionó. Luego la macro cuenta de 2 en 2 y aplica un sombreado de color a filas alternas. Ésta no es una macro que pueda grabar, de modo que tiene que crearla en el editor de VB.
Sub ColorAlternoDim i as LongFor i = 1 to Selection.Rows.Count Step 2
Selection.Rows(i).Interior.ColorIndex = 35NextEnd Sub
La línea "Dim i as Long" usa la instrucción Dim o Dimension de VBA para asignar una variable, en este caso llamada “i”. La frase ‘Dim variable as long’ define la variable como un entero.
El bucle For/Next, que se analiza con más detalle en el capítulo 11, simplemente establece que se toman las filas del área seleccionada, empezando con la 1 y continuando hasta el final de la selección, de 2 en 2, lo que significa que a cada tercera línea se aplica un color interior, o un sombreado. En este caso, he seleccionado 35 del Índice de colores de Excel (revise el siguiente Vínculo). Para usar un color diferente para su sombreado, simplemente cambie el 35 por otro número en el índice de color.
Figura 8-9 Código de macro para cambiar formato de hoja de
cálculo
Macros con Excel 2007108
Uso y combinación de macros de formatoAhora que hemos completado varias macros que proporcionan cambios de formato para nuestras hojas de cálculo, es hora de considerar las maneras en que pueden usarse.
Cuando se construye una hoja de cálculo, de la misma manera en que seleccionaría un área y aplicaría cambios de formato, puede seleccionar un área y hacer clic en la lista Macros para desplegar las macros de formato que están disponibles. Cada macro que hemos creado combina varias herramientas de formato, y puede aplicar esas herramientas con una opción de macro, en lugar de tener que realizar cada tarea por separado.
Cuando despliega una lista de macros, aparecen todas las macros de su Libro de macros personal, junto con cualquier macro que haya guardado en su libro actual, y cualquiera que haya guardado en otros libros abiertos. Elija una de sus macros de formato, haga clic en el botón Ejecutar y todas las tareas formateadas que cargó en la macro elegida se aplicarán al área de la hoja de cálculo que seleccionó. O si creó una macro como MiConfiguraciónHoja,
que fue diseñada para formatear toda la hoja de cálculo, no necesitará seleccionar ninguna celda antes de ejecutarla.
Combinación de macrosPuede tomar piezas de las macros que creó y hacer nuevas megamacros, combinando los fragmentos que le parezcan útiles. Por ejemplo, antes creamos la macro MiConfiguraciónHoja que formateó el aspecto de toda la hoja de cálculo. También creamos una macro FormatoNúmero, que cambia el formato de las celdas con números en un área seleccionada.
La macro MiConfiguraciónHoja realiza la tarea de seleccionar todas las celdas de la hoja de cálculo. ¿Por qué no tomar el formato de número personalizado y aplicarlo también a todas las celdas? Podemos tomar el código de la macro FormatoNúmero, colocar ese código en la macro MiConfiguraciónHoja, y ahora toda la hoja de cálculo también tendrá formato de número personalizado, y sólo se ejecutó una macro. He aquí cómo funciona:
Abra el editor de VB.1.
Encuentre la macro FormatoNúmero.2.
Copie la línea de código que aplica su formato de número personalizado a la 3. selección: Selection.NumberFormat = "#,##0_ ;[Red]-#,##0"
Puede ver la paleta de Excel con sus números
correspondientes en http://www.mvps.org/
dmcritchie/excel/colors.htm.
109Capítulo 8 Uso de macros para formato de celdas
Asegúrese de copiar y no cortar
el código de la macro de formato
de número. Aún queremos
conservar la macro intacta, de
modo que no elimine ninguna
línea de código; sólo copie el
código al portapapeles.
Encuentre el código de la macro 4. MiConfiguraciónHoja.
Inserte la línea de código que copió de la macro 5. FormatoNúmero. El código puede colocarse en cualquier lugar después de la línea Cells.Select y antes del segmento With/End With.
Guarde sus cambios (6. CTRL+G).
He aquí la macro MiConfiguraciónHoja revisada:
Sub MiConfiguraciónHoja()
' MiConfiguraciónHoja Macro
' Toda la hoja, sin líneas guía, columna de 9 caracteres, fuente Arial
Cells.Select
ActiveWindow.DisplayGridlines = False
Selection.ColumnWidth = 9
Selection.NumberFormat = "#,##0_ ;[Red]-#,##0"
With Selection.Font
.Name = "Arial"
End With
End Sub
Pruebe esta macro en un nuevo libro, y encontrará que, además de los otros cambios de
formato que colocamos en la macro MiConfiguraciónHoja, ahora se ha aplicado también el
formateo de números.
Uso de comandos de VBA para seleccionar áreas de hoja de cálculoHasta ahora hemos seleccionado un área de la hoja de cálculo antes de grabar una macro,
de modo que cuando ejecutemos la macro seleccionaremos las celdas aplicables y luego
ejecutaremos la macro, o también hemos seleccionado toda la hoja de cálculo dentro de
la macro y luego hemos aplicado los comandos de las macro de formato a toda la hoja de
cálculo.
También puede organizar un área para que sea seleccionada dentro de la macro. He
aquí algunos comandos de macro comunes que seleccionan áreas específicas de su hoja de
cálculo.
Acti veCell.CurrentRegion.Select Selecciona el rango especificado que
empieza con la celda actual.
Macros con Excel 2007110
Cells(numerofilas, númerocolumnas) Selecciona la ubicación de una
celda determinada.
Range(“nombrerango”) Selecciona un rango con nombre (el nombre del
rango aparece entre comillas).
Range(Cells(celdainicial),Cells(celdafinal)) Selecciona un
rango al dar las coordenadas de inicio y final. Las referencias a celdas se dan en
términos numéricos (la celda B5 se muestra como Cells(2.5).
Selection.EntireColumn Selecciona la columna actual.
Selection.EntireRow Selecciona la fila actual.
Pruebe la creación de una macro al ingresar comandos en el editor de VB que incluya un comando de selección. He aquí un ejemplo de una macro que cambiará el aspecto de la región especificada, empezando con la celda actual, para que las celdas de la región se pongan en negritas y las columnas se redimensionen para que se ajusten mejor.
Sub FormatoNegritas()ActiveCell.CurrentRegion.Select
Selection.Font.Bold = TrueSelection.EntireColumn.AutoFit
ActiveCell.SelectEnd Sub
Para probar esta macro, abra un libro e ingrese alguna información en las celdas adyacentes. El comando CurrentRegion busca una región específica de celdas, de modo que en este caso las celdas adyacentes que están llenas reciban el beneficio de este formato de macro. En la figura 8-10 se muestra un rango de celdas antes de aplicar la macro FormatoNegritas, y la figura 8-11 muestra el mismo rango después de aplicar la macro FormatoNegritas.
Figura 8-10 Antes de que se aplique la
macro FormatoNegritas
Figura 8-11 Después de que se ha
aplicado la macro FormatoNegritas
Las variables son una característica
importante de cualquier tipo de
programación, entre las que se encuentran
las macros. En realidad, las variables son
comunes en muchas situaciones normales
en la vida. Por ejemplo, el clima de su ciudad, su deuda mensual en tarjetas de crédito y
su apetito son variables. En su sentido más general, una variable es simplemente algo que
cambia. En este capítulo se exploran las variables y temas relacionados como expresiones,
operadores y matrices.
Macros con Excel 2007112
¿Por qué usar variables?Las variables se crean en una macro por la misma razón que podría tener un sobre color Manila en su escritorio con el texto Tarjeta de crédito. Cada mes pone dentro sus estados de cuenta más recientes. Cada vez que obtiene uno nuevo, lo reemplaza por el del último mes. De modo que el concepto general de una variable es: un contenedor etiquetado que contiene una parte de información.
Ahora, no es necesario que cambie el dato de una variable cuando se ejecuta un programa. (Digo dato porque cada variable contiene un valor único, un número o una cadena de texto). Por ejemplo, tal vez no use su tarjeta de crédito por varios meses, de modo que el valor de la deuda sigue siendo el mismo. O podría vivir en San Diego y el clima es idéntico por meses. Pero una variable tiene la capacidad de cambiar, y esto le da poder a un programa.
El valor de una variable (sus datos) puede cambiar con base en la entrada de usuario o en acciones que toman lugar dentro de la macro mientras se ejecuta. Por ejemplo, si escribe una macro que administra sus finanzas personales, podría usar un cuadro de entrada para que le permita al usuario ingresar a la deuda de la tarjeta de crédito de este mes. De modo que esa variable cambia de acuerdo con la entrada del usuario. Pero una variable que contiene su valor neto actual cambiará con base en cálculos que la macro realiza, como restar los gastos de comida, sumar las ganancias por intereses, etc.
En una macro puede usar el nombre de la variable en lugar de su dato (el número o la cadena de texto que contiene). Si coloca su cuenta de tarjeta de crédito actual cada mes en su sobre, siempre puede buscar en este sobre etiquetado Tarjeta de crédito para saber cuánto debe hasta el momento. De manera similar, una vez que se crea una variable en una macro en ejecución, un lugar en la memoria de la computadora contiene ese nombre de variable junto con sus “contenidos”, la información que esta variable “contiene” hasta que lo cambie el programa en ejecución, en caso de que cambie.
Ya ha usado variables varias veces en los ejemplos de código de este libro. Sería difícil escribir macros sin el uso de variables. Usemos un ejemplo del capítulo 7:
Sub ObtenerIniciales() x = InputBox("Por favor ingrese sus iniciales", "Ingrese sus
iniciales")Range("A1").SelectActiveCell.FormulaR1C1 = x
End Sub
En esta macro, le pide al usuario que escriba sus iniciales, y luego despliega éstas en una celda. La variable de esta macro es X. Lo más probable es que cada persona que ejecute esta macro escriba diferentes iniciales, de modo que el valor de X varía. Mientras se ejecuta la macro, este dato se retiene. Pero cuando la macro deja de ejecutarse, el dato se pierde y
113Capítulo 9 Uso de variables en macros
debe volver a escribirse cada vez que la macro se ejecuta. Sin embargo, antes de que esta macro termine de ejecutarse, utiliza X por segunda vez para ingresar el dato en una celda.
Asignación de nombres a variablesEn el ejemplo anterior, usé el nombre simple X para mi variable. Pero usted puede usar
cualquier nombre que desee, siempre y cuando siga algunas sencillas reglas. Una variable
debe:
Empezar con una letra, de modo que no se permite 12Meses, pero sí Meses12.
No debe incluir ninguna de las palabras usadas por el propio VBA, como If, Sub o
End.
No debe ser mayor de 255 caracteres.
No debe incluir caracteres especiales como signos de puntuación, corchetes, el
símbolo de porcentaje (o ninguno de esos símbolos que se encuentran arriba
de los números en el teclado). De modo que no está permitido Mi%, pero sí
MiPorcentaje.
Por fortuna, no importa la manera en que use
las mayúsculas y minúsculas. MiPorcentaje se
ve como la misma variable que miporcentaje
o MIPORCENTAJE. Así, puede combinar las
mayúsculas y minúsculas como lo desee y VBA
tratará estas variaciones como si fueran la misma
variable. Por supuesto, si escribe mal el nombre,
puede causar errores. Para VBA, MiPorcentaje
y MiiPorcentaje son dos variables diferentes.
(Este error en particular puede evitarse al declarar
de manera explícita todas las variables. Consulte el
resumen en páginas posteriores de este capítulo.)
Creación de una variablePuede crear una variable con sólo usarla. Puede hacer esto con un objeto como un cuadro de entrada (igual que en el ejemplo de código anterior del capítulo 7). Otra manera común de usar (y, por tanto, de crear) una variable es tan sólo asignar algún valor a la variable, como en este ejemplo:
Burros = 15
Estas mismas restricciones
de asignación de nombres se
aplican a otras cosas a las que
asigna nombre en VBA, como
módulos, subs, etcétera. VBA
le indicará si utiliza un nombre
inapropiado al desplegar un
mensaje de error de sintaxis
(cuando asigna nombres a
variables), o si trata de asignar un
nombre incorrecto a un módulo,
verá un mensaje de error No se
trata de un nombre legal.
Macros con Excel 2007114
Declaración formal de la variable: algunas
personas las aman y otras las odian. ¿Quién
tiene razón? En realidad, declarar variables se
considera esencial para programas grandes,
pero no tanto con las macros.
Las macros suelen ser pequeñas y
autosuficientes, de modo que, por lo general,
puede ignorar con toda seguridad un par
de características relacionadas con las
variables: declararlas y especificar su tipo. Sí,
hay varios tipos de variables: string (texto),
integer (número sin punto decimal), floating
(números con punto decimal, de manera que
pueden expresar fracciones), etc.
Pero en programación más avanzada
y compleja, se considera una buena idea
declarar de manera formal y explícita cada
variable. He aquí cómo se hace:
Sub ObtenerIniciales()Dim x As Stringx = InputBox("Por favor
ingrese sus iniciales", "Ingrese sus iniciales")
Range("A1").SelectActiveCell.FormulaR1C1 = x
End Sub
El comando Dim declara una variable. Dim
le indica a VBA que ahora estamos creando
una nueva variable. En el ejemplo anterior,
declaramos que el nombre de esta nueva
variable es X y que es un tipo de variable
string.
Recuerde que si no incluye esta línea
de código Dim en su macro, VBA creará
automáticamente esta variable x por
usted (a esto se le denomina declaración
implícita). Entonces, ¿por qué son valiosas las
declaraciones explícitas?
La declaración formal de una variable
ayuda a evitar un par de errores (escribir
mal el nombre de una variable en otro lugar
del código, o causar que VBA interprete de
manera incorrecta el tipo de una variable
y, por tanto, produzca una respuesta
incorrecta).
Sin embargo, se dice que para los novatos
en la escritura de macros resulta abrumador
preocuparse por las declaraciones explícitas.
Pero siga adelante y declare todas sus
variables si lo desea.
Algo más: si deja fuera las declaraciones
explícitas, ¿qué tipo de variable usa VBA
cuando crea variables implícitas? Utiliza un
tipo especial para todo propósito llamado
variante, que permite que VBA administre
automáticamente todo el problema de escribir
variables.
Este acto, al mismo tiempo, crea el nombre de la variable y le asigna un valor. En este ejemplo, ha proporcionado una etiqueta (un nombre de variable) Burros, y se ha indicado que hay 15 burros. El usuario nunca ve esta etiqueta, Burros. Se usa por motivos de programación, y puede darle un nombre que tenga algún significado para usted.
La mayoría de los programadores asignan nombres a las variables que los ayudan a comprender el significado o el propósito de la variable. Una variable llamada X es menos útil que una llamada Burros. Los nombres descriptivos de variable pueden facilitar aún más la lectura de su código, así como la prueba y modificación de su macro. Sin embargo, cuando el propósito de una variable es obvio (como un cuadro de entrada que solicita las iniciales del usuario), tiene la libertad de usar etiquetas breves como X, S, o cualquiera otra.
115Capítulo 9 Uso de variables en macros
Combinación de variables en expresionesLas variables pueden interactuar entre sí. He aquí un ejemplo que muestra cómo pueden
interactuar matemáticamente, agregando una variable a otra para producir una tercera:
Burros = 15Monos = 3TotalAnimales = Burros + Monos
Como lo ilustra la tercera línea, puede usar nombres de variables como si fueran el propio contenido de éstas. Si dice Monos = 3, entonces ha asignado el valor 3 a la palabra Monos. Después de eso, puede usar Monos como lo haría con el número 3.
TotalAnimales = Burros + Monos
La línea anterior es lo mismo que lo siguiente:
TotalAnimales = Burros + 3
Al propio número (3 en el ejemplo) se le denomina literal porque es literalmente tres, literalmente un valor. Las literales de cadena se encierran entre comillas: “Tomás” es una literal de cadena. Cuando combina variables con variables (como en Burros + Monos) o variables con literales (como en Burros + 3), crea una expresión.
¿Qué es exactamente una expresión? Si alguien le dice que tiene un cupón de $1 de descuento por un CD que cuesta $15 de Amy Winehouse, de inmediato piensa en $14. De la misma manera, VB reduce a su forma más simple los diversos elementos vinculados en una expresión. A esta acción, reducir algo a su forma más simple, se le llama evaluación.
En español simple: si escribe 15 – 1 en uno de sus programas, Visual Basic reduce ese grupo de símbolos, esa expresión, a un solo número: 14. Visual Basic simplemente evalúa lo que ha dicho y lo usa en el programa como la esencia de lo que está tratando de decir.
Una expresión está integrada por dos o más variables (o literales) conectadas por uno o más operadores. Llegaremos en breve a los operadores. El signo más en 2 + 2 es un operador. En total, hay 23 operadores que puede usar cuando programa macros.
Ciertos operadores, como > (mayor que), hacen que las expresiones se evalúen como verdaderas o falsas (cero representa falso, cualquier otro número representa verdadero). Veamos cómo funcionan:
En programación, el término
expresión suele usarse para
describir cualquier cosa que
regresa un resultado mientras
se ejecuta el programa. Algunas
personas incluso consideran una
sola variable como una expresión
(o una referencia a un objeto).
Sin embargo, estoy usando el
significado más tradicional y
descriptivo de expresión en este
libro.
Macros con Excel 2007116
EdadJuan = 33EdadBeatriz = 27If EdadJuan > EdadBeatiz Then MsgBox "Él es mayor"
EdadJuan > EdadBeatiz es una expresión. Esta expresión asegura que EdadJuan es mayor que EdadBeatriz. El símbolo mayor que (>) es uno entre varios operadores de comparación. Visual Basic revisa las variables EdadJuan y EdadBeatriz y el operador de
relación que los combina en la expresión. Luego VB determina si la expresión es verdadera. La estructura If...Then basa sus acciones en la veracidad o falsedad de la expresión.
En este caso, el cuadro de mensaje se despliega porque la expresión es verdadera. Sin embargo, si cambia EdadBeatriz a 33 o algo mayor, entonces el cuadro de mensaje no se desplegará. La expresión se evaluará como Falsa.
Los operadoresEl operador > (mayor que) es sólo uno de muchos operadores. En la siguiente sección se describen todos ellos.
Operadores de comparaciónLos operadores de comparación siempre devuelven simplemente una respuesta de verdadero o falso.
< Menor que
<= Menor que o igual a
> Mayor que
>= Mayor que o igual a
<>
=
No es igual a
Igual
Is ¿Dos variables de objeto hacen
referencia al mismo objeto?
Like Coincidencia de un patrón
También puede usar operadores
de comparación con texto.
Cuando se usa con operadores
de texto, la comparación se basa
en las cualidades alfabéticas del
texto, y se dice que Andrés es menor que Antonio.
Nota especial sobre Mod: el
operador Módulo (Mod) le da
cualquier cantidad sobrante
en una división, pero no el
resultado de la propia división.
Esta operación es útil cuando
quiere saber si algún número
se divide equitativamente entre
otro número. De esa manera,
podría escribir una macro que
tome acciones a intervalos. Por
ejemplo, si quiere imprimir el
número de página en negritas
cada cinco páginas, podría
ingresar lo siguiente:
If NúmeroPágina Mod 5 = 0 ThenFontBold = TrueElseFontBold = 0End If
15 Mod 5 da como resultado 0.
16 Mod 5 da como resultado 1.
17 Mod 5 da como resultado 2.
Pero 20 Mod 5 da como
resultado 0 una vez más.
117Capítulo 9 Uso de variables en macros
Operadores aritméticos^ Exponenciación (el número multiplicado por sí mismo; 5 ^ 2 es 25 y 5
^ 3 es 125)
– Negación (números negativos, como –25)
* Multiplicación
/ División
\ División entera. (Este tipo de división no proporciona sobrantes, ni
fracciones, ni punto flotante de decimal: 8 \ 6 da como resultado 1. La
división entera es más fácil, y el equipo la realiza más rápido que una
división común.)
Mod Módulo aritmético. (Consulte el Memo de la página 116 como
referencia.)
+ Suma
– Resta
& Unión de cadenas
Operadores lógicosNot Negación lógica
And Y
Or O inclusivo
XOR (Uno, pero no ambos.)
Eqv (Equivalente)
Imp (Implicación: primer elemento falso, segundo verdadero.)
En la práctica, probablemente necesitará usar sólo And, Not y Or entre los operadores lógicos. Estos operadores trabajan, en esencia, de manera muy parecida a como lo hacen en una expresión normal. He aquí un ejemplo que nos muestra cómo usar Or:
If 5 + 2 = 4 Or 6 + 6 = 12 Then MsgBox "Uno de los dos es verdadero."
En realidad, una de estas dos expresiones es verdadera. Seis más seis es igual a 12. De modo que se desplegará el mensaje. Sólo es necesario que una o la otra expresión sea verdadera en este caso.
Sin embargo, si usa el operador AND, entonces ambas expresiones deben ser verdaderas para que el mensaje se despliegue:
If 5 + 2 = 4 And 6 + 6 = 12 Then MsgBox "Ambos son verdaderos."
Macros con Excel 2007118
Esto evalúa como Falso, de modo que no se despliega el mensaje.
El operador de cadenaEl operador & añade (une) piezas de texto:
N = "Luisa"N1 = "Lane"J = N & " " & N1MsgBox J
El resultado es Luisa Lane.
Precedencia de operadoresEs necesario abordar uno de los problemas relacionados con las expresiones: la precedencia.
Cuando usa más de un operador en una expresión, ¿cuál operador debe evaluarse primero? ¿Cuál operador toma precedencia sobre el otro?
Qué se evalúa primeroHe aquí un ejemplo que usa los operadores de multiplicación y suma:
MsgBox 3 * 10 + 5
¿Esta expresión significa que se multiplique primero 3 por 10, obteniendo 30? ¿Y que
luego se sume 5 al resultado? ¿Debe desplegar VBA 35 en el cuadro de mensaje?
¿O significa que se sumen 10 y 5, y que luego se multiplique el resultado por 3? Esto
daría 45. Como puede ver, hay ambigüedad aquí. Esta expresión puede evaluarse de dos
maneras distintas, dando dos resultados distintos. No podemos tener eso.
Para asegurarse de que obtiene el resultado que pretende cuando usa más de un
operador, use paréntesis para encerrar los elementos que desea que se evalúen primero. Si
pretende que primero se ejecute 3 * 10 y luego se sume 5, escriba esto en su macro:
MsgBox (3 * 10) + 5
Al encerrar ese 3 * 10 entre paréntesis, le indica a VBA que quiere que los elementos encerrados se consideren como un solo valor y que se evalúen antes de que ocurra otra cosa.
Pero si trata de decir que primero se sume 10 + 5 y luego se multiplique el resultado por 3, escriba esto:
MsgBox 3 * (10 + 5)
119Capítulo 9 Uso de variables en macros
En expresiones complicadas, incluso puede anidar paréntesis para dejar en claro cuáles elementos deben calcularse en un orden determinado. Aquí he usado dos conjuntos de paréntesis:
MsgBox 3 * ((9+1) + 5)
Sin embargo, VBA tiene un orden integrado de precedencia. Por tanto, si lo desea, puede dejar los paréntesis fuera. Si trabaja mucho con números, tal vez prefiera memorizar la siguiente lista, que ilustra el orden de precedencia, donde la exponenciación se realiza primero, la negación después, y así sucesivamente.
Aunque la mayoría sólo usan paréntesis y se olvidan del problema por completo, he aquí el orden en que VBA evaluará una expresión de la primera evaluada a la última:
Operadores aritméticos en orden de precedencia^ Exponentes (6 ^ 2 es 36. El número multiplicado por sí mismo X
número de veces.)
– Negación (números negativos como –33)
*/ Multiplicación y división
\ División entera
Mod Módulo aritmético (cualquier valor que sobra en una división)
+ – Suma y resta
Los operadores
relacionales
Los operadores
lógicos
Matrices: variables agrupadasLas matrices son variables que se han agrupado. Dentro de la estructura de una matriz, las variables comparten el mismo nombre de texto, pero cada una tiene su número de índice único. Como los números pueden manipularse matemáticamente (y los nombres de texto no), poner un grupo de variables en una matriz le permite trabajar de manera fácil y eficiente con ellas como grupo. Puede manipular los elementos (individuales) en la matriz al usar bucles como For...Next descritos en el capítulo 11.
Las matrices se usan en programación de computadoras por la misma razón que los códigos postales se usan en correos. Imagine cientos de apartados postales con etiquetas de texto. Imagine la pesadilla de ordenar miles de cartas cada día en cajas que no están indexadas de alguna manera ni ordenadas numéricamente.
Macros con Excel 2007120
Comparación entre números y nombresLas matrices pueden ser demasiado útiles, sobre todo en programas más largos y
complejos. Por ejemplo, si quiere administrar datos acerca de un grupo de personas que
vienen a cenar este fin de semana, puede crear una matriz con sus nombres, como ésta:
Dim Invitado (1 To 5) As String
Esto crea cinco “cajas vacías” en la memoria de la computadora y cada caja puede contener una sola parte de texto. Sin embargo, en lugar de cinco etiquetas individuales únicas para las cinco variables, éstas comparten el nombre Invitado, y cada caja se identifica con el número de índice único de 1 a 5.
Para llenar esta matriz con los nombres de los invitados, puede asignar los nombres sólo como los asignaría a variables normales, pero debe usar el nombre de la matriz más el número de índice, de la siguiente manera:
Invitado(1) = "Luisa"Invitado(2) = "Sandra Pontevedra del trabajo"Invitado(3) = "Ricardo"Invitado(4) = "Juan"Invitado(5) = "Mamá"
Puede distinguir a una matriz de una variable regular porque las matrices siempre
tienen paréntesis después del nombre. El número de índice va entre estos paréntesis.
Ahora que ha llenado la matriz, puede manipularla de maneras que son mucho más
eficientes que usar variables ordinarias. Por ejemplo, buscando. ¿Qué pasa si queremos
saber si existe un nombre determinado en una matriz? Puede usar un bucle For...Next
para examinar la matriz:
For I = 1 To 5Imagen Invitado(I) = "Ricardo" Then Print "Se ha invitado a Ricardo."
Next I
La clave para la utilidad de las matrices es que puede buscarlas, ordenarlas, eliminarlas o agregarles elementos empleando sus números de índice para identificar cada elemento. Es mucho más fácil acceder y manipular a números de índice que a nombres de variable.
Suponga que necesita saber cuánto pagó de consumo de energía eléctrica en promedio durante el año. Podría recorrer la complicada ruta de usar un nombre de variable individual para cada mes, de la siguiente manera:
EneElect = 90FebElect = 122
121Capítulo 9 Uso de variables en macros
MarElect = 125
AbrElect = 78
MayElect = 144
JunElect = 89
JulElect = 90
AgoElect = 140
SepElect = 167
OctElect = 123
NovElect = 133
DicElect = 125
PagoElectAnual =
EneElect + FebElect + MarElect + AbrElect + MayElect + JunElect + JulElect + AgoElect
+ SepElect + OctElect + NovElect + DicElect
O sólo podría usar una matriz para simplificar el proceso:
Dim PagoElectAnual(1 To 12)PagoElectAnual(1) = 90PagoElectAnual(2) = 122PagoElectAnual(3) = 125PagoElectAnual(4) = 78PagoElectAnual(5) = 144PagoElectAnual(6) = 89PagoElectAnual(7) = 90PagoElectAnual(8) = 140PagoElectAnual(9) = 167PagoElectAnual(10) = 123PagoElectAnual(11) = 133PagoElectAnual(12) = 125
For I = 1 To 12Total = Total + PagoElectAnual(I)Next I
Al agrupar todas las variables bajo el mismo nombre de matriz, puede manipularlas por número de índice individual. Esto parece un pequeño ahorro de esfuerzo, pero recuerde que los programas de cálculo numérico pueden manipular grandes cantidades de datos, o tal vez necesiten reutilizar los mismos datos en varias partes diferentes del programa.
Así que la moraleja es que si sólo está tratando con una pequeña cantidad de datos (como el nombre y la dirección del usuario), por lo general las variables son adecuadas. Pero si está trabajando con cantidades más grandes de datos (sobre todo datos que se relacionan entre sí de la misma manera, como el monto mensual pagado por consumo de energía eléctrica), las matrices son un método más eficiente.
Macros con Excel 2007122
Creación de una matrizLa manera más simple de declarar una matriz consiste en usar el comando Dim:
Dim NombreMatriz(1 To 12)
Se dice que el comando Dim asigna una dimensión (hace un espacio para) la nueva matriz. Se le indica a la computadora cuánto espacio apartar para la nueva matriz.
Para crear espacio para 51 variables de texto que comparten el nombre Empleados y que se
identifican de manera única por números de índice que van de 1 a 100, escriba lo siguiente en un módulo:
Dim Empleados(1 To 100)
Puede visualizar esta matriz como si fuera similar a la primera columna de una hoja de cálculo de Excel: A1:A100. Cada celda puede contener un solo número o un texto, y se hace referencia a cada una de ellas con el mismo nombre (A en este caso) y también con el número de celda, que va de 1 a 100.
Reglas aplicables a las matricesHe aquí unas cuantas reglas que deben seguirse para trabajar con matrices.
Debe tratar de anticipar el número de elementos que necesitará en una matriz, pero sea generoso y agregue un poco más. Por ejemplo, si tiene 40 empleados, podría proporcionar espacio para 100, sólo en caso de que la empresa crezca. De modo que use 1 To 100 en lugar de 1 To 40 cuando declare esa matriz.
Puede asignar nombres a las matrices de la misma manera que lo haría con variables: los nombres no son sensibles a mayúsculas y minúsculas, pero debe seguir las reglas explicadas en páginas anteriores de este capítulo en la sección “Asignación de nombres a variables”.
A diferencia de las variables, las matrices no pueden declararse de manera implícita con sólo usarlas. Debe declarar formalmente cada matriz con el comando Dim (o comandos relacionados).
Hay varios tipos de matrices,
pero nos ceñiremos al más
simple en este libro. También
puede crear matrices con más de
una “dimensión”. Son similares
a una hoja de cálculo con varias
columnas o, por cierto, a un
conjunto de datos que cubren
varias hojas de cálculo. Pero
este tipo de matriz no suele
encontrarse en macros.
Puede usar rutinas If/Then/Else para
dar lógica a sus macros. El proceso de la
macro avanza en diferentes direcciones,
dependiendo de los resultados de un
comando If. Al igual que la función IF en
Excel, el comando If/Then/Else depende de una instrucción lógica con un escenario
verdadero y uno falso.
Vimos un comando If/Then/Else en el capítulo 6, donde creamos una macro
que preguntaba al usuario cuál área quería imprimir (consulte el siguiente recuadro).
He aquí una descripción en lenguaje simple de la manera como funciona la macro. Ésta
analiza la respuesta del usuario al determinar que, si ingresó 1, entonces debe imprimir
ÁreaImpresión1 y luego terminar la macro. Sin embargo, la lógica de la macro continúa con
el comando ElseIf que permite que el usuario ingrese algo diferente de 1. Si lo hace así,
la macro no termina y, en cambio, avanza al siguiente paso, que determina que si el usuario
ingresa 2, entonces debe imprimir ÁreaImpresión2 y luego terminar la macro. Por último,
si ingresa una respuesta incorrecta, es decir, algo diferente de 1 o 2, la macro contiene una
provisión para regresar a la pregunta original y dar otra oportunidad al usuario. (Observe
que el usuario también tiene derecho de cancelar la operación de la macro en cualquier
momento, al hacer clic en un botón Cancelar).
Macros con Excel 2007124
El éxito de cualquier rutina If/Then/Else proviene de la anticipación de todas las respuestas posibles y de proporcionar comandos para tratar con cada condición posible.
La rutina If/Then/ElseCuando ingresa una instrucción If en su macro, el If precede a una instrucción lógica. Depende de Visual Basic determinar si esta instrucción es verdadera o falsa. A la instrucción que sigue al If se le llama expresión condicional. La condición de esta instrucción puede ser verdadera o falsa. Si la instrucción es verdadera, la macro hace lo que
se le indica en la instrucción Then.Si sólo quiere que ocurra una acción cuando
la instrucción es verdadera, entonces su macro se termina cuando tiene una instrucción If y una Then.
Cree una macro If/Then simplePor ejemplo, digamos que tiene una hoja de cálculo que contiene números que representan las cifras de ventas anuales. Si exceden 100 000, entonces querrá
La instrucción Else en la rutina
If/Then/Else no es un
comando obligatorio en esta
estructura If/Then. Puede
crear rutinas If/Then que no
incluyan una dirección alterna
proporcionada por la instrucción
Else.
Sub ImpresiónEspecial()Pregunta:Informe = InputBox("Ingrese 1 para imprimir Informe 1; ingrese 2 para imprimir Informe 2")If Informe = 1 Then
GoTo Impresión1ElseIf Informe = 2 Then
GoTo Impresión2Else
GoTo PreguntaEnd IfImpresión1:
Application.Goto Reference:="ÁreaImpresión1"ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)"End
Impresión2:Application.Goto Reference:="ÁreaImpresión2"ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,1,,,TRUE,,FALSE)"End
End Sub
125Capítulo 10 Creación de rutinas If/Then/Else
que la macro calcule una bonificación al colocar una cifra en la celda de la derecha que sea igual a la cifra original multiplicada por 2%.
Antes de que pase a la programación en esta pequeña macro, piense en todos los pasos del proceso. He aquí todo lo que la macro necesita hacer:
Examinar el número en la celda actual y determinar si es mayor de 100 000.
Si el número es mayor de 100 000, mover el puntero una celda a la derecha.
Ingresar un cálculo en la nueva celda que multiplique el número en la celda original
por 2%.
Parte de esta macro puede grabarse para que pueda recolectar el código. Puede grabarse a sí mismo moviendo el puntero una celda a la derecha y grabar la creación de la fórmula. Lo único que no puede grabar es la instrucción If/Then.
La grabación del movimiento del puntero y la fórmula agrega este código de macro:
ActiveCell.Offset(0, 1).Range("A1").SelectActiveCell.FormulaR1C1 = "=RC[-1]*0.02"ActiveCell.Offset(1, 0).Range("A1").Select
La primera línea de código refleja el movimiento del puntero sobre la celda original a la
celda de la derecha: Offset(0,1) muestra el movimiento de 0 filas y 1 columna adelante
(o la derecha).
La segunda línea de código proporciona la
fórmula: no hay movimiento de fila, pero se regresa
una columna y se multiplica por 0.02.
La tercera línea del código mueve al puntero una
celda hacia abajo, circunstancia que ocurre de manera
natural cuando oprime ENTER. Offset(1,0) alude
a un avance de 1 fila y 0 columnas. Si, en cambio,
quiere que el puntero se mueva a la siguiente celda
de la columna de números existentes (en anticipación
de aplicar esta macro al número siguiente), entonces
debe cambiar el desplazamiento a (1,–1).
Ahora todo lo que necesita para que esta macro
tome la decisión lógica es la instrucción If que
pregunta si la celda original contiene un número
mayor de 100000.
If ActiveCell.Value > 100000 Then
Debido a que queremos usar
esta macro en varias celdas
diferentes, asegúrese de habilitar
la característica Usar referencias
relativas antes de habilitar la
grabadora de macros.
Las referencias a celda en
macros se retratan siempre en
este orden: fila y columna. Por
tanto, un desplazamiento de (1,
–1) alude a una fila adelante o
abajo y una columna atrás, o a la
izquierda.
Macros con Excel 2007126
La línea de código anterior pregunta si el valor de la celda activa es mayor que 100 000. Si la respuesta es verdadera, entonces se ejecuta la siguiente línea del código VBA. Si la respuesta es falsa, no sucede nada.
Observe un tema final: en cualquier momento en que use la instrucción If/Then, debe concluir la sección con una instrucción End If.
Por tanto, este código de macro final tiene este aspecto:
Sub Bono()'' Macro para calcular bonificaciones.'
If ActiveCell.Value > 100000 ThenActiveCell.Offset(0, 1).Range("A1").SelectActiveCell.FormulaR1C1 = "=RC[-1]*0.02"ActiveCell.Offset(1, -1).Range("A1").SelectEnd If
End Sub
Para ejecutar esta macro, coloque su puntero en una celda que contenga un número que desea analizar. Haga clic en el botón Macros para encontrar su macro en la lista, haga clic en la macro y luego en Ejecutar. Si el número que elige es mayor que 100 000, su secuencia Then se activa y el cálculo aparece en la celda a la derecha del número original. El puntero regresa a la celda debajo del número original (véase la figura 10-1).
Agregue una operación Else para una respuesta falsaHasta ahora hemos creado una macro que analiza una situación, y si ésta es verdadera, se
ejecuta un comando. Si la situación no es verdadera, la macro termina. Pero no tenemos
que detenernos aquí. Podemos llamar a la macro para que realice algunas otras tareas si
la respuesta a la pregunta inicial es falsa. En la macro Bono que ya creamos, la macro no
hace nada si la cifra es menor de 100 000. En cambio, podemos hacer que la macro siga a la
columna de la bonificación e ingrese un 0.Puede grabarse realizando esta tarea, si gusta, pero si revisa el código de macro que
ya existe, debe ser un paso muy simple agregar la cláusula Else sin grabar la macro. Queremos que nuestra cláusula Else haga la operación de mover una celda a la derecha (ya tenemos ese código en el lugar) y luego ingrese cero. Este código debe hacer el truco:
Figura 10-1 La hoja de cálculo después
de que la macro se ha ejecutado
127Capítulo 10 Creación de rutinas If/Then/Else
ActiveCell.FormulaR1C1 = "0"
Entonces también necesita otra línea de código que proporcione las instrucciones para indicar dónde debe terminar el puntero, al igual que en la parte Then de la macro:
ActiveCell.Offset(1, -1).Range("A1").Select
Y así, la macro completa, con instrucciones sobre cómo comportarse si la instrucción es verdadera y si es falsa, tiene este aspecto:
Sub Bono()' Macro para calcular bonificaciones.
If ActiveCell.Value > 100000 ThenActiveCell.Offset(0, 1).Range("A1").SelectActiveCell.FormulaR1C1 = "=RC[-1]*0.02"ActiveCell.Offset(1, -1).Range("A1").Select
ElseActiveCell.Offset(0, 1).Range("A1").SelectActiveCell.FormulaR1C1 = "0"ActiveCell.Offset(1, -1).Range("A1").Select
End IfEnd Sub
Agregue una operación ElseIfAsí que hemos visto cómo crear una macro que contenga una instrucción If/Then/Else, y que maneje la situación cuando sólo hay una respuesta correcta y una incorrecta. Ahora ahondaremos en un nivel, y agregaremos una segunda instrucción If, conocida como ElseIf, de modo que si la macro devuelve una respuesta falsa a la primera instrucción If, hay otra oportunidad de que ocurra una instrucción verdadera.
Esta vez agregaremos un nivel a la macro que se utiliza después de que se ejecuta la primera instrucción If y produce una respuesta falsa. En lugar de suponer de inmediato que no hay una bonificación para calcular, y colocar un cero en la celda de la bonificación, aplicaremos un segundo criterio: la capacidad de calcular una bonificación si la cifra de ventas excede 75 000. Esta vez el cálculo será de 1% en lugar de 2%. Así que el cálculo completo de la bonificación es de 2% si las ventas exceden 100 000 y 1% si las ventas están en el rango de 75 000 a 100 000.
Es probable que pueda entender esta nueva parte del código sin grabar ningún paso. Como recordatorio, he aquí el código que calcula la primera bonificación:
If ActiveCell.Value > 100000 ThenActiveCell.Offset(0, 1).Range("A1").SelectActiveCell.FormulaR1C1 = "=RC[-1]*0.02"ActiveCell.Offset(1, -1).Range("A1").Select
Macros con Excel 2007128
Ahora, he aquí todo lo que tiene que hacer para agregar una capa ElseIf que pregunta si ActiveCell.Value excede 75 000 y aplica una bonificación de 1%:
ElseIf ActiveCell.Value > 75000 ThenActiveCell.Offset(0, 1).Range("A1").SelectActiveCell.FormulaR1C1 = "=RC[-1]*0.01"ActiveCell.Offset(1, -1).Range("A1").Select
El formato ElseIf funciona de la misma manera que el código If: debe acompañar la instrucción ElseIf con una Then. Esta parte de nuevo código debe insertarse en la macro. El producto terminado aparece en la figura 10-2. Los resultados aparecen en la figura 10-3.
Cree una macro If/Then/Else de varios nivelesDe regreso al capítulo 6, aprendió a crear una macro empleando el comando Case para ofrecer al usuario una selección de varios criterios diferentes. Creamos una macro que calculó los impuestos de una empresa de Estados Unidos. Podemos realizar una operación similar, empleando el formato If/Then/Else. Debido a que soy una contadora fiscal, quiero volver a los ejemplos fiscales para mis macros. Esta vez crearemos una macro llamada ImpuestoPersonal que calcula el impuesto sobre la renta de individuos estadounidenses, empleando el estilo de la macro If/Then/Else. De esta manera verá cómo anidar varias capas de condiciones If dentro de una sola macro.
He aquí una gráfica que muestra las tasas de impuesto sobre la renta de Estados Unidos para un solo individuo.
Figura 10-2 La macro If/Then/Else terminada
Figura 10-3 Los resultados de la
bonificación basada en los cálculos de la
macro Bono
129Capítulo 10 Creación de rutinas If/Then/Else
10% sobre los ingresos entre $0 y $8 025
15% sobre los ingresos entre $8 025 y $32 550, más $802.50
25% sobre los ingresos entre $32 550 y $78 850, más $4 481.25
28% sobre los ingresos entre $78 850 y $164 550, más $16 056.25
33% sobre los ingresos entre $164 550 y $357 700, más $40 052.25
35% sobre los ingresos entre $357 700, más $103 791.75
Una macro debe examinar un monto de ingresos, establecer el rango en que cae el monto de ingresos, y luego calcula la tasa impositiva apropiada y coloca esa cantidad en una celda.
Es más fácil empezar este cálculo en la parte superior, la tasa fiscal de 35%, porque entonces puede preguntar si el ingreso se encuentra sobre cierta cantidad, mientras que si quiere empezar en la parte inferior tiene que determinar si los ingresos se encuentran dentro de cierto rango. Puede estructurar
la macro de cualquier manera, pero empezar en la parte superior da como resultado menos teclazos.
Podemos seguir el ejemplo establecido en la macro anterior y hacer que la macro examine el contenido de una celda. En cambio, usaremos las técnicas aprendidas en el capítulo 7 y utilizaremos un InputBox. De esta manera, preguntaremos al usuario de la hoja de cálculo que escriba los ingresos que habrán de analizarse, y luego realizar la tarea sobre el monto ingresado en el cuadro.
La primera parte del código establece el cuadro de entrada:
IngresosGravables = InputBox("Ingrese sus impuestos gravables")If IngresosGravables > 357700 Then
ActiveCell.Value = 103791.75 + (IngresosGravables - 357700) * 0.35ElseIf IngresosGravables > 164550 Then
ActiveCell.Value = 40052.25 + (IngresosGravables - 164550) * 0.33ElseIf IngresosGravables > 78850 Then
ActiveCell.Value = 16056.25 + (IngresosGravables - 78850) * 0.28ElseIf IngresosGravables > 32550 Then
ActiveCell.Value = 4481.25 + (IngresosGravables - 32550) * 0.25ElseIf IngresosGravables > 8025 Then
ActiveCell.Value = 802.50 + (IngresosGravables - 8025) * 0.15ElseIf IngresosGravables > 0 Then
ActiveCell.Value = IngresosGravables * 0.10End If
En el capítulo 11 aprenderá
acerca de la creación de bucles
For/Next y podrá aplicar esa
habilidad a macros como ésta
If/Then/Else para que no
tenga que llamar a la macro
en cada celda (la macro puede
recorrer toda la lista de cifras de
ventas con un comando).
Macros con Excel 2007130
Esta macro se colocó entre las líneas Sub ImpuestosPersonales() y End Sub, y obtiene una macro completa. Pruebe la macro al abrir una hoja de cálculo y ejecutar la macro ImpuestosPersonales. Aparece un cuadro de diálogo como el de la figura 10-4, pidiéndole que escriba sus ingresos gravables.
Cuando ingrese la cantidad de ingresos y haga clic en Aceptar, el cálculo correcto de la tasa del impuesto aparece en la celda activa.
Cree una macro anidada If/ThenEn ocasiones una pregunta no es información suficiente para obtener los resultados que necesite. Puede crear una macro que le plantee más de una pregunta If, y produce diferentes capas de acciones con base en las respuestas.
Por ejemplo, digamos que queremos confirmar que los ingresos gravables usados en la macro anterior son realmente de 2008, para que se apliquen las tasas correctas. En lugar de proporcionar sólo un cuadro de entrada que le pregunte sus ingresos, podemos primero preguntar los ingresos y luego pedir confirmación de que se trata de los ingresos de 2008. Si la respuesta es Sí, la operación de la macro continúa y los impuestos se calculan. Si la respuesta es No, la ejecución de la macro se detiene y aparece un mensaje indicando al usuario que no están disponibles las tasas de impuestos para años distintos.
La primera línea de la macro permanece intacta (el comando InputBox le pregunta al usuario los ingresos gravables de 2008).
A continuación necesitamos una nueva instrucción If, preguntando si se trata realmente de los ingresos gravables de 2008. El siguiente código da como resultado el mensaje mostrado en la figura 10-5:
x = MsgBox("¿Se trata de ingresos gravables de 2008?", 3)If x = 6 Then
A continuación debe insertar todo el código de la macro ImpuestosPersonales. Es adecuado añadir sangría a este código para que pueda llevar registro de sus instrucciones If y la instrucción End If relacionada. Por último, necesita proporcionar
la posibilidad de que el usuario no ingrese
Figura 10-4 La macro
ImpuestosPersonales usa un cuadro
de entrada para solicitar un monto de
ingresos gravables
Los códigos de cuadro de mensaje
(3 para un cuadro Sí/No, y 6
para la respuesta Sí) pueden
encontrarse en el capítulo 7.
Figura 10-5 La macro revisada le pide al
usuario que confirme que introdujo los
ingresos gravables de 2008
131Capítulo 10 Creación de rutinas If/Then/Else
una respuesta Sí en el cuadro de mensaje. Nos
ocuparemos de esta contingencia al proporcionar
un cuadro de mensaje adicional que advierta al
usuario que el impuesto no puede calcularse, como se muestra en la figura 10-6. Si el usuario hace clic en Aceptar (la única opción), el cuadro desaparece y termina la operación de la macro.
ElseMsgBox ("No se pueden calcular sus impuestos sobre la renta")End If
La macro completa (llamada ImpuestosPersonales2 para distinguirla de su predecesora) se muestra en la figura 10-7.
Figura 10-6 Este mensaje aparece si el
usuario indica que no se introdujeron los
ingresos de 2008
Figura 10-7 Código completo de la macro ImpuestosPersonales2
Cuando tiene gran cantidad de datos que
necesita procesar, a menudo le indica al
equipo que haga algo una y otra vez. En
programación, a este funcionamiento
repetitivo se le llama bucle. En la vida real se le
llama trabajo.
Los bucles son útiles en muchas
situaciones diferentes. Buscar entre 5 082
facturas las que están vencidas requiere bucles. Poner dirección a 400 sobres también. En
realidad, a los equipos suelen llamársele procesadores de datos, y los bucles son una parte
importante del procesamiento.
Uno de los comandos más útiles en VBA es For. Indica el inicio de una estructura
de bucle de uso común. VBA realiza de manera repetida la instrucción entre el For y el
comando que la acompaña, Next.
El número de veces que el equipo recorrerá el bucle se especifica con dos números que
se encuentran después de For. He aquí un ejemplo. Vea si puede adivinar el valor de la
variable X después de que termina la ejecución de este bucle:
Sub ExplorarBucleFor I = 1 To 12
X = X + 2Next IMsgBox X
End Sub
Macros con Excel 2007134
Un bucle tiene una variable contadora de bucles, y en un bucle For...Next esta variable suele llamarse I. Nadie está muy seguro si la I es de iteración o de incremento. Pero la idea es que cada vez que se ejecuta el bucle, el valor de I aumenta automáticamente. De igual manera, también es atractiva la idea de que un bucle itera (se repite).
En cualquier caso, la primera línea de este bucle se traduce así: cada vez que se ejecuta este bucle, se eleva el valor de la variable I en 1. Cuando I finalmente llega a 12, el bucle está completo y se detiene (la ejecución continúa con el código después de Next I). En este ejemplo, la ejecución continúa desplegando el cuadro de mensaje.
En otras palabras, el bucle se recorre 12 veces; luego se detiene y se despliega el cuadro de mensaje.
Así, cuando se ejecuta este código, recorre 12 veces el código dentro del bucle. En realidad, se suma 2 al contenido de X cada vez que el bucle se ejecuta. X inicia con 0, pero la primera vez que se recorre el bucle X contiene 2, y la siguiente vez contiene 4, luego 6, etc.
La variable X aumenta 12 veces (1 To 12), y cada vez se suma 2. De modo que cuando se ejecuta esta pequeña macro, el cuadro de mensaje despliega 24 como valor final de X.
Cuando ejecuta la macro con el cuadro de mensaje dentro del bucle, tiene que hacer clic en el botón Aceptar 12 veces. Sin embargo, hay una manera de salir antes de un bucle: oprima CTRL+INTERRUMPIR. Esto lo pone en el modo de interrupción. Se despliega un cuadro de mensaje especial, dándole tres opciones:
Continuar Reanuda la ejecución.
Terminar Sale de la macro.
Depurar Permanece en el modo de interrupción, donde puede usar herramientas de depuración como paso a paso a través del código, o la ventana Inmediato para revisar el valor de las variables. Por ejemplo, haga clic en el botón Depurar, en el cuadro de mensaje del modo de interrupción. Ahora oprima CTRL+G para desplegar la ventana Inmediato. Escriba ?X en la ventana Inmediato y oprima ENTER. Esta macro despliega el valor actual de la variable X. El valor se despliega en
la ventana Inmediato. Elija Ejecutar | Restablecer para detener la ejecución (dejando el modo de interrupción y regresando al modo de escritura de código normal en el editor).
En cuanto a la ventana Inmediato, tiene otro uso especial cuando está escribiendo código que incluye bucles u otros funcionamientos repetitivos: el despliegue de resultados. En todo este libro, incluido este capítulo, ha visto cómo usar el comando MsgBox para ayudar a probar código de macros al mostrarle resultados. Pero como se ilustró en el segundo ejemplo de código, puede ser tedioso tener que hacer clic de manera repetitiva en el botón Aceptar para que el código avance cada vez que se despliega un cuadro de mensaje dentro de un bucle. La solución es imprimir resultados repetitivos en la ventana Inmediato en lugar de hacerlo en un cuadro de mensaje. Pruebe la ejecución de esta macro y vea los resultados en la ventana Inmediato:
135Capítulo 11 Exploración de bucles
Sub ExplorarBucle()
For I = 1 To 12X = X + 2MsgBox X
Next I End Sub
Tres tipos de bucles For...NextPuede especificar el número preciso de bucles que se hará antes de pasar la estructura For...Next (como hicimos en los ejemplos de código anteriores de este capítulo):
For I = 1 to 20
El segundo tipo de bucle For...Next emplea una variable (o expresión) para especificar el número de bucles. Tal vez quiera permitir que el usuario decida cuántas copias de un documento deben imprimirse. Se despliega un cuadro de entrada con el
indicador “¿Cuántas copias?” y después el usuario escribe el número, y se recorre el bucle el número de veces que especifica la variable:
Sub ExplorarBucle1()NúmeroDeCopias = InputBox("¿Cuántas copias?")
For I = 1 To NúmeroDeCopiasDebug.Print I;
Next I
End Sub
Sub ExplorarBucle()
For I = 1 To 12X = X + 2Debug.Print X
Next IEnd Sub
Si lo desea, puede dejar la ventana Inmediato abierta todo el tiempo mientras se prueba el código. La ventana Inmediato se comporta de manera muy parecida al Bloc de notas. Por ejemplo, para limpiar la ventana Inmediato, sólo oprima CTRL+A para seleccionar todo el contenido y luego oprima SUPR para eliminarlo.
Observe que si agrega un
punto y coma al final de la línea
Debug.Print, los resultados
se imprimen horizontalmente
dentro de la ventana Inmediato,
en lugar de usar una línea
separada para cada resultado.
Además, si tiene dudas acerca
del comando Debug.Print en
general, consulte el resumen
en páginas anteriores de este
capítulo.
Macros con Excel 2007136
Salto de pasos en un bucleLa tercera variación del bucle For...Next incluye la omisión de pasos. Hay un comando opcional que funciona con For...Next llamado Step. Step puede adjuntarse al final de la línea For para que VBA salte iteraciones de bucle, para omitir algún paso. Step altera la manera en que cuenta el bucle.
Como ha visto, un bucle suele contar de uno en uno:
For I = 1 to 12Debug.Print I;
Next I
El resultado es 1 2 3 4 5 6 7 8 9 10 11 12Sin embargo, cuando usa el comando Step, puede especificar que el bucle cuente cada
cierto número (empleando, por ejemplo, Step 2):
For I = 1 to 12 Step 2Debug.Print I;
Next I
El resultado es 1 3 5 7 9 11O podría recorrerlo cada 15 veces (Step 15):
For I = 15 to 90 Step 15Debug.Print I;
Next I
El resultado sería 15 30 45 60 75 90
Anidamiento de buclesLos bucles For...Next también pueden anidarse,
uno dentro de otro. Al principio esta estructura
parece confusa, y con frecuencia lo es. Pero sólo
haga lo que la mayoría de los programadores hacen
cuando están perplejos: hackear. El término hackeo
tiene varios significados en computación, y uno es
probar varios métodos para ver cuál funciona. Con bucles anidados, puede probar varios
números para las variables de conteo, y mover comandos “dentro” y “fuera” del bucle para
al final comprender cómo llegar a los resultados que desea.
Los bucles anidados pueden resultar confusos porque agregan una nueva dimensión
cuando usa un bucle interior. Éste interactúa con el bucle exterior de una manera que
sólo queda inmediatamente clara para el matemático experimentado. En esencia, el
Variaciones adicionales con el uso
del comando Step incluyen el
conteo hacia atrás empleando un
paso negativo (For I = 10 To 1 Step -1), o incluso el conteo
con fracciones (Step .25).
137Capítulo 11 Exploración de bucles
bucle interno se repite el número de veces especificado por su propia variable de conteo, multiplicado por la variable de conteo del bucle externo.
En esta situación, simplemente siga hackeando hasta que todo funcione de manera adecuada. Hackeo para un programador significa precisamente lo mismo que modelar para un escultor: ir quitando partes hasta que surge la forma deseada. Observe que en el siguiente ejemplo usamos un comando Debug.Print simple (sin variable) en el bucle externo. Esto tiene el efecto de avanzar una línea hacia abajo en la ventana Inmediato. Así se facilita la visualización de la actividad en los dos bucles:
For I = 1 To 5For J = 1 To 10
Debug.Print I;Next J
Debug.PrintNext I
Da como resultado:
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5
Observe que puede iniciar la variable de cuenta del bucle en cualquier lugar; no es necesario que inicie el contador con 1. Y el tamaño de Step puede ser lo que desee, incluidos números negativos si desea contar hacia abajo en lugar de hacerlo hacia arriba.
For I = 10 To 1 Step - 2Debug.Print I;
Next I
Da como resultado: 10 8 6 4 2
Puede usarse cualquier expresión numérica con For...Next. (Consulte el capítulo 9 para conocer una definición de expresión.) Sin embargo, debe ser posible el rango que está contando. El siguiente rango no es posible:
For I = -10 To -20 Step 2Debug.Print "bucle"; I
Next
Observe que puede agregar
palabras al comando Debug.Print. Esto puede ser útil como
una manera de identificar la
variable que está imprimiendo,
como esta:
Debug.Print “i = "; i
Macros con Excel 2007138
Este bucle no hace nada cuando lo ejecuta. No puede. Está pidiendo que cuente hacia abajo, pero su comando Step es positivo. Como cualquier entidad inteligente haría cuando se confronta con una solicitud sin sentido, VBA no hace nada con las instrucciones. Lo ignora. Para que éste sea un verdadero bucle, tiene que hacer negativo Step con –2:
For I = -10 To -20 Step -2Debug.Print "bucle"; I
Next
Cómo evitar el temible bucle sin finHe aquí algunas notas adicionales acerca de los bucles.
Las estructuras de bucle For...Next pueden ser tan grandes como lo desee: pueden contener todas las líneas de código entre el For y el Next que desee. Por otra parte, puede poner toda una pequeña estructura For...Next en una sola línea, si lo desea, al separar las “líneas de código” usando dos puntos:
For J = 1 To 5: Debug.Print J: Next J
Y esa J final es opcional, pero si la omite hará que su programa sea ligeramente menos fácil de comprender. Con el siguiente ejemplo se ilustra cómo puede quitar el nombre de la variable. Esta práctica no está respaldada por algunos maestros de programación (aunque se encuentra con frecuencia en programación real):
For J = 1 To 5: Debug.Print J: Next
Ahora llegamos al famoso bucle sin fin. También conocido como bucle interminable, no hay manera de detener esta estructura. No ha proporcionado salida, ni condición que permita que el bucle termine. He aquí un ejemplo:
Sub BucleSinFin()For J = 1 To 5J = 3Next JEnd Sub
Cuando ejecute esto, la única manera de detenerlo consiste en oprimir CTRL+INTERRUMPIR si lo está ejecutando en el editor de VB, u oprimir INTERRUMPIR, si lo está lanzando desde el interior de Excel como un macro.
Tal vez vea el problema aquí. La computadora está tratando de terminar un trabajo interminable.
Es una práctica común indentar
(añadir sangrías) a los comandos
entre For...Next, If...Then
y otras estructuras (Do...Loop, With, Select Case, etcétera).
Esta sangría hace que el código
sea más fácil de leer al indicar
que los elementos con sangría
son subordinados, que están
controlados por una estructura
que los rodea de alguna manera.
139Capítulo 11 Exploración de bucles
Cada vez que recorre el bucle, restablece la variable de cuenta J a 3, de modo que J
nunca llega a 5 y, por tanto, sigue ejecutando el código debajo de la estructura (en este
caso, el End Sub).
Si usa Step 0, también creará un bucle que nunca termina. En efecto, un bucle sin fin
causa que la computadora vaya a un estado de suspensión animada.
Hay varias situaciones en que sí quiere un bucle interminable, como los que repiten de
manera continua las demostraciones de producto que ve en tiendas. Pero estas situaciones
son raras. Los bucles sin fin suelen ser un error que necesita corregir. Los bucles sin fin
son aún más comunes en otras estructuras de bucle, como Do...Loop, que exploraremos
a continuación.
Do...Loop: repita hasta que se cumpla una condiciónUna opción a For...Next es Do...Loop. Este tipo de bucle no usa un contador
específico. En cambio, contiene una condición que especifica cuándo se supone que
debe terminar el bucle. Aunque For...Next es la estructura de bucle más común en
programación, Do...Loop es la estructura más flexible.
La razón para que For...Next se use con tanta frecuencia es que cuando está
escribiendo su programa, con frecuencia sabrá cuántas veces quiere que se haga algo. Así
que puede proporcionar la variable de cuenta con su condición de salida.
Como generalización, cuando quiera que algo se haga de manera repetida pero no sabe
el número de veces que se repetirá, use un bucle Do...Loop en lugar de For...Next.
For...Next es adecuado cuando sabe el número de veces que algo debe hacerse.
Do...Loop es adecuado cuando conoce una condición que debe satisfacerse en lugar del
número preciso de veces que debe realizarse una tarea.He aquí un ejemplo:
For...Next significa “Cepilla tu cabeza 150 veces”.
Do...Loop significa “Cepilla tu cabeza hasta que brille”.
La flexibilidad de las estructuras Do...Loop proviene de las diversas maneras que puede configurar pruebas internas que llevan a la salida del bucle. He aquí un ejemplo simple:
Do While x < 14x = x +2Debug.Print x
Loop
Macros con Excel 2007140
El resultado es: 2 4 6 8 10 12 14
Es muy fácil leer este código. Significa que recorra este bucle siempre y cuando el valor de la variable X sea menor de 14. Una vez que se cumple la condición, se sale del bucle y se continúa con cualquier código que se encuentre después del bucle.
Las cuatro variedades de Do...LoopDo...Loop viene en cuatro variedades. La primera se ilustra con el siguiente ejemplo de código:
Do While x < 66Loop
La segunda usa un comando Until como este:
Do Until x < 66Loop
La diferencia entre las versiones de Until y de While es que la primera sólo se recorre mientras la condición sea falsa. En otras palabras, recorre el bucle hasta que x sea menor que 66. (En oposición a que lo haga hasta que la condición siga siendo verdadera: se recorre el bucle mientras x sea menor que 66.)
En realidad, estas dos variaciones son casi intercambiables. Es sólo cosa de saber cómo expresar las cosas, como la diferencia entre “Barre hasta que el patio esté limpio” en comparación con “Barre mientras el patio esté sucio”. La computadora no se preocupa mucho acerca de esas cosas. Sin embargo, expresar la condición de una manera determinada en ocasiones puede hacer que su significado sea más claro para usted y otros seres humanos que leen su programa.
Desplazamiento de la condición de salida al final de la estructura del bucleLa tercera y cuarta variaciones de Do...Loop prueban la condición al final en lugar del principio del bucle. Esto asegura que el bucle siempre se ejecute por lo menos una vez.
Si coloca la condición de prueba al principio del bucle y la prueba falla, el bucle nunca se ejecutará aunque sea una sola vez. VBA omitirá por completo los comandos dentro del bucle.
Por tanto, si quiere que un bucle siempre se ejecute por lo menos una vez, coloque la prueba de la condición al final del bucle, como se muestra en seguida:
DoY = Y + 1Debug.Print Y
Loop Until Y >= 0
141Capítulo 11 Exploración de bucles
Da como resultado: 1
Pero regrese la prueba Y >= 0 a la parte superior del bucle y no se imprimirá nada. No sucede nada porque este bucle ni siquiera se ejecuta una vez. Y no es mayor o igual que cero al principio de esta estructura de bucle. Así que el bucle de inmediato sale de sí mismo sin realizar ninguna de las instrucciones dentro del bucle, incluida Debug.Print:
Do Until Y >= 0Y = Y + 1Debug.Print Y
Loop
El resultado es nulo.
While...Wend, un Do...Loop menos poderosoOtra variación en la estructuras de bucle es While...Wend. Esta estructura simplemente
sigue recorriendo el bucle mientras una condición siga siendo verdadera. Para que se
ejecute siempre y cuando X sea menor que 24, escribiría:
While X < 24: X = X +1: Debug.Print X: Wend
While...Wend no tiene comando de salida. Puede pasar estructuras For...Next
o Do...Loop empleando comandos Exit For o Exit Do. Pero While...Wend no
tiene esos comandos de salida forzada.
Además, While...Wend está limitado a probar la condición al principio de la
estructura del bucle.
Administración de colecciones de objetos con bucles For Each...NextEl propio VBA administra la condición de salida en un tipo especial de estructura de bucle llamada For Each...Next. Puede usar For Each...Next con una matriz, porque VBA sabe el tamaño de la matriz, de modo que sabe cuándo salir del bucle.
En otras palabras, con la estructura For Each...Next no usa una variable de cuenta, o una condición específica de salida, como lo hace con las estructuras For...Next y Do...Loop.
He aquí un ejemplo:
Sub PruebaForEach()Dim MisNombres(1 To 6)
Macros con Excel 2007142
For I = 1 To 6MisNombres(I) = "Nombre" & I
Next I
For Each Cosa In MisNombresDebug.Print Cosa
Next
End Sub
El resultado es Nombre1 Nombre2 Nombre3 Nombre4 Nombre5 Nombre6
En este código, primero declara una matriz llamada MisNombres. Especifica que esta matriz contiene seis elementos. Luego usa un bucle tradicional For...Next para almacenar seis cadenas (Nombre1, Nombre2, etcétera) en esta matriz.
Pero cuando pasa a imprimir el contenido de esta matriz, usa la estructura For...Next para iterar en ella. Cuando VBA alcanza el límite superior de la matriz (índice del elemento 6), automáticamente sale del bucle For...Each. Observe que usé una variable llamada Cosa, pero puede usar cualquier nombre que quiera en el bucle For...Each. Sin embargo, la variable debe ser del tipo de variante u objeto (si no especifica un tipo de variable, VBA lo hace automáticamente variante, como en el ejemplo anterior).For...Each suele usarse con colecciones (un conjunto de objetos). Puede crear sus
propias colecciones, como ésta:
Sub HacerColección()
Dim MisNombres As New CollectionFor I = 1 To 20
MisNombres.Add "Nombre" & INext I
For Each Cosa In MisNombresDebug.Print Cosa
NextEnd Sub
Puede usar el método Add para llenar una colección con datos, y luego usar For...Each para iterar en la colección. Hay colecciones integradas, como Sheets que contiene todas las hojas de cálculo (y gráficas) del libro activo (o seleccionado). He aquí un ejemplo que emplea el método UsedRange para desplegar todos los datos en una hoja de cálculo:
Sub VerColección()Dim r As RangeFor Each r In ActiveSheet.UsedRange
Debug.Print r.ValueNext
End Sub
143Capítulo 11 Exploración de bucles
Aquí crea una variable del tipo Range y luego la usa para acceder a cada celda del “rango
usado” en la hoja activa (las celdas contenidas dentro del rectángulo imaginario dibujado
alrededor de las celdas que contienen datos reales). Pruebe este código. Verá cómo esta
técnica puede ser una manera muy rápida de buscar en una hoja de cálculo (para modificar
celdas que cumplen un criterio determinado, o encontrar, por ejemplo, cualquier celda que
contenga 33):
For Each r In ActiveSheet.UsedRangeIf r = 33 Then
Debug.Print r.ValueEnd If
Next
En el siguiente ejemplo se ilustra cómo usar la propiedad de dirección del objeto de rango para identificar cuáles celdas contienen el valor 33.
Sub VerColección()Dim r As RangeFor Each r In ActiveSheet.UsedRange
If r = 33 Then Debug.Print r.Address & ": ";Debug.Print r.ValueDebug.Print 'mover una línea hacia abajo en la ventana Inmediato
End IfNext
End Sub
Excel, como otras aplicaciones de Office, contiene muchas colecciones integradas que puede emplear en su programación. Para ver los diversos objetos y colecciones de Excel, siga estos pasos:
1. De la ventana principal de Excel, oprima ALT+F11 para ir al editor de VB.
2. En el editor, elija Ayuda | Ayuda de Microsoft Visual Basic | MSDN en la Web.
Verá una página Web con un campo de Live Search.
3. Escriba Mapa del modelo de objetos de Excel 2007 en el campo de búsqueda.
Aparece una lista de vínculos.
4. En la lista de vínculos, haga clic en Referencia del modelo de objetos de Excel (o mapa del modelo de objetos de Excel 2007).
5. Tal vez sea necesario hacer clic en un vínculo adicional: Mapa del modelo de objetos de Excel.
En cualquier caso, lo que está buscando puede encontrarse al pegar esta dirección en su explorador de Internet:
http://msdn2.microsoft.com/en-us/library/bb332345.aspx
Macros con Excel 2007144
Ahora podrá examinar el modelo de objetos, como se muestra en la figura 11-1. Los objetos se muestran en azul, las colecciones en amarillo.
Puede hacer clic en cualquiera de los objetos o colecciones desplegados en el mapa del modelo de objetos para abrir una
pantalla de Ayuda que describe la manera de usar ese objeto o colección. En realidad, con frecuencia encontrará buenos ejemplos de código que puede copiar y pegar en su editor de VB para explorar o modificar y usarlas en sus propias macros.
Figura 11-1 Excel tiene docenas de colecciones integradas que pueden manipularse, como se muestra en este
mapa del modelo de objetos
Puede ejecutar macros de varias maneras:
Crear un método abreviado de teclado como ALT+F.
Agregar un botón a la barra de herramientas Acceso rápido.
Oprimir ALT+F8 para desplegar el cuadro de diálogo Macros.
Oprimir F5 mientras se encuentra en el editor de VB (después de hacer clic dentro de la
macro para colocar el cursor de inserción parpadeante en la macro).
Colocar un control, como un botón, en una hoja de cálculo con el que pueda interactuar
un usuario.
Es este último método el que exploraremos en este capítulo. Verá cómo agregar controles
a su hoja de cálculo para facilitar a las personas la ejecución de sus macros. Hacer clic en
un botón u otro control que esté allí, sobre la hoja de cálculo, tiene que ser la manera más
rápida e intuitiva de ejecutar código.
Recordará, de la sección “Creación de cuadros de diálogo personalizados”, en el capítulo
7, que puede crear un cuadro de diálogo personalizado al agregar controles del Cuadro de
herramientas en el editor de VB. Luego puede escribir algún código en un manejador de
eventos, como Click. Este método es muy similar a escribir una macro, excepto que el
código del manejador de eventos se ejecuta cuando el usuario hace clic en el control.
Macros con Excel 2007146
Puede poner controles en hojas de cálculo, y escribir código para que las cosas pasen cuando el usuario hace clic (o interactúa de otra manera) con los controles. Veamos cómo se hace.
Uso de botones para ejecutar códigoEn este ejemplo, supondremos que con frecuencia hace acercamientos para ver celdas seleccionadas, y luego regresa a la vista normal. De modo que, en lugar de hacer zoom usando las fichas, la barra deslizable de acercamiento en la parte inferior de la
ventana de la hoja de cálculo, o hace clic en íconos, trata de poner un par de botones en su hoja de cálculo. Hace clic en uno para realizar el acercamiento; hace clic en el otro para regresar a la vista normal.
Adición de botones a una hoja de cálculoPara agregar un botón a una hoja de cálculo, siga estos pasos:
Haga clic en la ficha Programador de la cinta de opciones.1.
Haga clic en el ícono Insertar para desplegar los controles disponibles, como se 2. muestra en las figuras 12-1 y 12-2.
Haga clic en el ícono Botón de comando (control ActiveX), como se muestra en la 3. figura 12-2.
Si lo prefiere, puede hacer clic
para colocar el botón, pero
arrastrar le da control sobre
el tamaño y la forma. Siempre
puede volver a cambiar la
posición y la forma de un
control al hacer clic en él para
seleccionarlo, y luego arrastrarlo
como un todo para moverlo,
o arrastrar uno de los ocho
pequeños “manejadores” en los
lados del control para cambiar su
tamaño.
Suceden dos cosas cuando hace clic en el ícono de botón: se habilita el ícono Modo Diseño (se vuelve dorado) y su puntero toma la forma de una cruz. El ícono Modo Diseño de la cinta de opciones significa que no puede interactuar normalmente con la hoja de cálculo (en cambio, puede colocar y cambiar el tamaño de los controles, y además, como verá, escribir código para esos controles). Para regresar a la interacción con la hoja de cálculo normal en cualquier momento, sólo haga clic en el ícono Modo Diseño. Se deshabilitará.
Si quiere clonar un control
(para que esté seguro de que
uno nuevo tendrá el mismo
tamaño y la misma forma que
el original), sólo haga clic para
seleccionarlo, oprima CTRL+C
para copiarlo y luego CTRL+V para
hacer una o varias copias.
147Capítulo 12 Adición de controles a sus hojas de cálculo
Con su ratón, arrastre a algún lugar de la hoja de cálculo 4. para crear un botón, como se muestra en la figura 12-1.
Haga clic en el botón para seleccionarlo, y luego oprima 5. CTRL+C para copiarlo.
Oprima 6. CTRL+V para pegar un botón nuevo, clonado. Arrastre el clon para que quede junto al original.
Ahora quiere cambiar la leyenda predeterminada 7. (CommandButton1) por algo que signifique algo para el usuario. Haga clic con el botón derecho en el primer botón y elija Objeto Botón de comando | Modificar del menú contextual.
Ahora el control del botón está enmarcado con líneas 8. diagonales. En este momento puede escribir una nueva
leyenda.
Escriba 9. Acercar como leyenda para el botón de la izquierda,
y repita los pasos 7 y 8 para cambiar la leyenda del botón de
la derecha por Alejar (véase la figura 12-3).
Figura 12-1 Use el ícono Insertar para agregar controles a una hoja de cálculo
Nuevo botón
Figura 12-2 Haga clic en el
primer botón de los controles
ActiveX, Botón de comando
Figura 12-3 Cuando elige
la opción Modificar, puede
escribir directamente una
leyenda para el botón
Macros con Excel 2007148
Ajuste de las propiedades del controlAhora tal vez quiera cambiar el aspecto o modificar de otra manera alguna de las propiedades de sus nuevos controles de botón.
Haga clic en uno de los botones para seleccionarlo solo. (Si los botones están agrupados, entonces desagrúpelos usando la opción Agrupar del menú contextual. Si ambos botones están seleccionados, deselecciónelos al hacer clic en cualquier lugar de la hoja de cálculo. Sólo debe estar seleccionado un botón porque es la única manera de traer al frente la
ventana Propiedades.)Haga clic con el botón derecho en uno de sus
botones para desplegar su menú contextual, y luego elija Propiedades (o haga clic en el elemento Propiedades de la sección Controles de la cinta de opciones). Aparece la ventana Propiedades, como se muestra en la figura 12-4.
Haga doble clic en la propiedad Font de la ventana mostrada en la figura 12-4, para desplegar el cuadro de diálogo Fuente, que se muestra a la derecha. Cambie la propiedad Name, en la ventana Propiedades, por Acercar (para el botón con la misma leyenda). Esta propiedad Name se volverá automáticamente el nombre de la sub (el manejador
Si quiere reubicar dos o más
controles como una unidad,
mantenga oprimida la tecla CTRL
mientras hace clic en cada control.
Esto crea un grupo de controles
que ahora puede arrastrar por la
hoja de cálculo y colocar en un
nuevo lugar (como un grupo).
En este modo, también puede
hacer clic con el botón derecho en
uno de los controles agrupado,
elija Formato de control del
menú contextual y ajuste varias
propiedades, incluido el tamaño.
Figura 12-4 Puede cambiar muchas de las cualidades de un control en su ventana Propiedades
149Capítulo 12 Adición de controles a sus hojas de cálculo
de evento donde escribe su código para que las cosas sucedan cuando se hace clic en este botón). También cambie el tamaño por algo que le parezca adecuado.
Ahora haga clic en el otro botón para seleccionarlo. Observe cómo la ventana Propiedades cambia para desplegar las propiedades de este control recién seleccionado. Repita los pasos anteriores para cambiar la propiedad Name del segundo botón por Alejar y el tamaño de fuente para que coincida con el otro botón.
Si lo desea, juegue un poco con los colores, etcétera. Estas cosas son de gusto personal, o la falta de éste. Incluso puede agregar una imagen usando la propiedad Picture, lo que puede ser agradable.
Ahora cierre la ventana Propiedades. Está listo para agregar código.
Escritura de código para botones y otros controlesMuy bien. Ya tiene algunos botones en su hoja de cálculo, pero ¿dónde está la belleza sin la posibilidad de que realicen algún trabajo? Bueno, en algunos casos la belleza es su propia justificación. Pero queremos que estos botones hagan algún trabajo.
Haga doble clic en el botón con la leyenda Acercar. Se abre el editor de VB, desplegando el manejador de eventos Click para el botón llamado Acercar. (Si no se abre el editor, ha dejado de seleccionar el ícono Modo Diseño en la ficha Programador de la cinta de opciones. Selecciónelo e intente de nuevo.)
Estoy seguro de que debió notar el extraño
conjunto de controles con sombra (casi
duplicados del conjunto de ActiveX) que
se muestra en la figura 12-2. Se trata de los
Controles de formulario, y hemos evitado
tratar con ellos en este capítulo. ¿Por qué?
Porque son menos flexibles y útiles que sus
contrapartes de ActiveX. Son compatibles
con versiones anteriores de Excel, pero es
más difícil trabajar con ellos, tienen pocas
propiedades, no pueden desencadenar
eventos y, por lo general, permiten menos
libertad. Por tanto, mi sugerencia es que los
evite a favor del conjunto de controles ActiveX.
Sin embargo, hay unas cuantas situaciones
donde tal vez quiera usar un control de
formulario. Los controles ActiveX necesitan
que cree un manejador de eventos (como
Button_Click), pero los controles
de formularios más antiguos pueden
desencadenar directamente los macros. En
realidad no es una gran diferencia (sólo copie
el código de una macro existente y péguela
en un manejador de eventos). Pero si quiere
hacer algo realmente rápido y sencillo, como
agregar un botón que sólo ejecute una macro
existente, siga adelante y use botones de
control de formulario, si lo desea.
No puede seleccionar controles de
formulario al hacer clic en el botón Modo
Diseño. No tiene efecto en ellos. En cambio,
haga clic con el botón derecho en él para
seleccionarlo. Y para asignar una macro haga
clic con el botón derecho y luego elija Asignar
macro del menú contextual. Aparece una lista
de macros.
Macros con Excel 2007150
El Acercar_Click que ve en la figura 12-5
maneja el evento Click (responde cuando el
usuario hace clic) para este botón llamado Acercar.
En otras palabras, es como una macro, pero en lugar
de ejecutarse mediante una combinación de teclas
de acceso directo o algún otro desencadenador, este
código se ejecuta cuando el usuario hace clic en este
botón en particular.
Además, observe en la figura 12-5 que este
manejador de eventos Button_Click está almacenado dentro (y por tanto sólo está
disponible para) esta hoja de cálculo en particular. Esta disponibilidad restringida y local
tiene sentido porque este botón sólo está localizado en esta hoja de cálculo. El código no
está en el proyecto Personal (así estaría disponible para todas las hojas de cálculo actuales y
futuras).
Queremos hacer que el botón Acercar amplifique cualquier área seleccionada en la hoja
de cálculo. Si nada está seleccionado, agranda todo.
Escriba la siguiente línea en
el evento Click:
Private Sub Acercar_
Click()
ActiveWindow.Zoom =True
End Sub
Ahora regresemos a la
hoja de cálculo, haga clic en
la ficha Programador y deje
de seleccionar el ícono Modo
Diseño. De esta manera
puede probar su nuevo botón.
Haga clic en el botón Acercar.
Pruébelo con algunas celdas
seleccionadas. Para regresar a
la vista normal, haga clic en el
ícono 100% de la ficha Vista de
la cinta de opciones.
Para programar su botón
Alejar, seleccione el ícono Figura 12-5 Utilice el editor de VB para escribir código para
manejadores de evento como el evento Click de este botón
Como aprendió en páginas
anteriores de este libro, para
encontrar el código que necesita
insertar en este manejador
de eventos sólo es necesario
grabar una macro que realice
las acciones que quiere que el
manejador de eventos realice.
151Capítulo 12 Adición de controles a sus hojas de cálculo
Modo Diseño, luego haga doble clic en el botón Alejar
para abrir el manejador de evento Click. Escriba la
siguiente línea en el evento Alejar_Click():
Private Sub Alejar_Click()ActiveWindow.Zoom = 100
End Sub
Ahora puede hacer un acercamiento y restaurar la vista normal, mediante los dos botones.
Exploración de otros controlesEncontrará otros controles disponibles cuando haga
clic en el ícono Insertar, de la ficha Programador
de la cinta de opciones. Revisemos varios de estos
controles y veamos lo que hacen y cuándo son
apropiados.
Los controles del botón de alternar son útiles
para situaciones similares al funcionamiento de
un encendedor de luz: dos estados, las luces están
encendidas o apagadas. Es similar a lo que ha estado
haciendo con la característica de acercar que agregó a su hoja de cálculo en este capítulo.
Podría ser más eficiente reemplazar los dos botones de acercamiento con un solo botón de
alternar. Cuando hace clic, se acerca. Cuando hace clic por segunda vez, se aleja.
Adición de un botón de alternarPasemos a la prueba. Haga clic en el ícono Modo Diseño para habilitar ese modo, y luego
en su botón Acercar personalizado para seleccionarlo. Oprima SUPR para deshacerse del
botón. De igual manera, seleccione y elimine su botón Alejar. Al eliminar estos controles
no destruye el código de manejador de evento en el editor de VB, que reutilizaremos para
nuestro nuevo botón de alternar.
Ahora agregue el botón de alternar ActiveX al hacer clic en el ícono Insertar, junto al
ícono Modo Diseño, y luego seleccione el botón de alternar y arrástrelo, o sólo haga clic
para colocarlo en la hoja de cálculo.
Haga doble clic en el nuevo botón de alternar para abrir el editor de VB, y luego escriba
esto en el evento Click del botón:
Un clic es un evento, pero casi
todos los controles tienen eventos
adicionales. Puede ver una lista
de estos eventos al desplegar el
cuadro de lista en el lado superior
derecho del editor de VB cuando
esté escribiendo código para un
manejador de evento.
Manejadores de eventos como
estos dos eventos Botón_Click
quedarán destruidos, perdidos
para siempre, si elimina la hoja
de cálculo dentro de la cual se
crearon o incluyeron. De modo
que si tiene algún código que
desea preservar, cópielo y luego
péguelo en un archivo del Bloc
de notas o alguna otra área de
almacenamiento segura para
posible uso futuro.
Macros con Excel 2007152
Private Sub ToggleButton1_Click()Static Oprimido As BooleanOprimido = Not Oprimido
If Oprimido ThenActiveWindow.Zoom = True
ElseActiveWindow.Zoom = 100
End If
End Sub
Este código merece explicación. El comando Static es muy útil en situaciones como
ésta, de modo que debe tenerlo en su bolsa de trucos del programador. Static preserva
variables. Cuando una variable se declara como Static (en oposición al comando Dim
descrito en el resumen del capítulo 9), esa variable y el valor que contiene se retienen. Una
variable ordinaria, no estática, se destruye junto con su contenido cada vez que una macro o
un manejador de eventos finalizan su ejecución. Pero queremos preservar el valor en nuestra
variable llamada Oprimido, porque eso nos indica el estado actual del botón de alternar.
He aquí lo que sucede, paso a paso, en este código.
Declaramos una variable estática (no volátil) llamada 1. Oprimido. Y especificamos
que éste es un tipo de variable booleano.
Al escribir 2. Oprimido = Not Oprimido, cambiamos el valor de Oprimido a su
opuesto. En otras palabras, si contenía False, ahora contiene True. Una variable
booleana sólo puede contener dos valores, False o True. Esto lo hace ideal para
una situación de alternar. Cada vez que se ejecuta la línea de código Oprimido
= Not Oprimido, cambia de False a True, o de True a False. En otras
palabras, esta variable booleana funciona como un encendedor de luz o, para el
caso, como un control de botón de alternar. Incluso, esta variable es Static, de
modo que recuerda su contenido aunque el código del manejador de eventos haya
terminado su ejecución.
El resto del código se comprende fácilmente, una vez que ve cómo cambia una 3. variable booleana estática entre dos estados cuando utiliza el comando Not. If
Oprimido significa “si la variable llamada Oprimido contiene el valor True”. Por
ello, si contiene el valor True, el usuario ha hecho clic en ese botón (el botón tiene el
aspecto de que está hundido en la hoja de cálculo, indicando que está “encendido” o
“activo”). Por tanto, queremos hacer un acercamiento como respuesta a este clic:
ActiveWindow.Zoom = True
153Capítulo 12 Adición de controles a sus hojas de cálculo
Pero si ésta es la segunda vez que el usuario hace clic en este botón, se deshabilita el acercamiento. De modo que se desencadena la sección Else de la estructura If...Then, y este código se ejecuta para restaurar la vista normal:
ActiveWindow.Zoom = 100
Uso de un botón de control de númeroEl control de número tiene una flecha hacia arriba y una hacia abajo. En realidad, son dos
botones en uno. Por lo general, los botones de control de número se usan para aumentar o
reducir algo. Lo usaremos para aumentar o reducir el nivel de acercamiento cada vez que
el usuario hace clic en él. Haga clic en la flecha hacia arriba y el acercamiento aumenta. La
flecha hacia abajo lo reduce.
Veamos cómo puede usar un botón de control de número para permitir que el usuario
ajuste el porcentaje de acercamiento. Agregue un botón de control de número a su hoja de
cálculo y también agregue un control de etiqueta.
Podría pensar que tenemos que usar una variable Static en este código para recordar
el valor de acercamiento actual, pero está equivocado. Puede acceder a muchas propiedades
de controles durante la ejecución del código de VBA. Y este botón de control de número
tiene una propiedad value que aumenta 1 cada vez que hace clic en la flecha hacia arriba
y disminuye 1 cada vez que hace clic en la flecha hacia abajo. Y este value se retiene hasta
que cierra la hoja de cálculo en que reside.
La propiedad value del botón de control de número empieza en cero. Pero sabemos
que el factor de acercamiento mínimo para una hoja de cálculo es 100 (lo que significa
100%). Y el acercamiento máximo es 400. Así que no queremos permitir que el usuario
haga clic fuera de esos valores. Vamos a usar la propiedad de valor y a multiplicarlo
por 100 para establecer el acercamiento. Así que desearemos un valor de 1, 2, 3 o 4. No
permitiremos que el usuario vaya debajo de 1 o arriba de 4 al hacer clic (lo que causaría un
error y detendría la ejecución del código).
Podría escribir código que revise estos límites (>0 y <5) e imponerlos en su manejador
de eventos. Pero eso es complicado y, en este caso, simplemente no es necesario revisar
lo que los programadores llaman condiciones de límite. Para nuestra fortuna, el botón de
control de número tiene un par de propiedades integradas que limitarán su rango. Así,
haga clic con el botón derecho en el botón de control de número y elija Propiedades del
menú contextual para abrir su ventana Propiedades. Establezca la propiedad Min en 1 y la
propiedad Max en 4.
Haga clic con el botón derecho en la etiqueta y elija Propiedades del menú contextual
(si la ventana Propiedades aún está visible, puede hacer clic en el control de la etiqueta
para seleccionarla y la ventana Propiedades cambiará automáticamente para desplegar las
Macros con Excel 2007154
propiedades de la etiqueta). Cambie la propiedad de leyenda de la etiqueta por: Haga clic para acercar.
Ahora haga doble clic en el botón de control de número para abrir su ventana de código.
Private Sub SpinButton1_Change()
v = SpinButton1.ValueActiveWindow.Zoom = 100 * vEnd Sub
En este código, accede a una propiedad del botón control de número tres veces. Primero lea (obtenga) el valor que se encuentra en la propiedad SpinButton1. Observe cómo debe especificar el nombre del control, separado por un punto (.) de la propiedad cuyos datos desea ver.
Así, después de que se ejecuta la primera línea de código, la variable v contiene cualquier cosa que se encuentre en la propiedad de valor de este botón de control de número en particular. Recuerde que las propiedades Max y Min del botón evitan que los valores vayan debajo de 1 o arriba de 4. Luego todo lo que tiene que hacer es establecer la propiedad de acercamiento a 100 por el valor actual del botón de control de número. Esto da como resultado cuatro valores posibles de acercamiento: 100, 200, 300 y 400.
Nota: Los números de página que hace referencia a figuras aparecen seguidos por una “f ”.
2008, tasas de impuesto
sobre la renta de Estados
Unidos, 79f, 128–129
AAcceso rápido, barra de
herramientas, 53–57
Aceptar, botones, 95
acercamiento, botones
adición a hojas de
cálculo, 146
controles del botón de
alternar, 151–152
escritura de código para,
150–152
Acercar_Click, manejador de
eventos, 149–150
Activate, eventos, 96
ActiveCell, comando, 19
ActiveCell.CurrentRegion.
Select, comando, 109
ActiveX, botones de alternar,
151
ActiveX, controles, 147f, 149
ActiveX CommandButton,
ícono, 146, 147f
Add, método, 142
Alfabética, ficha, 17
alineación horizontal, 24
almacenamiento
asignación de macros a
la barra de herramientas,
53–57
asignación de métodos
abreviados de teclado a
macros, 49
en el libro actual, 46
en el libro de macros
personal, 44
en libros, 45
hacer que las macros estén
disponibles, 47
módulos VBA, 46
protección de macros, 48
Alternar carpetas, botón, 17
Ancho de columna, cuadro de
diálogo, 33–34
anidadas, macros If/Then,
130
anidamiento de bucles, 137
apóstrofos, 19, 36–37
Archivo, menú, 71–72
archivos habilitados para
macros, 45–46
argumentos de función, 83f
Argumentos de función,
ventana, 81
argumentos, 18–19, 86–87
opcionales, 87
Ayuda, campo, 23
Bbarra de fórmulas, 28–29
barras de herramientas
Acceso rápido, 54–57
cinta de opciones
Programador, 2–3, 16
Vista, 2
Visual Basic, 23f
Bloquear proyecto para
visualización, casilla de
verificación, 74–75
Bono, función, 82–83
booleanas, variables, 152–153
Borrar, botón, 40–41
botones, argumento, 90–91
botones
adición a hojas de cálculo,
146–148
agrupados, 147–148
barra de herramientas, 54,
56
de alternar, 151–152
escritura de código para,
149–151
Macros con Excel 2007156
bucles
Do...Loop
desplazamiento de
condición de salida
al final del, 140–141
estructura While...
Wend, 141
revisión general, 139–140
For Each...Next, 141–144
For... Next
anidamiento, 136–138
comando Step, 136
sin fin, 138
prueba de macros,
134–135
revisión general, 133–134
sin fin, 138
Button_Click, manejador de
eventos, 150–151
Ccadena, operador, 117–118
cálculos
de impuestos fiscales
corporativos, 78–82,
128–130
de tasa de interés, 69–70
financieros, comandos,
69–70
cambio de nombre de
módulos, 46–47
Cancelar, botones, 95
celdas, formato. Véase
formato de celdas
Cells, comando, 109
centrada, alineación, 24–26,
102–103
centrado de texto, 24–25
Centro de confianza, ventana,
47–48
Click, manejador de eventos,
149–151
Código, grupo, 16
código
copia y pegado, 38
ejemplos, 61–62
escritura
para botones y
controles, 149–151
para cuadros de
entrada, 87–90
para macros, 63–64
familiarización con, 23–24
limpieza, 63–65
para formato de celdas,
24–26
recolección
construcción de
macros, 35–39
eliminación de macros
antiguas, 39–40
módulos, 35–36
prueba de macros,
39–40
revisión general, 34–36
ventana, 17–18, 60–61,
88–89
visualización, 29–31
colecciones, 142–144
color, paleta, 107–108
columnas, 33, 39, 106
Coma, estilo, 104
Comandos disponibles en,
menú desplegable, 54–56
comandos
búsqueda de argumentos,
87–88
cálculos financieros, 69–71
comprensión, 65–66
editor de VB, 71–72
error, 70–72
escritura
comprensión del
código, 63–64
limpieza de código,
63–65
revisión general, 60–65
fecha y hora, 67–68
manipulación de texto,
65–68
matemáticos, 68–69
por nombre
ActiveCell, 19–20
ActiveCell.
CurrentRegion.Select, 109
Cells, 109
CurrentRegion, 110
DateDiff, 68–69
Debug.Print, 136–138
Dim, 89–90, 113–114,
121–122, 152
Dimension, 107–108
End Sub, 20, 36
Exit Sub, 70–71
Format, 67–68, 70–71
FormulaRlCl, 19–20
GoSub, 74
If...Then, 88–89
InputBox, 86–88, 129
InStr, 66–67
LCase, 67–68
Left, 67–68
Mid, 66–67
157Índice
MsgBox, 68–69, 90
Offset, 21
Paste Special, 30–31
Range, 20, 109–110
Replace, 67–68
Round, 68–69
Select, 20–21
Selection, 110
Static, 152–153
Step, 136–138
Until, 140
Ver Macros, 54
While, 140
With...End With, 37–39
With Selection, 63–64,
102–103
comas, 86
CommandButton, control,
94–95
conexión con el código, 87
constantes integradas, 92
conteo hacia atrás, 136
contraseñas, 74–75
control de números, botón,
152–154
controles
ajuste de propiedades,
148–150
escritura de código para,
149–151
copia
código, 108
controles, 146
macros, 36, 47–48
cuadro de entrada
escritura de macros
completas, 87–88
escritura y prueba de
código, 87–90
Cuadro de herramientas, 94
cuadros de mensaje, 90–92,
130–131
CurrentRegion, comando, 110
DDateDiff, comando, 68–69
Debug.Print, comando,
136–138
declaración
formal de variables,
113–114
implícita, 113–114
Depuración, menú, 72
Descripción, campo, 4–5
desplazamientos, 125–126
Dim, comando, 89–90,
113–114, 121–122, 152
Dimension, comando,
107–108
dimensiones de una matriz,
121–122
Diseño de página, cinta de
opciones, 32
división entera, 68–69
Do...Loop
desplazamiento de la
condición de salida al
final, 140–141
estructura While...Wend,
141
revisión general, 139–140
dos puntos, 74
EEdición, menú, 71–72
edición de macros
en el editor de VB
Explorador de
proyectos, 16–17
módulos, 16–17
ventana de código, 17–18
ventana Propiedades,
16–17
guardado de macros
editadas, 22–23
editor de VB. Véase Visual
Basic, editor
Ejecutar, menú, 72
Else, operación, 124, 126–127
Elself, operación, 127–128
End Sub, comando, 20, 36
Error de sintaxis, mensaje, 113
escritura
código
para botones y controles,
149–151
para cuadros de entrada,
87–90
para macros, 63–64
comandos
comprensión del
código, 63
limpieza de código,
63–65
revisión general, 60–65
subrutinas, 75–77
etiquetas, 74–75
verticales, 61–64
Exit Sub, comando, 70–71
Explorador de objetos, 21–23
Explorador de proyectos,
16–17
Explorador de proyectos,
ventana, 34–35, 60, 95–96
Macros con Excel 2007158
expresiones, 114–115, 136–137
condicionales, 124–125
extensiones de archivo, 45–46
Ffecha, macros, 8–11
fecha, opciones, 100–101
fecha y hora, comandos, 67–68
fechas estáticas, 9–10
For Each...Next, bucles,
141–144
For...Next, bucles
anidados, 136–138
comando Step, 135–136
interminables, 137–139
formación
celdas
apariencia de los
números, 104–105
cambio de formatos
existentes, 100–101
comandos de VBA,
109–110
encabezados de
columna, 101–104
esquema de color,
152–153
formación de macros,
107–110
revisión general, 10–12,
105–107
macros, 44–46, 77–79,
107–110
Formato, comando, 67, 70–71
Formato, menú, 72
formulario, controles,
148–149
FormulaRlCl, comando,
19–20
fórmulas, despliegue como
valores
prueba de macros, 29–30
revisión general, 28–31
visualización del código de
macros, 29–31
fracciones, 135–136
funciones personalizadas
ocultamiento de datos
confidenciales, 82–83
simplificación de cálculos
complicados, 78–82
GGoSub, comando, 74
grabación de macros
cinta de opciones
Programador, 2–4
formación con macros,
10–12
guardado de macros
en el libro actual, 13–14
en el Libro de macros
personal, 13, 44–45,
60–61
en un nuevo libro, 13–14
lectura de macros
NOMBRE1, 3–7
NOMBRE2, 6–7
NOMBRE3, 7–9
macros simples de datos,
8–11
revisión general, 31–34
Grabadora de macros, 12,
33–34, 101
Grabar macro, cuadro de
diálogo
campo Método abreviado,
49–51
grabación de macros de fecha en, 9–10
Guardar macro en, cuadro de lista, 60–61
revisión general, 4–5 guardado cambios, 26, 42 libros, 44–45 macros edición, 22–23 en el libro actual, 13–14 en el Libro de macros
personal, 13, 44–45, 60–61
en un nuevo libro, 13–14Guardar como, ventana, 13–14
Guardar macro en, campo, 4–5
Hhabilitación de macros, 47–48 hackeo, 136–137hojas de cálculo adición de botones,
146–148 adición de botones de
alternar, 151–153 botón de control de
números, 152–154 cambio de la apariencia aspecto de números,
104–105 encabezados de
columna, 101–104 esquema de color,
107–108 revisión general,
105–107 informe mensual, 10–11 propiedades de control de
ajuste, 147–150
159Índice
revisión general, 145–146
Horizontal, opción, 32–33,
38–39
HOY, fórmula, 8–11
II, variable, 134
If...Then, comando, 88–89
If/Then/Else, macros
de varios niveles, 128–130
llamadas a subrutinas,
75–76
macros If/Then
anidadas, 130–131
simples, 124–126
operación Else, 126–127
operación Elself, 127–129
revisión general, 123–124
ImpCorp, función, 79–82
Imprimir, característica
Líneas de cuadrícula,
32–33
inclusión en el código, 875
incrementos, 134
índice, números, 121–122
infinitos, bucles, 138–139
Información rápida,
característica, 87f, 88
Información rápida, opción, 22
informes mensuales, 10–11
Inmediato, ventana, 134–135
InputBox, comando, 75–77,
86–90, 129
Insertar función, cuadro de
diálogo, 80–81
Insertar, ícono, 164, 147f
InStr, comando, 66–67
interactivas, macros
argumentos, 86–87
cuadros de diálogo
personalizados
adición de elementos
a cuadro de lista,
95–97
ofrecimiento al usuario
de listas de opciones,
93–95
respuesta la selección
del usuario, 96–97
cuadros de entrada
escritura de macros
completas, 88
escritura y prueba de
código para, 88–90
cuadros de mensajes,
90–93
interrupción, modo, 72, 134
iteración, 134
LLCase, comando, 67
lectura de macros
NOMBRE1
líneas de comando,
19–21
líneas de comentario,
19–20
revisión general, 18–21
NOMBRE2, 20–21
NOMBRE3, 20–22
Left, comando, 67
libro actual, 13–14, 45–47
Libro de macros personal,
eliminación de macros,
41–42
guardado de macros, 13,
44–45, 60–61
libros
cierre, 33–35
guardado, 44–46
guardado en nuevos, 13–14
habilitados para macros,
13–14
ocultos, 41–42
límite, condiciones, 153–154
limpieza de código, 62–64
líneas de comentario, 36–38
líneas guía, 32, 106
listas de argumentos, 68
Listltem, propiedad, 96–97
literales, 114–115
MMacro, botón, 5–6, 33–34
macro, código. Véase código
macro, comandos. Véase
comandos
macro If/Then/Else de varios
niveles, 128–130
manejador de eventos, 96,
149–151
manejadores de error, 70–71
manipulación de texto,
comandos, 65–67
mapa del modelo de objetos,
143–144, 144f
matrices
comparación entre números
y nombres, 120–122
reglas, 121–122
revisión general, 119–120
mayúsculas, cambio a,
112–113
Mensaje, argumento, 86–87
mensajes de error, 112–113
Macros con Excel 2007160
Mid, comando, 66–67
Mod, operador, 116–117
Modificar, opción, 147–148
Modificar botón, ventana,
56–57
Modo Diseño, ícono, 146
módulos, 16–17, 35–36
MsgBox, comando, 68, 90–91
NNombre de macro, campo,
4–5, 41
NOMBRE1, macro
líneas de comando, 19–21
líneas de comentario,
19–20
prueba, 5–7
revisión general, 18–21
NOMBRE2, macro, 7, 20–21
NOMBRE3, macro, 8–9,
20–22
nombres
de funciones, 79–80
de macros, 22
de módulos, 46–47
de subrutinas, 74–75
de variables, 112–113
en comparación con
números, 120–122
números
de elementos, 97
en comparación con
nombres, 120–122
expresiones numéricas,
136–137
Oobjetos, 22, 24, 143–144
Offset, comando, 20–21
Opciones de Excel, ventana,
2–4, 54–57
Opciones de hoja, área, 32
Opciones de macro, cuadro
de diálogo, 49–51
operaciones
operadores
aritméticos, 116–117
de cadenas, 117–118
de comparación, 115–117
de texto, 115–116
lógicos, 117–118
matemáticas, 68–69
revisión general, 115–116
orientación de la página,
32–33, 38–39
Ppágina, orientación, 32–33,
38–39
paréntesis, 18–19, 79–81, 86,
118–119
Pegado especial, comando,
30–31
personalización
barra de herramientas,
53–57, 57f
cuadro de diálogo
adición de elementos a
cuadro de lista, 95–97
ofrecimiento de lista de
opciones, 93–95
respuesta a selección de
usuario, 96–97
fecha, 100–101
función
ocultamiento de datos
confidenciales, 82–83
simplificación de
cálculos complicados,
78–82
Personalizar barra de
herramientas de acceso
rápido, lista desplegable,
56–57
Por categorías, ficha, 17–18
precedencia de operadores,
118–119
predeterminadas, fechas, 100
Predeterminado, argumento,
86–87
procesadores de datos, 133
proceso de selección, 101–102
Programas, cinta de opciones,
16
Propiedades, ventana
ajuste de propiedades de
control, 147–150
apertura, 46–47
cambio de nombres de
módulos en, 89–90
revisión general, 16–18,
60–61
Propiedades del proyecto,
ventana, 48–49
protección de macros, 48–49
Protección, ficha, 48–49
punto y coma, 135–136
RRange, comando, 20–21,
109–110
recolección de código
construcción de nuevas
macros, 35–40
eliminación de macros
161Índice
antiguas, 40–41
módulos, 35–36
prueba de macros, 40
revisión general, 34–41
Reemplazar, comando, 67
Referencia del programador
de Excel, 24
referencias, 7, 124–125
referencias absolutas, 7
Referencias relativas,
característica, 7, 124–125
Round, comando, 68–69
S
selección de fuente, 103, 106
Select, comando, 20–21
Select Case, instrucción,
79–80
Selection, comandos, 110
sensibilidad a mayúsculas y
minúsculas, 112–113
Sheets, colección, 142–143
sistema de ayuda, 22–26,
61–62, 65–66
Static, comando, 151–153
Step, comando, 135–136,
137–138
Sub, líneas, 18–19, 34–36
subrutinas
asignación de nombres a,
74–75
ejecución de macros como,
76–79
escritura, 75–77
llamado a, 75–76
T
tasas de impuesto sobre la
renta de corporaciones
estadounidenses 2008,
79f, 128–129
teclas de método abreviado,
48–53
Título, argumento, 86–87
UUntil, comando, 140
UsedRange, método, 142–143
UserForms
adición a cuadro de lista,
95–97
ofrecimiento de listas de
opciones, 93–95
respuesta a la selección de
usuario, 96–97
Vvalor de variable, 112–113
valores, despliegue de
fórmulas como prueba
de macros, 29–30
revisión general, 28–31
visualización del código de
la macro, 29–31
valores devueltos, 91f
value, propiedad, 152–153
variables
asignación de nombres,
112–113
combinación en
expresiones, 114–116
creación, 113–115
de conteo en bucles, 134
matrices
comparación entre
números y nombres,
120–122
reglas, 121–122
revisión general, 119–120
operadores
aritméticos, 116–117
de cadena, 117–118
de comparación,
116–117
lógicos, 117–118
precedencia de, 118–119
revisión general, 88–89,
112–115
variantes, 113–114
VBA, comandos, 109–110
Ver, menú, 71
Ver código, botón, 16–17, 96
Ver macros, comando, 55
Ver objeto, botón, 16–17, 96
Vista, barra de herramientas, 2
Visual Basic
comandos de macros,
64–65
despliegue de fórmulas
como valores
prueba de macros, 29–30
revisión general, 28–30
visualización del código
de la macro, 29–31
funciones personalizadas
de ocultamiento de datos
confidenciales, 82–83
Macros con Excel 2007162
simplificación de
cálculos complicados,
78–82
grabación de macros, 31–34
recolección del código de
la macro
apertura de nuevos
módulos, 35–36
construcción de macros,
35–40
eliminación de macros
antiguas, 40–41
organización de ventanas
del módulo, 35–36
revisión general, 34–41
prueba de macros, 40
subrutinas
asignación de nombres,
74–75
ejecución de macros
como, 76–79
escritura, 75–77
llamado a, 75–76
Visual Basic (VB), editor
Cuadro de herramientas, 94
Explorador de proyectos,
16–17
módulos, 16–17, 46–47
revisión general, 71–72
ventana de código, 17–18
ventana Propiedades, 16–18,
147–150, 153–154
ventanas en, 60–61
visualización del código de la
macro, 29–31
W
While, comando, 140
While...Wend, estructura, 141
With Selection, comando,
62–63, 102–104
With, estructuras, 62–63
With...End With, comando,
37–39
X
XLSM, extensiones de
archivo, 45–46