Professional Documents
Culture Documents
Si utilizas Excel frecuentemente es posible que en alguna ocasin te hayas encontrado ejecutando una misma serie de acciones una y otra vez. Esas acciones que haces repetidas veces se podran automatizar con una macro. Una macro es un conjunto de comandos que se almacena en un lugar especial de Excel de manera que estn siempre disponibles cuando los necesites ejecutar. Por ejemplo, si todas las maanas creas un reporte de ventas y en ese reporte siempre das el mismo formato a los textos, se podra crear una macro para que lo haga automticamente por ti. Las macros se utilizan principalmente para eliminar la necesidad de repetir los pasos de aquellas tareas que realizas una y otra vez.
Un lenguaje de programacin
Las macros se escriben en un lenguaje de computadora especial que es conocido como Visual Basic for Applications (VBA). Este lenguaje permite acceder a prcticamente todas las funcionalidades de Excel y con ello tambin ampliar la funcionalidad del programa. Pero no te preocupes si no eres un programador de computadoras, Excel provee de una herramienta especial que permite crear una macro sin necesidad de conocer los detalles del lenguaje de programacin. Aunque si aceptas el desafo y te introduces en el mundo de la programacin VBA pronto te convertirs en un Ninja de Excel. Vers que crear una macro en Excel no es tan complicado y ser una manera fcil y rpida de eliminar esas tareas repetitivas que todos los das te quitan minutos preciados de tu tiempo.
Automatizacin de tareas
Seguramente ests familiarizado con procesos de automatizacin en el mbito industrial. Un ejemplo muy claro son las plantas ensambladoras de automviles donde existen robots que
han sustituido tareas que antes eran hechas por humanos. La automatizacin trajo beneficios como mayor eficiencia y productividad de las plantas y un mejor aprovechamiento del tiempo del personal al reducir la cantidad de tareas repetitivas que realizaban. De la misma manera las macros nos ayudan a eliminar esas tareas repetitivas de nuestro trabajo cotidiano al permitirnos utilizar mejor nuestro tiempo en el anlisis de los datos y en la toma de decisiones.
Aprender el lenguaje VBA no es nada complicado y se puede lograr fcilmente. Lo que toma un poco ms de tiempo es pulir nuestras habilidades de programacin. Lo que quiero decir con esto es que para ser un buen programador de macros debes dedicar tiempo en resolver mltiples problemas en donde puedas llevar al lmite el lenguaje VBA.
Existe otro mtodo que es utilizar la Grabadora de macros la cual ir grabando todas las acciones que realicemos en Excel hasta que detengamos la grabacin. Una vez grabada la macro podremos reproducir de nuevo las acciones con tan solo un clic. Ahora que ya sabes para qu sire una macro en Excel puedes dar los primeros pasos en este camino utilizando el tutorial Introduccin a las macros.
El grupo Complementos nos permite administrar y habilitar complementos como el Solver. El grupo Controles incluye funcionalidad para agregar controles especiales a las hojas de Excel como los controles de formulario que son botones, casillas de verificacin, botones de opcin entre otros ms que sern de gran utilidad para ampliar la funcionalidad de Excel. El grupo XML permite importar datos de un archivo XML as como opciones tiles para codificar archivos XML. Finalmente el grupo Modificar solamente contiene el comando Panel de documentos. Aunque pueden parecer intimidantes los comandos de la ficha Programador con el paso del tiempo te irs familiarizando poco a poco con cada uno de ellos.
La grabadora de macros
Puedes crear una macro utilizando el lenguaje de programacin VBA, pero el mtodo ms sencillo es utilizar la grabadora de macros que guardar todos los pasos realizados para ejecutarlos posteriormente.
En el cuadro de texto Nombre de la macro debers colocar el nombre que identificar de manera nica a la macro que estamos por crear. De manera opcional puedes asignar un mtodo abreviado de teclado el cual permitir ejecutar la macro con la combinacin de teclas especificadas. La lista de opciones Guardar macro en permite seleccionar la ubicacin donde se almacenar la macro.
Este libro. Guarda la macro en el libro actual. Libro nuevo. La macro se guarda en un libro nuevo y que pueden ser ejecutadas en cualquier libro creado durante la sesin actual de Excel. Libro de macros personal. Esta opcin permite utilizar la macro en cualquier momento sin importar el libro de Excel que se est utilizando.
Tambin puedes colocar una Descripcin para la macro que vas a crear. Finalmente debes pulsar el botn Aceptar para iniciar con la grabacin de la macro. Al terminar de ejecutar las acciones planeadas debers pulsar el botn Detener grabacin para completar la macro
Observa cmo he colocado un nombre a la macro y adems he especificado el mtodo abreviado CTRL+d para ejecutarla posteriormente. Una vez que se pulsa el botn Aceptar se iniciar la grabacin. Observa con detenimiento los pasos.
Al terminar los pasos se pulsa el comando Detener grabacin y la macro habr quedado guardada. Para ejecutar la macro recin guardada seleccionar una nueva hoja de Excel y seleccionar el comando Macros.
Al pulsar el comando Macros se mostrar la lista de todas las macros existentes y de las cuales podrs elegir la ms conveniente. Al hacer clic sobre el comando Ejecutar se realizarn todas las acciones almacenadas en la macro y obtendrs el resultado esperado. Por supuesto que si utilizas el mtodo abreviado de teclado de la macro entonces se omitir este ltimo cuadro de dilogo.
Pulsa el botn Aceptar y se comenzarn a grabar todas las acciones, as que debes actuar con cuidado porque se grabar absolutamente todo. Para la macro que estoy grabando solo har lo siguiente: ir a la ficha Inicio y pulsar el comando Color de fuente y seleccionar el color rojo para la celda activa.
Una vez hecho esto debo detener la grabacin de la macro y una alternativa para hacerlo es pulsar el icono que se muestra en la barra de estado.
Ahora que ya hemos generado la macro, pulsa el botn Macros que se encuentra en el grupo Cdigo de la ficha Programador. Se mostrar el cuadro de dilogo Macro que enlista todas las macros que hemos creado.
Selecciona la macro recin creada y pulsa el botn Modificar. Esto abrir el Editor de Visual Basic y mostrar el cdigo generado para la macro.
Observando este cdigo podemos aprender varias cosas. Para empezar observamos que el objeto Selection tiene una propiedad llamada Font que es la que hace referencia a la fuente de la celda o rango seleccionado. A su vez, la propiedad Font tiene otra propiedad llamada Color que es precisamente la que define el color rojo de nuestra celda. Aunque este ha sido un ejercicio muy sencillo, cuando tengas curiosidad o duda sobre qu objetos utilizar al programar en VBA considera utilizar la Grabadora de macros para darte una idea del camino a seguir.
Deshabilitar todas las macros sin notificacin. Deshabilita las macros y permite ejecutar solamente aquellas que estn almacenadas en un lugar confiable. Los lugares confiables se configuran en la seccin Ubicaciones de confianza del mismo cuadro de dilogo. Deshabilitar todas las macros con notificacin. Muestra una alerta de seguridad advirtiendo sobre la intencin de ejecutar una macro de manera que se pueda decidir si se desea ejecutar. Esta es la opcin predeterminada de Excel. Deshabilitar todas las macros excepto las firmadas digitalmente. Solamente se podrn ejecutar las macros que estn firmadas digitalmente. Habilitar todas las macros. Permite ejecutar todas las macros sin enviar alguna notificacin al usuario. Esta opcin es til si se ejecutan mltiples macros totalmente confiables. Esta opcin es la que corre los mayores riesgos al ejecutar una macro de una fuente desconocida.
Una vez seleccionada la opcin deseada se debe pulsar el botn Aceptar para hacer los cambios permanentes.
Programando en VBA
Principios Bsicos
Excel 2010 es una de las herramientas de software ms poderosas para el manejo, anlisis y presentacin de datos. Aun y con todas sus bondades, en ocasiones Excel no llega a suplir algunas necesidades especficas de los usuarios. Afortunadamente Excel cuenta con VBA que es un lenguaje de programacin que permite extender las habilidades del programa para cubrir nuestros requerimientos. Utilizando VBA se pueden desarrollar nuevos algoritmos para analizar la informacin o para integrar a Excel con alguna otra aplicacin como Microsoft Access.
Principios fundamentales
La programacin en VBA puede ser un tanto misteriosa para la mayora de los usuarios de Excel, sin embargo una vez que se comprenden los principios bsicos de programacin en VBA se comenzarn a crear soluciones robustas y efectivas. El primer concepto importante a entender es que cada elemento de Excel es representado en VBA como un objeto. Por ejemplo, existe el objeto Workbook que representa a un libro de Excel. Tambin existe el objeto Sheet que representa una hoja y el objeto Chart para un grfico. El segundo concepto importante a entender es que cada uno de estos objetos tiene propiedades y mtodos. Para explicar mejor este concepto utilizar una analoga.
Propiedades y Mtodos
Supongamos que tenemos el objeto auto. As es, un auto como el que manejamos todos los das para ir al trabajo. Este auto tiene varias propiedades como son: marca, modelo, color, tipo de transmisin las cuales ayudan a describir mejor al auto. Tambin hay propiedades que indican su estado actual como por ejemplo gasolina disponible, temperatura del aceite, velocidad, kilmetros recorridos entre otras propiedades ms. Podemos decir que las propiedades de un objeto nos ayudan a describirlo mejor en todo momento. Por otro lado tenemos los mtodos de un objeto que en resumen son las acciones que podemos realizar con dicho objeto. Por ejemplo, con nuestro auto podemos hacer lo siguiente:
encenderlo, avanzar, vuelta a la izquierda, vuelta a la derecha, reversa, detener, apagar, etc. Todas las acciones que se pueden llevar a cabo con un objeto son conocidas como mtodos. Volviendo al terreno de Excel, el objeto Workbook tiene propiedades como ActiveSheet (Hoja activa), Name (Nombre), ReadOnly (Solo Lectura), Saved (Guardado) y algunos de sus mtodos son Save (Guardar), Close (Cerrar), PrintOut (Imprimir), Protect (Proteger), Unprotect (Desproteger). Ser difcil mencionar todos los objetos de Excel y sus propiedades en esta publicacin, pero lo importante a recordar en esta ocasin es que cada elemento de Excel est siempre representado por un objeto en VBA y cada objeto tiene a su vez propiedades y mtodos que nos permitirn trabajar con nuestros datos.
El segundo mtodo para abrir este programa es, en mi opinin, el ms sencillo y rpido y que es a travs del atajo de teclado: ALT + F11. El Editor de Visual Basic contiene varias ventanas y barras de herramientas.
En la parte izquierda se muestra el Explorador de proyectos el cual muestra el proyecto VBA creado para el libro actual y adems muestra las hojas pertenecientes a ese libro de Excel. Si por alguna razn no puedes visualizar este mdulo puedes habilitarlo en la opcin de men Ver y seleccionando la opcin Explorador de proyectos.
El Explorador de proyectos tambin nos ayuda a crear o abrir mdulos de cdigo que se sern de gran utilidad para reutilizar todas las funciones de cdigo VBA que vayamos escribiendo. Dentro del Editor de Visual Basic puedes observar una ventana llamada Inmediato que est en la parte inferior. Esta ventana es de mucha ayuda al momento de escribir cdigo VBA porque permite introducir instrucciones y observar el resultado inmediato. Adems, desde el cdigo VBA podemos imprimir mensajes hacia la ventana Inmediato con el comando Debug.Print de manera que podamos depurar nuestro cdigo. Si no puedes observar esta ventana puedes mostrarla tambin desde el men Ver. El rea ms grande en blanco es donde escribiremos el cdigo VBA. Es en esa ventana en donde escribimos y editamos las instrucciones VBA que dan forma a nuestras macros. Es importante familiarizarnos con el Editor de Visual Basic antes de iniciar con la creacin de macros.
Creacin de un mdulo
Una vez dentro del Editor debes hacer clic derecho sobre el ttulo del proyecto y dentro del men seleccionar la opcin Insertar y posteriormente Mdulo.
Se crear la seccin Mdulos y dentro de la misma se mostrar el mdulo recin creado. Puedes saber que el mdulo est abierto porque su nombre se muestra en el ttulo entre corchetes.
Si el mdulo no est abierto solamente debers hacer doble clic sobre l. Posicinate en el rea de cdigo e introduce las siguientes instrucciones:
Subrutinas en VBA
El primer concepto que explicare es la instruccin Sub que es la abreviacin de la palabra subrutina. Una subrutina no es ms que un conjunto de instrucciones que se ejecutarn una por una hasta llegar al final de la subrutina que est especificado por la instruccin End Sub. Las subrutinas nos ayudan a agrupar varias instrucciones de manera que podamos organizar adecuadamente nuestro cdigo. Una subrutina siempre tiene un nombre el cual debe ser especificado justo despus de la instruccin Sub y seguido por parntesis.
Ejecutar macro
Para probar nuestro cdigo bastar con pulsar el botn Ejecutar que se encuentra dentro de la barra de herramientas.
En cuanto se pulsa el botn se ejecutar el cdigo recin ingresado y obtendremos el resultado en pantalla.
Listo, has creado tu primera macro la cual muestra una ventana de mensajes y despliega el texto especificado en la funcin MsgBox. Para guardar la macro recuerda que debes guardar el archivo como Libro de Excel habilitado para macros, de lo contrario perders el cdigo del mdulo creado.
He visto en ms de una ocasin que muchas personas no tienen esta buena prctica al programar en VBA y el problema se presentar cuando pase el tiempo y tengan que modificar el cdigo pero ya no recuerden la lgica implementada ni lo que significa cada una de las variables. Aunque pareciera una actividad aburrida, creme que te ahorrar mucho tiempo cuando te veas en la necesidad de modificar tu cdigo. Adems, si por alguna razn necesitas que otra persona haga modificaciones al cdigo le sern de gran ayuda los comentarios que hayas agregado.
De la misma manera puedes remover las comillas sencillas si pulsas el botn Bloque sin comentarios que se encuentra justo al lado derecho del botn Bloque con comentarios.
Si no puedes ver los botones anteriores en el Editor de Visual Basic es porque seguramente tienes oculta la barra de herramientas de Edicin. Para mostrarla, haz clic derecho sobre un rea libre del men superior y seleccionar la opcin Edicin.
Cada uno de los objetos de Excel tiene propiedades y mtodos. Las propiedades son las caractersticas del objeto y los mtodos son las acciones que el objeto puede hacer.
Propiedades de un objeto
Si una persona fuera un objeto de Excel sus propiedades seran el color de sus ojos, el color de su cabello, su estatura, su peso. De la misma manera, un objeto de Excel tiene propiedades por ejemplos, una celda (Range) tiene las propiedades valor (Valu) y direccin (Address) entre muchas otras. Estas propiedades describen mejor al objeto.
Mtodos de un objeto
Siguiendo con el ejemplo de una persona, si fuera un objeto de Excel sus mtodos seran correr, caminar, hablar, dormir. Los mtodos son las actividades o acciones que el objeto puede realizar. Los objetos de Excel se comportan de la misma manera que el ejemplo de una persona. Una celda (Range) tiene los mtodos activar (Actvate), calcular (Calclate), borrar (Clear) entre muchos ms.
Range ("A1").Clear
Los objetos tienen muchas propiedades y mtodos y a veces es difcil pensar que los llegaremos a memorizar todos por completo. Sin embargo, el Editor de Visual Basic es de gran ayuda porque justamente al momento de escribir nuestro cdigo nos proporciona la lista completa de propiedades y mtodos para un objeto.
Esto sucede al momento de introducir el punto despus del nombre del objeto. Puedes distinguir entre las propiedades y mtodos porque tienen iconos diferentes. En la imagen de arriba los mtodos son los que tienen el icono de color verde. Recuerda, los objetos son cosas en Excel y sus caractersticas las llamamos propiedades las cuales nos ayudan a definir al objeto. Los mtodos son las acciones que cada objeto puede realizar.
Por ejemplo, si deseamos poner en negritas el texto de la celda A1 debemos llegar al objeto Range el cual nos dar acceso a modificar la propiedad Bold de la siguiente manera:
Aunque esta lnea de cdigo puede tomarnos un poco de tiempo en escribirla, pero describe por completo la jerarqua de los objetos.
Objetos predeterminados
Existe una funcionalidad intrnseca de VBA conocida como objetos predeterminados la cual nos permite omitir la escritura de algunos objetos y aun as tener un cdigo funcional. Por ejemplo, en la sentencia mostrada previamente podemos omitir el objeto Applications y tener nuestro cdigo funcionando correctamente:
Inclusive podemos omitir los objetos ActiveWorkbook y ActiveSheet sabiendo que el cdigo se ejecutar siempre sobre el libro activo y la hoja que est activa al momento de la ejecucin:
porque da una claridad absoluta sobre la ubicacin exacta de cada objeto lo cual ayudar a evitar cualquier mala interpretacin del cdigo. Si decides no hacer uso de los objetos predeterminados sino que deseas utilizar las referencias completas hacia cada objeto an hay una manera de ahorrar algunas lneas de cdigo. Supongamos las siguientes instrucciones en VBA:
Podemos ahorrar algunas palabras de este cdigo haciendo uso del bloque With de la siguiente manera.
En ambos casos el resultado ser el mismo y en el ltimo ahorraremos algunos caracteres dejando nuestro cdigo VBA claro y legible.
El objeto Workbook representa un libro de Excel y el objeto Worksheets representa una hoja de un libro de Excel. Como sabemos, un libro de Excel puede tener ms de una hoja lo cual significa que un objeto Workbook puede contener ms de un objeto Worksheets. Ya que no hay lmite en el nmero de hojas que puede tener un libro, se volvera complicado organizar esta relacin entre los objetos Workbook y Worksheets y por esta razn se crearon las colecciones de objetos. De esta manera un objeto Workbook tiene asociada una coleccin de objetos Worksheets la cual contiene los objetos Worksheets que representan las hojas de ese libro de Excel. De la misma manera, el objeto Applications no tiene asignados directamente todos los libros de Excel sino que tiene una coleccin de objetos Workbooks la cual incluir todos los objetos Workbook de los libros de Excel que abramos en nuestro cdigo VBA.
Application.Workbooks(1).Actvate
El nmero que observas dentro de los parntesis indica el ndice del objeto Workbook dentro de la coleccin de objetos Workbooks. De manera predeterminada el ndice 1 ser para el libro de Excel que contiene el cdigo VBA y a partir de ah la numeracin ser de acuerdo al orden en que hayamos abierto otros archivos.
Si conocemos el nombre del libro podemos utilizarlo en lugar del ndice y tener una instruccin como la siguiente:
Application.Workbooks ("Libro1.xlsx").Actvate
La coleccin de objetos Workbooks nos permitir acceder a todos los libros que hayamos abierto dentro de nuestra aplicacin VBA.
Esta instruccin accede a la hoja con el ndice 1 y coloca el valor Hola Mundo en la celda A1. Tambin podemos acceder a una hoja a travs de su nombre en caso de que lo conozcamos:
Application.Workbooks (1).Worksheets ("Hoja1").Range ("A1").Value = "Hola"
Worksheets.Add
Observa que no he iniciado la instruccin anterior con el objeto Applications, ni tampoco est precedida por el objeto Workbooks. Esta es una sintaxis aceptable dentro de VBA e indica que se agregar una nueva hoja al libro que est activo en ese momento. Este es un mtodo abreviado que podemos utilizar si estamos seguros de que el libro activo es el libro al que deseamos agregar una nueva hoja. De lo contrario, podemos especificar tota la ruta completa:
Application.Workbooks ("Libro1.xlsx").Worksheets.Add
Ahora ya sabemos que VBA tiene un objeto para representar los libros de Excel (Workbook) y otro objeto para representar las hojas de un libro (Worksheets). Ambos tipos de objetos son almacenados dentro de colecciones de objetos que son conocidas como Workbooks, que se refiere a la coleccin de libros que se han abierto y Worksheets que es la coleccin de hojas que pertenecen a un determinado libro.
Application.Sheets.Count
Es muy importante mencionar que la coleccin Sheets se referir al libro de Excel que se encuentre activo en el momento de ejecutar esta instruccin. Las colecciones Columns y Rows nos permitirn acceder a las columnas y filas de la hoja activa.
ActiveWorkbook. Devuelve un objeto Workbook que representa el libro de Excel activo. ActiveSheet. Regresa un objeto Worksheets que representa a la hoja que est actualmente seleccionada (activa). ActiveCell. Devuelve un objeto Range que representa la celda activa dentro de la hoja activa en el libro de Excel activo. ThisWorkbook. Esta propiedad devolver un objeto Workbook que representar el libro que contiene la macro que est siendo ejecutada.
Esta instruccin har que Excel muestre un cuadro de dilogo pidiendo al usuario ingresar el nmero de impresiones que desea realizar. El nmero ingresado por el usuario se guardar en la variable Impresiones.
En la ruta que observas arriba [Usuario] es el nombre de tu usuario en el equipo. Adems la carpeta AppData es una carpeta oculta por lo que no la encontrars directamente en el navegador de Windows a menos que habilites la vista de archivos ocultos.
Cuando guardes el archivo Excel vers un mensaje preguntando si deseas guardar los cambios realizados al libro de macros personal, para lo cual debers pulsar el botn Guardar.
Por debajo del nombre VBAProject (PERSONAL.XLSB) encontrars la carpeta Mdulos y dentro de ella encontrars todas las macros que se hayan guardado en el libro de macros personal organizadas en mdulos. Si deseas eliminar algn mdulo solamente debers hacer clic derecho sobre l y seleccionar la opcin Quitar Mdulo
En este ejemplo he intentado utilizar la palabra Next en lugar del tipo de dato de la variable. Es por eso que el Editor de Visual Basic muestra un mensaje de error de compilacin. La palabra Next es parte del lenguaje VBA pero la he utilizado en el lugar inapropiado y por eso obtengo el error. De igual manera el Editor de Visual Basic notar si hemos utilizado una palabra que no pertenece al lenguaje VBA. En el siguiente ejemplo he confundido la instruccin Mod (mdulo) y he colocado la palabra Mud.
Estos son solo unos ejemplos de errores de sintaxis que podemos cometer pero como lo he mencionado antes, el Editor de Visual Basic nos alertar sobre dichos errores y podremos detectarlos y corregirlos.
Intentar realizar una operacin no permitida por el ordenador. Por ejemplo una divisin entre cero o intentar sumar una cadena de texto y un valor Doubl. Intentar utilizar una librera de cdigo que no est accesible en ese momento. Utilizar un bucle con una condicin que nunca se cumple. Tratar de asignar un valor que est fuera de los lmites de una variable.
Existen muchas otras razones por las que podemos tener un error en tiempo de ejecucin. La mejor manera de prevenir estos errores ser haciendo una depuracin de nuestro cdigo pero eso ser tema de otro artculo. Lo importante por ahora es estar consiente de estos dos tipos de errores en VBA y saber que debemos estar atentos para corregir todos los errores de sintaxis de nuestro cdigo y minimizar al mximo los posibles errores de ejecucin.
Esto har que se inicie la ejecucin en la primera lnea, la cual se mostrar con un fondo amarillo indicando que esa instruccin es la que est por ejecutarse.
Para continuar con la depuracin debemos pulsar de nuevo la tecla F8 hasta llegar al final del cdigo. Cada vez que pulsamos la techa F8 suceden las siguientes cosas: 1. Excel ejecuta la instruccin que est sombreada en color amarillo 2. Si Excel encuentra un error en la instruccin, entonces enviar un mensaje de error. 3. Por el contrario, si no hubo error en dicha instruccin, entonces Excel marcar en amarillo la siguiente instruccin a ejecutar. De esta manera podemos ejecutar cada una de las lneas de nuestro cdigo VBA y validar que no exista error alguno. Regresando a nuestro ejemplo, al momento de llegar a la tercera instruccin y pulsar la tecla F8, Excel enviar el siguiente mensaje de error:
El mensaje nos advierte que el objeto no admite esa propiedad o mtodo y se est refiriendo al objeto Range en donde el mtodo Value no est escrito de manera correcta y por lo tanto el depurador de VBA no reconoce dicha propiedad. Pulsa el botn Aceptar para cerrar el cuadro de dilogo y poder corregir el error en el cdigo. Ya hemos hablado sobre los diferentes tipos de errores en VBA y la depuracin nos ayudar a probar nuestro cdigo y a encontrar la gran mayora de los errores que podamos tener. Es probable que al principio veas a la depuracin como un trabajo muy exhaustivo pero cuando tus programas y macros comiencen a crecer entonces vers todos los beneficios que nos da la depuracin de macros en Excel.
Dim x As Integer x = 6
En la primera instruccin estoy declarando la variable con el nombre x y estoy indicando que ser del tipo Integer. Declarar una variable significa avisar a Excel sobre la existencia de dicho repositorio para guardar informacin. En la segunda instruccin asigno el valor 6 a la variable x.
guardar nmeros decimales, si solo guardamos un nmero entero quedar especio sin utilizar. Por lo tanto es recomendable utilizar siempre el tipo de variable adecuado para cualquier nmero.
Para iniciar con esta revisin, debes colocar un botn de comando dentro de una hoja de Excel y despus hacer doble clic sobre l para introducir el cdigo.
La funcin Left
La funcin Left en VBA nos ayuda a extraer un nmero determinado de caracteres a la izquierda de la cadena de texto.
La funcin Right
La funcin Right nos permite extraer caracteres a la derecha de una cadena de texto. Observa el siguiente cdigo:
En esta funcin la cuenta de caracteres se hace de derecha a izquierda siendo el ltimo carcter de la cadena de texto el primero que extraer la funcin Right. Para este ejemplo he pedido los ltimos 5 caracteres a la derecha de la cadena de texto:
La funcin Len
La funcin Len nos ayuda a conocer la longitud de una cadena de texto, es decir, la cantidad de caracteres que conforman a una cadena.
La funcin Len contar cada uno de los caracteres de la cadena y regresar un nmero:
La funcin InStr
La funcin InStr devuelve la posicin de un carcter dentro de la cadena. Supongamos que quiero encontrar la posicin de la letra M dentro de la cadena que contiene el valor Hola Mundo.
Es importante resaltar que la funcin InStr es sensible a maysculas y minsculas. Observa cmo he especificado buscar la letra M (mayscula) y el resultado de la funcin es el siguiente:
La funcin InStr encontr la letra M en la posicin nmero 6 comenzando desde la izquierda. Si en lugar de la letra M busco la letra m (minscula), la funcin InStr devolver el valor 0 (cero) indicando que no ha encontrado dicha letra. Adems de indicar letras individuales en la funcin InStr, tambin podemos especificar palabras completas por ejemplo:
La funcin Mid
Con la funcin Mid podemos extraer una subcadena de otra cadena de texto con tan solo especificar la posicin inicial de la subcadena y su longitud. Observa el siguiente ejemplo:
La funcin Mid se mover a la posicin 15 de la cadena y a partir de ah contar 7 caracteres y devolver como resultado la cadena comprendida entre ambas posiciones. En nuestro ejemplo, la palabra funcion es la que se encuentra entre dichas posiciones.
Las funciones de texto en VBA nos ayudarn a manipular adecuadamente las cadenas de texto y podremos obtener los resultados que necesitamos.
En el primer paso se hace la declaracin de las variables que utilizar en el resto del cdigo. En el segundo paso asigno el valor de la celda A1 a la variable calificacin. El tercer paso contiene la declaracin If-Then y que prueba Si el valor de la variable calificacin es mayor o igual a 60. En caso de ser verdadero Entonces se asigna el valor Aprobado a la variable resultado. El ltimo paso es asignar el valor de la variable resultado a la celda B2.
La declaracin Else
Parece que todo funciona muy bien en el cdigo anterior pero an lo podemos mejorar agregando la declaracin Else de manera que tengamos una declaracin de la forma If-ThenElse. Esta variante nos permite hacer la siguiente evaluacin: Si se cumple la condicin Entonces haz esto De lo contrario haz otra cosa. La declaracin Else en VBA nos permite indicar otro bloque de instrucciones que se deben ejecutar en caso de que la condicin sea falsa. De esta manera podemos tomar una accin determinada en caso de que la condicin se cumpla o en caso de que no se cumpla. Ahora modificar el ejemplo anterior para asegurarme de que en caso de que la condicin de calificacin mayor o igual a 60 no se cumpla se despliegue el resultado reprobado. Observa el siguiente cdigo.
En el tercer paso puedes observar la declaracin If-Then-Else. Ahora observa el efecto de este cambio al momento de ejecutar el cdigo:
Por ltimo quiero que observes que en este segundo ejemplo la declaracin If-Then-Else termina con la declaracin End If. Siempre que utilicemos la declaracin If-Then o la declaracin If-Then-Else debemos terminar con End If. La nica ocasin donde no se termina con End If es cuando la declaracin If-Then se puede colocar en una sola lnea como es el caso del primer ejemplo de este artculo.
Seleccionar un rango
Para seleccionar un rango de celdas lo ms conveniente es utilizar el objeto Range de la siguiente manera:
Range("A1:D5").Select
El objeto Cells no nos permite seleccionar un rango porque solamente podemos especificar una celda a la vez.
Es mucho ms comn encontrarse el objeto Range en las aplicaciones VBA, sin embargo el objeto Cells ofrece una ventaja que debemos considerar cuando necesitamos hacer un recorrido programtico por varias celdas ya que ser muy sencillo especificar las filas y columnas utilizando una variable numrica.
La instruccin For-Next
El bucle For-Next es una de las instrucciones ms tiles al programar en VBA. La sintaxis de esta instruccin es la siguiente:
For inicializacin de variable To lmite {Conjunto de instrucciones que se repetirn} Next incrementar variable
Inicializacin de variable: Ya que la instruccin For Next repite un conjunto de instrucciones un nmero de veces especfico, debemos inicializar una variable que ir contando cada una de las repeticiones. Es comn encontrar la instruccin escrita como For i = 1 lo cual indica que la variable i llevar la cuenta de las repeticiones que deseamos que inicien en 1. Lmite: Adems de inicializar la variable que llevar la cuenta de las repeticiones, debemos especificar un lmite donde se detendr el ciclo. Este lmite es indicado con la instruccin To. De esta manera, si deseamos hacer un bucle que vaya desde 1 hasta 5 la instruccin la escribiremos como For i = 1 To 5. Incrementar variable: El final del conjunto de instrucciones se indica con la instruccin Next y que va seguida del nombre de la variable que lleva la cuenta para incrementar su valor en uno. As podemos terminar el bucle con la instruccin Next i.
Con este bucle provocaremos que se muestre una ventana de dilogo 5 veces y en cada una de ellas se mostrar el valor actual de la variable i que comenzar con 1 y terminar con 5. Observa el resultado:
Ya que la variable i comienza con el valor 1, el primer cuadro de dilogo muestra el mensaje i = 1, despus i = 2 y as sucesivamente hasta llegar al lmite.
El bucle For-Next en VBA nos ayudar a crear ciclos que ejecutarn un conjunto de instrucciones hasta alcanzar el lmite que hayamos especificado
Al ejecutar este cdigo obtendremos el resultado Aprobado ya que ambos exmenes tienen una calificacin mayor a 70:
De esta manera comprobamos que el operador lgico And nos ayuda a forzar que ambas condiciones se cumplan. En cambio, si el valor de una de las celdas es menor a 70, entonces tendremos un resultado diferente:
El operador lgico And devolver el valor verdadero solamente cuando ambas condiciones se cumplan y ser suficiente con que una de ellas no se cumpla para obtener un resultado negativo.
El operador lgico Or
El operador lgico Or lo traducimos como O y nos permitir saber si al menos una de las condiciones se cumple, es decir, si la condicin1 O la condicin2 se cumplen. Si cambiamos un poco el ejemplo anterior y decimos que es suficiente que alguna de las dos calificaciones sea mayor a 70 para que el estudiante sea aprobado, entonces podemos modificar el cdigo de la siguiente manera:
La nica manera en que el operador lgico Or nos devuelva un valor falso es que ninguna de las condiciones se cumpla. En nuestro ejemplo, el alumno estar reprobado solamente cuando ambas calificaciones sean menores a 70:
Podemos concluir que al evaluar dos condiciones, los operadores And y Or se comportarn de la siguiente manera:
Eventos en VBA
Los eventos en VBA nos ayudan a monitorear las acciones que realizan los usuarios en Excel de manera que podamos controlar la accin a tomar cuando el usuario hace algo especfico como el activar una hoja o hacer clic en alguna celda.
WorkbookOpen: El usuario abre un libro de Excel. WorkbookActivate: El usuario activa un libro de Excel. SelectionChange: El usuario cambia la seleccin de celdas en una hoja.
Para descubrir los eventos que tiene un objeto es suficiente con abrir el Editor de Visual Basic y posteriormente el Examinador de objetos (F2). En el panel izquierdo se mostrarn los objetos y en el panel derecho las propiedades, mtodos y eventos de dicho objeto. Podrs distinguir los eventos porque tienen un icono en forma de rayo (color amarillo):
Esto crear automticamente la subrutina para el evento SelectionChange pero podemos fcilmente crear otro evento seleccionndolo de la lista de Procedimientos. Para este ejemplo crear el evento Activate:
Una vez creada la subrutina para el evento Activate solamente insertar el cdigo para que se muestre el mensaje dentro del cuadro de dilogo:
Ahora que hemos definido una accin asociada al evento Activate de la Hoja2, el mensaje se mostrar cada vez que actives la Hoja2. Los eventos en VBA son de mucha utilidad porque nos ayudan a controlar el momento exacto en que deseamos ejecutar algn bloque de cdigo al iniciarse alguna accin por el usuario.
Arreglos en VBA
Los arreglos en VBA pueden ser entendidos como un grupo de variables contenidas dentro de otro repositorio. Dentro de un arreglo podemos referirnos a un valor especfico (elemento) utilizando su posicin (ndice). Para comprender mejor lo que es un arreglo observa la siguiente imagen:
Un arreglo es una coleccin de casillas que contendrn variables individuales. Casa casilla tendr un nmero de ndice el cual nos permitir asignar u obtener el valor que contiene.
Paises(1) = "Argentina" Paises(2) = "Colombia" Paises(3) = "Espaa" Paises(4) = "Mxico" Paises(5) = "Per"
MsgBox Paises(3)
El resultado de esta instruccin ser el siguiente:
En este ejemplo las variables fechaActual y horaActual contienen la fecha y horas actuales respectivamente.
Al trabajar con fechas podremos obtener el mes utilizando la funcin Month y para obtener el da la funcin Day.
El resultado es el siguiente:
Para obtener el minuto y el segundo podremos utilizar las funciones Minute y Second.
El nico argumento de la funcin DateValue es la cadena de texto que convertir en fecha. El resultado de esta conversin es el siguiente:
El primer argumento de la funcin DateAdd determina la unidad de tiempo que ser sumada. En este ejemplo especifiqu d para indicar das, pero podemos utilizar otras medidas de tiempo:
Las fechas y horas son un tipo de dato muy comn con el que seguramente tendrs que trabajar al crear tus macros. Es importante que aprendas a utilizar las funciones VBA que nos permitirn manipular adecuadamente la informacin
Funciones VBA
El lenguaje de programacin VBA contiene un nmero considerable de funciones que podemos utilizar para construir cdigo en Excel. Cuando ests escribiendo cdigo, puedes introducir la palabra VBA seguida de un punto y vers una lista desplegable de estas funciones. La siguiente tabla provee una descripcin breve de algunas de las funciones VBA ms utilizadas.
FUNCIN Abs Asc CBool CByte CCur CDate CDbl CDec Choose Chr CInt CLng CreateObject CStr CurDir CVar Regresa el valor absoluto de un nmero
DESCRIPCIN
Obtiene el valor ASCII del primer carcter de una cadena de texto Convierte una expresin a su valor booleano Convierte una expresin al tipo de dato Byte Convierte una expresin al tipo de dato moneda (Currency) Convierte una expresin al tipo de dato fecha (Date) Convierte una expresin al tipo de dato doble (Double) Convierte una expresin al tipo de dato decimal (Decimal) Selecciona un valor de una lista de argumentos Convierte un valor ANSI en valor de tipo texto Convierte una expresin en un dato de tipo entero (Int) Convierte una expresin en un dato de tipo largo (Long) Crea un objeto de tipo OLE Convierte una expresin en un dato de tipo texto (String) Regresa la ruta actual Convierte una expresin en un dato de tipo variante (Var)
Date DateAdd DateDiff DatePart Date Serial Date Valu Day Dir EOF FileDateTime FileLen
Regresa la fecha actual del sistema Agrega un intervalo de tiempo a una fecha especificada Obtiene la diferencia entre una fecha y un intervalo de tiempo especificado Regresa una parte especfica de una fecha Convierte una fecha en un nmero serial Convierte una cadena de texto en una fecha Regresa el da del mes de una fecha Regresa el nombre de un archivo o directorio que concuerde con un patrn Regresa verdadero si se ha llegado al final de un archivo Regresa la fecha y hora de la ltima modificacin de un archivo Regresa el nmero de bytes en un archivo
FormatCurrency Regresa un nmero como un texto con formato de moneda FormatPercent Hour IIf InputBox InStr Regresa un nmero como un texto con formato de porcentaje Regresa la hora de un valor de tiempo Regresa un de dos partes, dependiendo de la evaluacin de una expresin Muestra un cuadro de dilogo que solicita la entrada del usuario Regresa la posicin de una cadena de texto dentro de otra cadena Regresa la pocisin de una cadena de texto dentro de otra cadena pero empezando desde el InStrRev final Regresa la parte entera de un nmero Regresa verdadero si la variable es una fecha Regresa verdadero si la variable est vaca Regresa verdadero si la expresin es un valor de error Regresa verdadero si la expresin es un valor nulo
IsNumeric Join LCase Left Len LTrim Mid Minute Month MsgBox Now Replace Space Split Str Right Rnd Round RTrim Second StrComp StrReverse Time
Regresa verdadero si la variable es un valor numrico Regresa una cadena de texto creada al unir las cadenas contenidas en un arrreglo Regresa una cadena convertida en minsculas Regresa un nmero especfico de caracteres a la izquierda de una cadena Regresa la longitud de una cadena (en caracteres) Remueve los espacios a la izquierda de una cadena Extrae un nmero especfico de caracteres de una cadena de texto Regresa el minuto de una dato de tiempo Regresa el mes de una fecha Despliega un cuadro de dialogo con un mensaje especificado Regresa la fecha y hora actual del sistema Reemplaza una cadena de texto con otra regresa una cadena de texto con el nmero de espacios especidicados Regresa un arreglo formado for cadenas de texto que formaban una sola cadena Regresa la representacin en texto de un nmero Regresa un nmero especificado de carecteres a la derecha de una cadena de texto Regresa un nmero aleatorio entre 0 y 1 Redondea un nmero a una cantidad especfica de decimales Remueve los espacios en blanco a la derecha de una cadena de texto Regresa los segundos de un dato de tiempo Compara dos cadenas de texto Invierte el orden de los caracteres de una cadena Regresa el tiempo actual del sistema
Timer Time Valu Trim TypeName Ucase Val Weekday Weekday Name Year
Regresa el nmero de segundos desde la media noche Convierte una cadena de texto a un nmero de serie de tiempo Remueve los espacios en blanco al inicio y final de una cadena de texto Obtiene el nombre del tipo de dato de una variable Convierte una cadena de texto en maysculas Regresa el nmero contenido en una cadena de texto Regresa un nmero que representa un da de la semana Regresa el nombre de un da de la semana Obtiene el ao de una fecha
Valor de retorno
Como mencion al principio, la caracterstica principal de una funcin es que puede regresar un valor. Es por eso que al definir una funcin se debe indicar el tipo del valor de retorno que tendr dicha funcin. En este caso el valor de retorno ser de tipo Double y se est especificado por las palabras As Double que aparecen despus de los parntesis.
Retornando el valor
Una vez que se han hecho los clculos necesarios, es importante regresar el valor. Para hacerlo es indispensable igualar el nombre de la funcin al valor o variable que contiene el valor que se desea regresar. En nuestro ejemplo, la variable resultado es la que contiene la suma de todas las celdas por lo que se iguala con el nombre de la funcin en la lnea MiSuma = resultado.
Aunque la funcin MiSuma hace lo mismo que la funcin de Excel SUMAR, nos ha servido de ejemplo para introducir el tema de las funciones en VBA. Con este ejemplo tan sencillo hemos creado nuestra primera funcin VBA.
Justo por debajo de los controles de formulario podrs observar el grupo de controles ActiveX pero sus diferencias y similitudes las discutiremos en otro artculo. Por ahora nos enfocaremos solamente en los controles de formulario.
Barra de desplazamiento. Al hacer clic en las flechas se va desplazando la barra dentro de un intervalo predefinido. Botn. El botn nos permite ejecutar una macro al momento de hacer clic sobre l. Botn de opcin. Nos permite una nica seleccin dentro de un conjunto de opciones. Casilla de verificacin. Permite la seleccin o no seleccin de una opcin. Control de nmero. Nos ayuda a aumentar o disminuir un valor numrico. Cuadro combinado. Es una combinacin de un cuadro de texto con un cuadro de lista. Cuadro de grupo. Agrupa varios controles dentro de un rectngulo. Cuadro de lista. Muestra una lista de valores de los cuales podemos elegir una sola opcin o mltiples opciones de acuerdo a la configuracin del control. Etiqueta. Permite especificar un texto o breves instrucciones en el formulario.
son el Campo de texto, el Cuadro combinado de lista y el Cuadro combinado desplegable. Sin embargo podemos alcanzar funcionalidad similar utilizando controles ActiveX.
La diferencia ms significativa entre ambos es la manera en como podemos obtener informacin de los controles al momento de interactuar con el usuario. Los controles de formulario solamente respondern despus de que el usuario ha interactuado con ellos, como despus de haber pulsado el botn. Por el contrario, los controles ActiveX responden de manera continua a las acciones del usuario lo cual nos permite realizar acciones como cambiar el tipo de puntero del mouse que se muestra al colocar el puntero del ratn sobre el botn.
Antes de poder ver las propiedades de un control ActiveX debemos pulsar el botn Modo Diseo el cual nos permitir seleccionar el control y posteriormente ver sus propiedades. Cada tipo de control ActiveX mostrar una ventana de Propiedades con sus propias caractersticas. A continuacin un ejemplo de la ventana Propiedades para un botn de comando ActiveX:
Esto mostrar el Editor de Visual Basic con una subrutina para el evento Click() donde podremos escribir nuestro cdigo.
En la lista desplegable de la derecha podemos observar la lista de eventos disponibles para nuestro control ActiveX y para los cuales podemos escribir cdigo VBA. Al seleccionar cualquiera de dichos eventos se insertar una nueva subrutina que podremos utilizar. Son precisamente la gran cantidad de eventos disponibles para los controles ActiveX lo que los hace controles muy poderosos que podemos utilizar en nuestros formularios.
El puntero del ratn se convertir en una cruz la cual nos permitir dibujar el cuadro de texto sobre la hoja de Excel. Una vez dibujado el cuadro de texto podrs hacer clic derecho sobre l y seleccionar la opcin Propiedades para conocer el nombre que la ha sido asignado.
Tambin puedes ver las propiedades de cualquier control seleccionndolo primero y pulsando el botn Propiedades que se encuentra dentro del grupo Controles de la ficha Programador.
Range("A1").Value = TextBox1.Text
El valor de la celda ser el mismo que el del cuadro de texto.
TextBox1.Text = ""
En este ejemplo he especificado que los valores sean tomados del rango A1:A6, lo cual da como resultado un cuadro de lista con los valores especificados en dicho rango:
De esta manera cuando se abra el libro se agregarn las opciones al cuadro de lista llamado ListBox1.
De esta manera, cada vez que hagamos una seleccin de alguna de las opciones del cuadro de lista se ver reflejado su valor en la celda asociada:
Como resultado obtendr los valores de las celdas como elementos del Cuadro combinado:
Si quieres evitar que el usuario introduzca sus propios valores existen dos opciones:
Utilizar el control ActiveX Cuadro de lista en lugar del Cuadro combinado Utilizar el Cuadro combinado pero validar la opcin seleccionada con cdigo VBA de manera que nos aseguremos que el usuario ha seleccionado una opcin de la lista. Un ejemplo de cdigo de validacin es el siguiente:
Cuando selecciones un elemento del cuadro combinado se reflejar dicha seleccin en la celda indicada en la propiedad LinkedCell:
ejemplo, si deseo que el control muestre el texto Mayor de edad debo hacer el cambio de la siguiente manera:
La otra propiedad de una casilla de verificacin que tal vez quieras modificar ser la propiedad Value que de manera predeterminada tendr el valor False lo cual indica que el control se mostrar desmarcado. Si deseas que el control se muestre marcado de manera predeterminada, debes poner el valor True en la propiedad Value:
Esta lnea de cdigo coloca el valor de la casilla de verificacin en la celda C4. De esta manera, al seleccionar la casilla de verificacin obtendr el siguiente resultado:
Para validar en VBA si la casilla de verificacin tiene un valor u otro podemos utilizar un cdigo como el siguiente:
Para insertar un botn de opcin hacemos clic en el comando Insertar de la ficha Programador.
Un solo botn de opcin no hace mucho sentido, as que siempre agregamos dos o ms botones de opcin para permitir que usuario haga una seleccin de cualquiera de ellos.
Una vez que se ha agregado un segundo botn de opcin podrs notar que al seleccionar uno de ellos se desmarcarn todos los dems.
La propiedad Caption
De manera predeterminada Excel colocar el botn de opcin con un nombre como OptionButton1. Para cambiar este texto debemos editar la propiedad Caption del botn de opcin.
La propiedad Value es la que nos indica si el control est seleccionado, en cuyo caso, la propiedad ser igual a True. Para este ejemplo, al validar que el botn de opcin est seleccionado, se mostrar un cuadro de dilogo con un mensaje sobre la opcin seleccionada.
Formularios en VBA
Los formularios en VBA no son ms que un cuadro de dilogo de Excel donde podremos colocar controles que nos ayudarn a solicitar informacin del usuario. Podremos colocar cajas de texto, etiquetas, cuadros combinados, botones de comando, etc.
Los formularios de Excel son creados desde el Editor de Visual Basic donde debemos seleccionar la opcin de men Insertar y posteriormente la opcin UserForm.
Inmediatamente se mostrar un formulario en blanco y de igual manera podrs observar el Cuadro de herramientas:
Si no ves el Cuadro de herramientas puedes seleccionar el men Ver y la opcin Cuadro de herramientas.
El texto de las etiquetas se modifica en la propiedad llamada Caption. Para realizar este cambio solamente selecciona el control y se mostrar la ventana de Propiedades donde podrs hacer la modificacin. De igual manera el texto desplegado en los botones de comando se modifica en su propiedad Caption.
Para agregar este cdigo puedes hacer doble clic sobre el control. La sentencia Unload Me cerrar el formulario.
A diferencia del botn Cancelar, el botn Aceptar colocar los datos de las cajas de texto en las celdas A1, B1 y C1. El cdigo utilizado es el siguiente:
Private Sub CommandButton1_Click() Worksheets("Hoja1").Range("A1").Value = Me.TextBox1.Value Worksheets("Hoja1").Range("B1").Value = Me.TextBox2.Value Worksheets("Hoja1").Range("C1").Value = Me.TextBox3.Value End Sub
Al pulsar el botn Aceptar se transferirn los valores de los controles TextBox hacia las celdas de la Hoja1.
Probar el formulario
Observa cmo cada uno de los botones realiza la accin correcta al pulsarlos: