Utilidad de una macro

Anteriormente definimos a las macros como algo que nos permite expandir e incrementar las prestaciones de la hoja Excel. ¿Cuáles serían algunos ejemplos de esto? Bueno, los ejemplos los iremos viendo en este manual, pero a grandes rasgos podemos comentar que las 4 grandes "áreas" donde se aplican las macros son:

1. Automatización de procesos ¿Cansado de realizar tareas repetitivas o manuales en Excel? Las macros nos permiten grabar o definir nuestros procesos y luego ejecutarlos automáticamente con 1 clic. Nos pueden ahorrar muchas horas de trabajo! Con las macros podrás hacer tu trabajo mucho más rápido. Hemos visto casos extremos de trabajos en Excel que llevaban 6 o 7 horas de armado manual y luego pudieron ser automatizados en una macro que hacía todo en pocos segundos!

2. Creación de funciones a medida ¿Deseas crear nuevas funciones y cálculos personalizados? Las funciones y fórmulas Excel son la esencia de la hoja de cálculos. Podemos programar funciones a medida que hagan exactamente lo que nosotros queremos. Y esas funciones se comportarán igual que las de Excel (aparecerán en el menú de funciones en la categoría que nosotros indiquemos, tendrán sus respectivos argumentos, etc).

3. Creación de nuevos comandos, complementos y menús Excel trae una gran cantidad de comandos y menús predefinidos que nos asisten para las operaciones más habituales. Las macros nos permiten crear nuestros propios comandos y menús personalizados, e incorporarlos al Excel. La utilidad de los mismos depende tan solo de nuestras necesidades. Los complementos Excel también están creados con macros.

4. Creación de aplicaciones a medida Excel es utilizado en diversos campos y por una gran cantidad de usuarios. Las macros te permitirán construir complejas y elegantes aplicaciones para cualquier uso que quieras darles. El límite solo es tu imaginación. Una aplicación Excel consiste en algo más que una simple plantilla con datos y fórmulas. Una aplicación Excel es un verdadero programa de software con una serie de características que lo hacen utilizable por cualquier usuario sin que el mismo tenga que entender la lógica "exceliana" que hay por detrás.

5. Formularios Finalmente, con las macros podremos armar todo tipo de formulario para entrada y gestión de datos. Dichos formularios pueden tener botones, listas desplegables, y todas las herramientas que encuentras en formularios profesionales. Además, puedes hacer que los datos del formulario se vayan guardando en una tabla Excel para posteriores análisis y reportes!

Barra de herramientas
La barra de herramientas de macros es considerablemente diferente entre Excel 2.003 e inferior y Excel 2.007. Excel 2.003 El primer paso para empezar a programar macros es familiarizarnos con las herramientas que nos ofrece Excel para programarlas. Excel posee una Barra de Herramientas de Macros o VBA. Puedes acceder a la misma desde el menú Herramientas > Macros. Dicho menú se ve como en la fotografía a continuación (fíjate que también se indican las combinaciones de teclas para acceder a dichas opciones).

También tienes la opción de dejar siempre visible dicha barra de herramientas. Puedes hacer esto desde el menú Ver > Barras de Herramientas > Visual Basic. Veras como aparece una nueva barra de herramientas de macros. Puedes ubicar esta barra de herramientas donde te sea más cómodo.

Excel 2.007 En la nueva versión de Excel, las opciones del menú de macros se encuentran en la ficha programador,.

Si no tienes visible la ficha Programador, puedes activarla de la siguiente forma 1. Presiona el botón de Office (botón redondo en la parte superior izquierda de la pantalla) 2. En la parte inferior del menú que se despliega, presiona el botón Opciones de Excel 3. En la lista de opciones Más Frecuentes, selecciona la casilla de Mostrar ficha programador en la cinta de opciones.

Editor VBA
El Editor de Visual Basic es la aplicación que trae Excel desde donde se escriben y guardan las macros. Tienes 3 formas de acceder al editor: Excel 2.003 1. Desde el menú Herramientas > Macros > Editor de Visual Basic 2. Desde el botón Editor de Visual Basic de la Barra de Herramientas Visual Basic. 3. Desde el teclado (Teclas de Método Abreviado): ALT+F11 (El acceso a la Barra de Herramientas de la opción 1 y 2 los explicamos en la sección anterior) Excel 2.007 1. Desde la ficha Programador > botón Visual Basic 2. Desde el teclado (Teclas de Método Abreviado): ALT+F11 (El acceso a la ficha programador lo explicamos en la sección anterior) Nuestra forma preferida de acceder al editor de macros es con las teclas ALT + F11 Una vez que hayas accedido al editor de visual basic verás algo similar a la figura siguiente (no importa si no lo ves estrictamente similar, eso dependerá de las ventanas

que tengas visibles y ocultas). Puedes mostrar u ocultar estas ventanas desde el menú Ver.

El editor contiene 4 ventanas principales: La Ventana Proyecto (parte izquierda superior) La Ventana de Código (parte derecha) La Ventana Propiedades (parte izquierda inferior) La Ventana Inmediato (parte inferior derecha) Ventana Proyecto - VBA Project: esta ventana muestra los libros excel (xls) o los complementos (xla) abiertos. Usualmente verás nombres del tipo "VBAProject" y entre paréntesis el nombre del archivo o complemento excel. Veamos el caso de VBAProject (Libro1). Simplemente significa que tienes abierto un libro Excel llamado Libro 1. Luego cuelgan 3 carpetas más: Hoja1 (Hoja1), ThisWorkbook y Modulo (no importa si ves todos estos elementos ahora, luego te enseñaremos como activarlos). Estas carpetas es donde habitan las macros. Haciendo doble clic en ellas activarás la ventana donde se escriben las macros.

Ventana de Código: esta es el lugar donde escribiremos el código propiamente dicho de las macros. Como no hemos escrito ninguna macro todavía veremos la hoja en blanco. Recuerda bien estas dos ventanas, ya que las usaremos a continuación para escribir nuestra primera macro.

Como verás el Editor de VB tiene muchas ventanas. Pero de momento solo nos interesan las dos ventanas que te indicamos anteriormente: la Ventana Proyecto – VBA Project y la Ventana de Código donde se escribe el código de las macros. La Ventana de Propiedades e Inmediato las dejaremos para más adelante.

Recuerda: presionando las teclas ALT+F11 puedes ir desde Excel al Editor o desde el Editor al Excel de forma alterna (debes mantener presionada la tecla ALT y presionar F11 repetidas veces, verás como pasas de Excel al editor y viceversa).

Si estas en el editor y quieres regresar a la hoja Excel también puedes utilizar el ícono de Excel que se encuentra en el menú superior del editor (primer ícono de la izquierda, con la X de Excel).

Escribir una macro
Nuestro objetivo fue crear una macro que escribiera el valor 1500 en la celda A1 de la Hoja1 de Excel. Como era una macro sencilla decidimos escribir el código manualmente. Vamos a resumir todos los pasos que hicimos hasta aquí: 1. Creamos un nuevo libro Excel y lo guardamos con el nombre Libro1. 2. Accedimos el Editor de Visual Basic con las teclas ALT+F11 3. En la Ventana Proyecto, en VBAProject (Libro1), hicimos doble clic en Hoja1 (Hoja1). 4. En la Ventana de Código escribimos textualmente el siguiente código: ' Esta macro escribe el 1500 en la celda A1 Sub MiPrimeraMacro() Range("A1").Value = 1500 End Sub

Todo quedó como se aprecia en la foto...

5. Finalmente abrimos el menú de macros con ALT+F8, seleccionamos MiPrimeraMacro desde la lista de nombres y presionamos Ejecutar.

6. El resultado es que en la celda A1 se vuelve a escribir el valor 1500, que fue justamente lo que le indicamos a la macro que haga.

Recuerda: en estos 5 pasos hemos visto rápidamente como escribir una macro sencilla y ejecutarla. En las secciones siguientes iremos profundizando más estos temas, sobre todo el referente el código de la macro.

Ejecutar la macro
Excel 2.003 Si ya tienes escrita la macro en el editor, ahora podrás que ejecutarla, o sea hacer que funcione. Tienes 2 formas de hacer esto: A. Ejecutar la macro desde el mismo Editor Si te posicionas en cualquiera de las líneas de código de la macro y luego presionas la tecla F5 la macro se ejecutará (para ver el resultado puedes volver a la hoja excel con ALT+F11). B. Ejecutar la macro desde Excel Otra forma de ejecutar la macro es desde el mismo Excel. Puedes hacerlo desde el menú Herramientas > Macros > Macro.

Se abrirá un cuadro que contiene una lista con los nombres de las macros creadas. Selecciona MiPrimeraMacro y haz clic en Ejecutar.

Si has seguido cualquiera de los 2 pasos anteriores ya podrás ver el resultado de la macro. ¿Qué hizo la Macro? Si te fijas en el Libro 1, Hoja 1, Celda A1 verás que se escribió el valor 1.500. Eso es exáctamente lo que queríamos hacer con nuestra macro, así que tarea cumplida. Hemos escrito un valor en una celda excel desde una macro ! Excel 2.007 Si ya tienes escrita la macro en el editor, ahora podrás que ejecutarla, o sea hacer que funcione. Tienes 2 formas de hacer esto: A. Ejecutar la macro desde el mismo Editor Si te posicionas en cualquiera de las líneas de código de la macro y luego presionas la tecla F5 la macro se ejecutará (para ver el resultado puedes volver a la hoja excel con ALT+F11). B. Ejecutar la macro desde Excel Otra forma de ejecutar la macro es desde el mismo Excel. Esto se hace desde la ficha Programador > Macros

Se abrirá un cuadro que contiene una lista con los nombres de las macros creadas. Selecciona MiPrimeraMacro y haz clic en Ejecutar.

Si has seguido cualquiera de los 2 pasos anteriores ya podrás ver el resultado de la macro. ¿Qué hizo la Macro? Si te fijas en el Libro 1, Hoja 1, Celda A1 veras que se escribió el valor 1.500. Eso es exactamente lo que queríamos hacer con nuestra macro, así que tarea cumplida. Hemos escrito un valor en una celda excel desde una macro !

Grabar una macro
Excel trae incorporada una grabadora de macros. La misma funciona de forma muy fácil. Encendemos la grabadora, ejecutamos las acciones que nos interesan sobre la hoja excel, paramos la grabadora y…listo!. Excel escribe de forma automática el código VBA de la macro. Ahora podemos hacer un experimento muy interesante. Repetir nuestra primera macro, pero esta vez haciéndola con la grabadora de macros. Sigue los pasos a continuación: Excel 2.003 1. Vamos a grabar la macro 1.1 Vé al menú Herramientas > Macros 1.2 Selecciona la opción Grabar nueva macro…

1.3 Se abrirá un cuadro de diálogo como el que se muestra a continuación.

1.4 Donde dice Nombre de la macro escribe MiPrimeraMacro. Ese será el nombre que le daremos a nuestra macro. 1.5 Presiona Aceptar y la macro comenzará a grabar todo lo que hagas. 1.6 Posiciónate en la celda A1 y escribe el valor 1500. 2. Barra para frenar la grabación Cuando comienza a grabar la macro activa una nueva barra de macros como la que se muestra en la foto. El botón cuadrado de la izquierda te permitirá parar la grabación y finalizar la macro.

Otra forma de detener la grabación de la macro es desde el menú Herramientas > Macros > Detener grabación. Hazlo ahora para detener la grabación.

3. Veamos como quedó la macro grabada 3.1 Accede al editor de visual basic con ALT+F11. 3.2 Debes hacer clic en Módulo1 para visualizar el código de la nueva macro grabada. Verás una pantalla como la siguiente:

* Podrás obsevar que el código que se grabó es distinto que el código que habíamos escrito cuando hicimos la macro manualmente. Más adelante en este mismo capítulo analizaremos y explicaremos las diferencias. 4. Vamos a probar la macro 4.1 Vuelve a Excel con ALT+F11. 4.2 Verás que la celda A1 tiene el valor 1500 porque lo escribimos mientras grabábamos la macro. 4.3 Para ver como opera la macro borra dicho valor.

4.4 Abre el menú de macros desde el menú Herramientas > Macro > Macros 4.5 Selecciona MiPrimeraMacro (no te confundas con Hoja1.MiPrimeraMacro que es la que hicimos primero). 4.6 Presiona Aceptar y verás como se escribe nuevamente el valor 1500 en la celda A1. Excel 2.007 1. Vamos a grabar la macro 1.1 Vé a la ficha Programador > Grabar macro

1.2 Se abrirá un cuadro de diálogo como el que se muestra a continuación.

1.4 Donde dice Nombre de la macro escribe MiPrimeraMacro. Ese será el nombre que le daremos a nuestra macro. 1.5 Presiona Aceptar y la macro comenzará a grabar todo lo que hagas. 1.6 Posiciónate en la celda A1 y escribe el valor 1500. 2. Detener la grabación Para terminar de grabar, debemos presionar el botón de detener grabación

3. Veamos como quedó la macro grabada 3.1 Accede al editor de visual basic con ALT+F11. 3.2 Debes hacer clic en Módulo1 para visualizar el código de la nueva macro grabada. Verás una pantalla como la siguiente:

* Podrás observar que el código que se grabó es distinto que el código que habíamos escrito cuando hicimos la macro manualmente. Más adelante en este mismo capítulo analizaremos y explicaremos las diferencias. 4. Vamos a probar la macro 4.1 Vuelve a Excel con ALT+F11. 4.2 Verás que la celda A1 tiene el valor 1500 porque lo escribimos mientras grabábamos la macro. 4.3 Para ver como opera la macro borra dicho valor. 4.4 Abre el menú de macros presionando ALT+F8 4.5 Selecciona MiPrimeraMacro (no te confundas con Hoja1.MiPrimeraMacro que es la que hicimos primero).

4.6 Presiona Aceptar y verás como se escribe nuevamente el valor 1500 en la celda A1.

Cómo acceder
El Editor de Visual Basic es la aplicación que trae Excel desde donde se escriben y guardan las macros. Tienes 3 formas de acceder al editor: La forma más rápida de acceder al editor es presionando ALT+F11 También tienes otras formas de acceder: Excel 2.003: desde el menú Herramientas > Macros > Editor de Visual Basic Excel 2.007: desde la ficha Programador > Visual Basic Cuando accedas al editor verás algo como similar a esto:

Las principales ventanas de editor son: Proyecto (arriba a la izquierda) Propiedades (abajo a la izquierda) Inmediato (arriba a la derecha) Código (abajo a la derecha)

No importa si no ves todas las ventanas (se pueden mostrar u ocultar desde el menú "Ver"). En las secciones siguientes te explicaremos la utilidad de cada una de estas ventanas.

Ventana Proyecto
Veamos una foto para ver como se ve la ventana de Proyecto. Si no la puedes visualizar esta ventana puedes activarla desde el menú Ver > Explorador de proyectos, dentro del editro de visual basic. En la ventana de Proyecto hay carpetas donde se guardarán y escribirán las macros. Hemos presionado el botón Alternar Carpetas para que se ordenen mejor los elementos, como se ve a continuación:

Proyectos En un primer nivel tenemos los proyectos. Por regla general, cada libro excel tiene asociado un proyecto. Por ejemplo, si creas un nuevo libro Excel desde el menú de Excel Archivo > Nuevo y vuelves al editor de macros (ALT+F11), verás que aparece el proyecto VBAProject(Libro1). Dentro del paréntesis aparece el nombre de tu libro excel y lo de VBAProject podrás cambiarlo luego. En resumen VBAProject(Libro1) es la carpeta principal, asociada a un libro Excel determinado, donde insertaremos todo lo referido a las macros para dicho libro. Carpetas En un segundo nivel tenemos 3 carpetas: - Microsoft Excel Objetos - Formularios - Módulos.

Veamos cada una de ellas: 1. Microsoft Excel Objetos En esta carpeta vemos que cuelgan dos elementos: 1.1 ThisWorkbook siempre está presente. Si escribimos una macro aquí la misma afectará a todo el libro. 1.2 Hoja1 (Hoja1) hace referencia las hojas de Excel (habrá 1 por cada hoja de nuestro libro). Si escribimos una macro aquí la misma solo afectará a la hoja en cuestión. 2. Formularios Los formularios son más conocidos como UserForms. Si no lo visualizas puedes agregarlos desde el menú Insertar > Userform. 2.1 Dentro de la carpeta de Formularios vemos un elemento llamado Userform1. Todo el tema de formularios lo veremos con más en detalle en el capítulo "Formularios". 3. Módulos Los módulos sirven para escribir macros a nivel genérico, sin estar relacionadas a la hoja o libro en particular. Si no visualizas ninguno puedes agregarlos desde el menú Insertar > Módulo. 3.1 Dentro de la carpeta de Módulos vemos que hay un elemento llamado Módulo1. Podemos insertar tantos módulos como necesitemos. En los módulos podemos escribir macros que operan de forma genérica, sin distinguir entre hojas o libros. Haciendo doble clic izquierdo en cualquiera de estos objetos verás que se habilita la Ventana de Código de la izquierda (una hoja en blanco grande). En la misma es donde se escriben las macros. Recuerda: antes de escribir una macro debes evaluar donde hacerlo. 1. Si es una macro que solo debe afectar una hoja en particular escríbela en los objetos de Hoja, en el nombre de Hoja correspondiente. 2. Si la macro debe afectar a todo un libro en particular escríbela en el objeto ThisWorkbook. Estas suelen ser macros que se ejecutan al abrir, cerrar o guardar el libro. 3. Si la macro es de tipo genérica escríbela en un Módulo. 4. Si quieres hacer un formulario utiliza el objeto Userform.

Ventana Propiedades
Veamos como se ve la Ventana Propiedades. Esta ventana se ubica en la parte inferior izquierda de la pantalla. Si no la puedes visualizar puedes activarla desde el menú Ver > Ventana propiedades. Cada objeto tiene sus propiedades. Por ejemplo, si hacemos doble clic en el objeto Módulo1 que vimos en la sección anterior, podremos ver sus propiedades:

Algunos objetos tienen muchas propiedades (por ej. los Userforms) así que tenemos la opción de ordenar lso mismos de forma alfabética o por categoría. El objeto Módulo1 solo tiene la propiedad (Name)Módulo1. Si quisiéramos podríamos reemplazar el nombre de Módulo1 y asignar otro nombre a gusto. Consejo: en la medida que vamos insertando muchas macros en nuestro proyecto, conviene ir creando nuevos módulos con nombres apropiados para mantener ordenadas nuestras macros. El resto de las propiedades de los otros objetos escapa al alcance de esta sección, pero podrás ver algunas en la 2º parte de este curso.

Ventana Código
Veamos una foto para ver como se ve la Ventana de Código. Cada vez que hagas doble clic izquierdo en algún Objeto de la Ventana Proyecto se activará a la derecha la Ventana de Código. Si no la puedes visualizar puedes activarla posicionándote en el Objeto en cuestión y luego desde el menú Ver > Código. Si todavía no has escrito ninguna macro verás la ventana de código en blanco. En nuestro ejemplo hemos escrito 3 macros:

Esta ventana no tiene mayores complicaciones. Lo que interesa es más bién el código que escribamos aquí. Puedes escribir todas las macros que quieras en esta ventana. Recuerda que el mismo editor asignará automáticamente los colores al código y además separará con una línea continua cada macro. En la medida que empecemos a escribir muchas macros, existe una forma rápida de movernos entre ellas. Desde la lista desplegable de la parte superior derecha podremos ver la lista de macros escritas. Haciendo clic en cualquiera de ellas el editor nos posicionará rápidamente en la misma.

Ventana Inmediata
Veamos como se ve la Ventana de Inmediato. Si no la puedes visualizar puedes activarla desde el menú Ver > Ventana Inmediato.

La ventana inmediata sirve para escribir, ejecutar y probar un código macro rápidamente, sin tener que armar toda la macro con la estrucuta que comentamos en secciones anteriores. Por ejemplo, si quisiéramos averiguar la cantidad de hojas que tiene un Libro podríamos escribir la siguiente macro en un módulo y ejecutarla: Sub ContarHojas() Dim N As Long N= thisworkbook.Sheets.Count Msgbox N End Sub De momento no importa los objetos, propiedades o métodos que hemos utilizado. Solo te queremos mostrar que es una macro de 5 líneas. Ahora supongamos que solo nos interesa saber el número de hojas del libro, pero no queremos armar toda la macro, solo nos interesa obtener el resultado. Entonces, en la ventana inmediato podemos escribir: ?thisworkbook.Sheets.Count y al presionar Enter en la fila siguiente nos mostrará el número de hojas que posee el libro. El signo ? al comienzo significa que estamos buscando conocer el resultado de algo. El resultado final se vería así, suponiendo que el libro tiene 1 hoja:

Veamos otro ejemplo. Si el libro fue guardado, podríamos querer averiguar el directorio donde se encuentra. Podríamos averiguarlo desde la Ventana Inmediato, escribiendo ?thisworkbook.Path y presionando Enter. Al presionar Enter, en la fila siguiente se mostrará la ruta del libro, por lo que en la Ventana Inmediato veremos algo así, suponiendo que el libro se encuentra guardado en ese directorio:

En los 3 ejemplos anteriores buscábamos un resultado y anteponíamos el signo ? al comienzo de la instrucción (buscábamos un nombre o un número). En otros casos podemos ejecutar una acción directamente y por lo tanto escribimos la macro sin el signo ?. Por ejemplo, si queremos que en la celda A1 aparezca el valor 100 lo podemos ejecutar desde la Ventana Inmediato como se ve a continuación:

En la celda A1 de la Hoja activa de Excel aparecerá el valor 100. Recuerda: desde la Ventana Inmediato puedes ejecutar macros de forma inmediata, como su nombre lo indica. Pero dichas macros solo se ejecutan 1 vez al presiona enter y no quedan disponibles en la lista de macros ni las puedes utilizar en tus desarrollos (asignándolas a botones o formularios).

Proteger el código
Así como se pueden proteger los libros, las hojas y las celdas de Excel, también es posible proteger con una contraseña el código de nuestras macros. Una vez que tengas tus macros escritas en el editor puedes ir al menú Herramientas > Propiedades de VBAProject... y luego hacer clic en la pestaña de Protección. Verás una ventana como la de la siguiente:

Para proteger tus macros sigue estos pasos: 1. Tilda la casilla Bloquear proyecto para su visualización 2. Escribe una Contraseña 3. Vuelve e escribir tu contraseña en Confirmar contraseña De esta forma, cuando alguien acceda al editor, verá la ventana proyecto del libro pero no podrá ver los objetos donde quedan escritas las macros (módulos, hojas y userforms). Si hace doble clic en el Proyecto aparecerá una ventana solicitando la clave.

Desde objetos
Muchas veces, y sobre todo cuando desarrolles aplicaciones en Excel, te interesará asignar macros a objetos gráficos insertados en la hoja. Excel posee una gran cantidad de figuras y dibujos que puedes insertar en la hoja. Excel 2.003: desde el menú Ver > Barra de Herramientas > Dibujo. Esto muestra un menú como el siguiente:

Excel 2.007: desde la ficha Insertar > Formas. Esto muestra un menú como el siguiente:

Si ya has insertado una figura en tu hoja Excel, podrás asociarle una macro siguiendo estos pasos: 1. Haz clic izquierdo en la figura para desplegar su menú de opciones. 2. Elige la opción Asignar macro

3. Al elegir la opción de Asignar macro abrirás el el menú de macros. Selecciona de la lista la macro de tu interés luego Aceptar.

4. Finalmente la figura quedará con la macro asignada, de tal forma que cada vez que hagas un clic encima de la figura, se ejecutará la macro.

Formularios
Un Formulario (o su denominación en inglés Userform) se utiliza para crear un Cuadro de Diálogo donde el usuario puede introducir información, o realizar otras operaciones. Al ejecutar muchas de las opciones del menú de Excel se abren formularios. Por ejemplo, desde el menú Herramientas > Opciones se abre un formulario como el siguiente, desde donde se pueden activar o desactivar distintas opciones de Excel.

Este formulario es muy completo y posee pestañas en la parte superior, casillas de selección (cuadraditos con tildes), casillas de opciones (círculos con un punto dentro) y listas desplegables (lista con una flechita que despliega distintas opciones). También podemos crear nuestros propios formularios como se ve a continuación.

Los Userforms se utilizan mucho para crear aplicaciones Excel que luzcan de forma profesional y permitan al usuario introducir datos o elegir opciones de una forma guiada y más intuitiva. En este capítulo aprenderemos como construir nuestros propios Userforms!

Crear un formulario
Para crear un Userform debemos hacer lo siguiente: 1. Abrir el editor de macros (por ejemplo, con CTRL+F11). 2. Insertar un objeto Userform. Esto podemos hacerlo fácilmente: 2.1 Seleccionamos el Libro Excel donde trabajaremos, en nuestro caso VBAProject (Libro2). 2.2 Hacemos clic derecho en el mismo y elegimos la opción Insertar > Userform 2.3 Como se ve en la fotografía, veremos que aparece un objeto Userform1 que cuelga de la carpeta Formularios

3. En la ventana de Código de la derecha, veremos que aparece un Userform en blanco, sin controles. Para abrir su Cuadro de Herramientas puedes hacerlo desde el menú Ver > Cuadro de Herramientas. Ahí figuran los controles que podremos agregar dentro del Userform. Para añdir uno, simplemente hacemos clic izquierdo en el control deseado y luego clic izquierdo dentro del Userform, en el sitio donde querramos agregar el control.

La idea es que mediante estos controles podremos tanto capturar como enviar información o datos desde o hacia las celdas de Excel respectivamente. También podemos asociar macros a los controles que agreguemos al Userform (todo esto lo veremos en secciones siguientes).

Si te posicionas sobre los Controles del Cuadro de herramientas, verás que aparece su nombre. Simplemente hacemos clic izquierdo en el control deseado y luego clic izquierdo en el Userform, en el sitio donde querramos agregar el control. En nuestro caso hemos agregado algunos controles de forma desordenada dentro del Userform.

Controles del formulario
Como veíamos anteriormente, tenemos una serie de controles para agregar al Userform, que los podíamos visualizar desde el menú Ver > Cuadro de Herramientas.

Ahora explicaremos brevemente la utilidad de cada control. Los controles se explican en el mismo orden que aparecen en el Cuadro de Herramientas y en la figura anterior (de izquierda a derecha y de arriba hacia abajo).

Seleccionar objetos: sirve para seleccionar controles que hayamos insertado en el Userform.

Label (etiqueta): sirve para poner un título o un texto.

Ejemplo: podemos poner un texto del tipo "Complete las opciones a continuación" y ubicarlo en cualquier sitio del Userform. También podemos agregar títulos o descripciones al resto de comandos que agregemos en el Userform.

Textbox (cuadro de texto): sirve para que un usuario introduzca datos. Ejemplo: queremos que el usuario introduzca una fecha o un nombre (que luego llevaremos a alguna celda de Excel).

ComboBox (cuadro combinado): sirve para que un usuario elija una opción de una lista. Ejemplo: creamos una lista con los meses de Enero a Diciembre para que el usuario elija uno de ellos.

ListBox (cuadro de lista): sirve para que un usuario rellene o elija varias opciones de una lista. Ejemplo: creamos una lista con Regiones o Ciudades y el usario deberá elegir una o varias de ellas.

CheckBox (casilla de verificación): sirve para que un usuario active una determinada función. Ejemplo: podemos hacer que al cerrar el Userform se imprima un reporte solo si la casilla de selección está tildada.

OptionButton (botón de opción): sirve para que un usuario seleccione una opción determinada entre varias posibilidades. Ejemplo: queremos que el usuario indique si es de sexo Masculino o Femenino. De todas las opciones solo se puede seleccionar una de ellas.

ToggleButton (botón de alternar): sirve para activar o desactivar alguna funcionalidad. Este botón adopta el modo "Encendido" / "Apagado".

Ejemplo: queremos que el usuario defina su idioma, en modo encendido español y en modo apagado inglés.

Frame (marco): sirve para agrupar elementos de un Userform (los elementos se deben ubicar dentro del Frame). Ejemplo: tenemos varias grupos de OptionButton y para distinguirlos los agrupamos con un Frame. Si tenemos un grupo de opciones tipo masculino/femenino los agrupamos dentro de un frame. Si luego tenemos otro gurpo de opciones del tipo Mayor de Edad / Menor de Edad los agrupamos dentro de otro Frame.

CommandButton (botón de comando): es un simple botón que nos permite ejecutar acciones. Ejemplo: un botón de Ayuda que ejecuta otro Userform con ayuda para el usuario.

TabStrip (barra de tabulaciones): en un mismo Userform se pueden crear distintas secciones. Ejemplo: un userform con cuatro secciones: Norte, Sur, Este y Oeste. Dentro de cada sección podemos ubicar distintos controles.

MultiPage (página múltiple): en un mismo Userform se pueden crear distintas páginas. Ejemplo: un userform con 2 páginas: España y Resto del Mundo. Dentro de cada página podemos ubicar distintos controles o distintas secciones.

ScrollBar (barra de desplazamiento): si tenemos una lista con muchos elementos el scrollbar nos permite navegarlos. Ejemplo: tenemos una lista con 150 países. Con el ScrollBar podemos subir y bajar por la lista de los mismos utilizando las flechas de desplazamiento.

SpinButton (botón de número): permite aumentar o disminuir valores.

Ejemplo: tenemos una lista con tipos de interés y queremos que sean incrementados o disminuídos en cantidades predeterminadas desde el SpinButton.

Image (imagen): permite introducir imágenes en el Userform. Ejemplo: queremos introducir una fotografía como fondo del Userform para darle un aspecto más profesional.

RefEdit (referencia): permite hacer referencia a una celda de Excel. Ejemplo: queremos que el usuario seleccione un dato que fue introducido previamente en una celda Excel. Haciendo doble clic en cada control se abrirá una venta donde podremos escribir y asociarle una macro. En la sección siguiente veremos un ejemplo simple sobre como crear un Userform paso a paso. Para ver como se verían estos controles dentro del Userform, vamos a crear un Userform que contiene los 15 controles que se pueden agregar. Los hemos agregado en el mismo orden en que aparecen en el Cuadro de Herramientas.

Ejemplo paso a paso
Antes de crear un Userform debemos pensar bien cuál será su objetivo y cuáles son los controles que utilizaremos.

Objetivo Crear un Userform para que un usuario complete unos datos personales (Nombre, Edad y Fecha de Nacimiento). Luego que el usuario complete sus datos, al apretar un botón, los mismos se volcarán en una tabla de Excel. Los controles que utilizaremos son: Textbox: para que el usuario ingrese los datos Label: para darle el nombre e los Textbox CommandButton: para proceder con el ingreso de datos o cancelar 1. Creamos la tabla en la hoja Excel Primero debemos crear un nuevo libro que contenga una tabla Excel donde se volcarán los datos del Userform. Para esto creamos un nuevo libro llamado Datos.xls y creamos la siguiente tabla:

2. Creamos un Userform (UF) Los UF se crean desde el editor de visual basic. 2.1 Abrimos el editor con ALT+F11 2.2 Seleccionamos Ver > Explorador de Proyectos para ver la lista de proyectos disponibles (los mismos se verán en la parte izquierda de la ventana). 2.3 En la venta de Proyectos seleccionamos VBAProject(Datos.xls) 2.4 Desde el menú superior elegimos Insertar > Userform 2.5 Aparecerá un nuevo Userform vacío junto con el Cuadro de Herramientas (si el mismo no aparece se puede abrir desde el menú Ver > Cuadro de Herramientas)

3. Nombramos el Userform

3.1 Abrimos las propiedades desde el menú Ver > Ventana Propiedades. 3.2 Hacemos doble clic en donde dice (Name) UserForm1, en la parte superior y tipeamos DatosUF, luego Enter (este es el nombre con el que nos referiremos al Userform desde las macros). 3.3 El nombre del Userform cambió en la Ventana de Proyecto, pero el Userform mismo sigue mostrando "Userform1" en su barra de su título. Para cambiarlo vamos a la Ventana Propiedades, hacemos doble clic en Caption, escribimos Datos Personales (encima de Userform1) y luego Enter. Ahora, la barra de título del Userform es más apropiada para nuestro propósito y para darle mejor información al usuario.

4. Agregamos un Cuadro de Texto Para permitir que el usuario ingrese datos en el Userform agregamos un control TextBox, desde el Cuadro de Herramientas. 4.1 Hacemos clic en el control de TextBox y luego hacemos clic en el Userform, en la parte donde querramos ubicarlo.

4.2 Con el nuevo TextBox seleccionado hacemos doble clic en la Ventana de Propiedades, propiedad (Name), tipeamos la palabra UFNombre y luego enter (este es el nombre que le asignamos al objeto para luego referirnos a él desde las macros).

4.3 Hacemos clic en una parte vacía del Userform, para volver a seleccionar todo el Userform. 5. Agregamos un Texto Para ayudar al usuario a ingresar sus datos, debemos indicarle que es lo que debe introducir en el Cuadro de Texto del Paso anterior. Podemos agregar una etiqueta de texto que describa la información que se debe introducir. 5.1 En el Cuadro de Herramientas hacemos clic en el botón Label o Etiqueta 5.2 En el Userform hacemos clic a la izquierda del TextBox, para agregar la Etiqueta de texto.

5.3 Si fuera necesario podemos cambiar el tamaño de la etiqueta de texto o del Cuadro de Texto para que no se superpongan. Se puede hacer clic en sus bordes (pequeños cuadraditos) y arrastrar para cambiar su tamaño.

5.4. Seleccionamos la nueva etiqueta, hacemos doble clic en la propiedad Caption de la ventana de propiedades, tipeamos Nombre y luego Enter.

5.5 Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el cuadro de herramientas. 6. Agregamos los Cuadros de Texto restantes Agregamos los cuadros de texto y las etiquetas restantes (ya lo hicimos para el nombre así que repetimos para Edad y Fecha de Nacimiento). Repetimos los pasos 4 y 5 y agregamos: * Un TextBox cuyo (Name) sea UFEdad, con una Etiqueta llamada "Edad" * Un TextBox cuyo (Name) sea UFFecha, con una Etiqueta llamada "Fecha Nac." Es muy importante que no olvides asignar bien los nombres (Name) a los Textbox, si no la macro dará error. Puedes revisar los pasos 4 y 5 para recordar como hacerlo. Si los textbox no quedan alineados se pueden alinear de la siguiente forma: 1. Clic en el primer TextBox 2. Mantieniendo pulsada la tecla MAYUS, selecciona los otros TextBox 3. Vamos al menú Formato > Alinear > Izquierda 4. Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el cuadro de herramientas.

7. Agregamos los Botones Para permitir que el usuario ejecute una acción, se pueden agregar un Botón de comando. Nuestro Userform tendrá un botón para Agregar los datos a la tabla Excel y otro botón para Cerrar el Userform. 7.1 En el Cuadro de Herramientas hacemos clic en Botón de comando. 7.2 En el Userform hacemos clic en la parte inferior izquierda para agregar el botón. 7.3 Con el nuevo botón seleccionado hacemos doble clic en la propiedad (Nombre) de la Ventana de Propiedades, tipeamos UFAgregar y luego enter. 7.4 Con el nuevo botón seleccionado hacemos doble clic en su propiedad Caption en la Ventana de Propiedades, tipeamos Agregar y luego enter. 7.5 Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el Cuadro de Herramientas. 7.6 Repetimos los pasos anteriores para agregar otro Botón de comando llamado UFCerrar y nombre "Cerrar". 7.8 Si fuese necesario podemos reubicar los botones dentro del Userform.

Es muy importante que no olvides asignar bien los nombres (Name) a los Botones de comando, si no la macro dará error. Esto se explica en el paso 7.3 y luego deberás repetirlo para el otro botón, tal cual se indica en el paso 7.6.

8. Agregamos el código al botón Agregar 8.1 Seleccionamos nuestro botón de comando Agregar 8.2 Desde el menú superior elegimos la opción Ver > Código. Esto abrirá una ventana donde podremos escribir código macro para dicho objeto. 8.3 Donde titila el cursor escribimos lo siguiente: Private Sub UFAgregar_Click() Dim iFila As Long Dim ws As Worksheet Set ws = Worksheets(1) 'encuenta la siguiente fila vacía iFila = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 'Verifica que se ingrese un nombre If Trim(Me.UFNombre.Value) = "" Then Me.UFNombre.SetFocus MsgBox "Debe ingresar un nombre" Exit Sub End If 'copy the data to the database ws.Cells(iFila, 1).Value = Me.UFNombre.Value ws.Cells(iFila, 2).Value = Me.UFEdad.Value ws.Cells(iFila, 3).Value = Me.UFFecha.Value 'limpa el formulario Me.UFNombre.Value = "" Me.UFEdad.Value = "" Me.UFFecha.Value = "" Me.UFNombre.SetFocus End Sub

8.4 En el menú superior elegimos Ver > Objeto para regresar al Userform. No te preocupes si no comprendes el código. Hay muchos objetos, propiedades y métodos nuevos. Todos ellos se explican mejor en la 2º parte de este curso. 9. Agregamos el código al botón Cerrar 9.1 Seleccionamos el botón de comando Cerrar 9.2 En el menú superior elegimos Ver > Código 9.3 Donde titila el cursor escribimos el siguiente código: Private Sub UFCerrar_Click() Unload Me End Sub 9.4 En el menú superior elegimos Ver > Objeto para regresar al Userform. 10. Permitir al usuario cerrar el Userform con la tecla ESC 10.1 Seleccionamos el botón de comando Cerrar 10.2 En la Ventana Propiedades cambiamos la propiedad Cancel a True. Probar el Userform Ya podemos probar el funcionamiento del Userform ! 1. Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el cuadro de herramientas. 2. En el menú superior elegimos Ejecutar > Ejecutar Sub/Userform 3. Ahora podemos comenzar a completar el primer cuadro del Userform y escribimos un nombre, por ej. Juan. 4. Presionamos la tecla TAB para movernos al siguiente cuadro de texto. 5. Cuando hemos completado todos los cuadros de texto, hacemos clic en el botón de Agregar y los datos se completarán en la Tabla de Excel. 6. Podemos repetir los pasos anteriores e ir agregando distintos nombres con sus respectivos datos. 7. Hacemos clic en Cerrar para volver al editor de macros. La tecla TAB sirve para moverse entre los distintos controles de un Userform. Si al presionar TAB el orden del movimiento no es el correcto, es posible camabiarlo:

1. Clic derecho en una parte vacía del USerform 2. Elegimos Orden de Tabulación. 3. Seleccionamos el control de la lista y con los botones de Mover Arriba o Mover Abajo ajustamos el orden. 4. Hacemos clic en OK Asignar un botón para ejecutar el Userform Podemos agregar un botón para que un usuario pueda ejecutar el Userform desde la hoja Excel. 1. Activamos Excel, libro Datos.xls, Hoja 1 2. En la Barra de Dibujo, en el menú Ver > Barras de Herramientas > Dibujo hacemos clic en una figura, por ejemplo el cuadrado, y lo insertamos en la hoja. 3. Seleccionamos dicha figura y con clic derecho en su borde elegimos Asignar Macro 4. Hacemos clic en el botón Nuevo 5. Donde titila el cursor escribimos: DatosUF.Show 6. Cada vez que hagamos clic en la figura se ejecutará el Userform.

Selección de celdas
Existen diversas formas de seleccionar celdas, y en todas ellas utilizamos el método Select. Veamos 3 métodos (equivalentes) para seleccionar una celda, por ejemplo la celda C4: ' La forma clásica de seleccionar Sub Seleccionar () Range("C4").Select End Sub ' Esta es otra terminología válida para seleccionar Sub Seleccionar () [C4].Select End Sub

' Finalmente podemos seleccionar de esta otra forma ' El primer Nº equivale a fila y el segundo a columna. Sub Seleccionar () Cells(4, 3).Select End Sub En los 3 casos anteriores se selecciona la celda C4. En el primer caso utilizamos el objeto Range y en el tercer caso el objeto Cells. También podemos seleccionar determinadas celdas (con datos, con fórmulas, etc). En la siguiente macro iremos seleccionando distintos tipos de celdas: Sub Seleccionando () On Error Resume Next ' Colocamos On Error Resume Next ' para evitar el error re compilación derivado de no poder selecionar un rango que no exi ste ' por ej., si la hoja activa no tuviera comentarios, no podríamos selecionarla con el códig o ' Para seleccionar todas la celdas que contienen comentarios. Cells.SpecialCells(xlCellTypeComments).Select 'Para seleccionar todas la celdas cuyo valor es una constante. Cells.SpecialCells(xlCellTypeConstants, 23).Select ' Para seleccionar todas la celdas que contienen fórmulas. Cells.SpecialCells(xlCellTypeFormulas, 23).Select ' Para seleccionar todas la celdas vacías, dentro de la región usada. Cells.SpecialCells(xlCellTypeBlanks).Select ' Para seleccionar todas la celdas visibles en nuestra hoja. Cells.SpecialCells(xlCellTypeVisible).Select End Sub

Conviene deducir que si quisiéramos seleccionar las celdas que contienen comentarios en un rango concreto y no en toda la hoja deberíamos utilizar: Sub Seleccion () On Error Resume Next ' Método 1 Range("A1:G10").SpecialCells(xlCellTypeComments).Select ' Método 2 [A1:G10].SpecialCells(xlCellTypeComments).Select ' Método 3 Range(cells(1,1),cells(10,7)).SpecialCells(xlCellTypeComments).Select End Sub Para seleccionar hasta la última celda no vacía:

Sub Seleccion () On Error Resume Next ' Es un buen hábito utilizar comodines como este

' aunque si lo mantenemos activo resultaría difícil saber donde podría estar el problema ' Selecciona desde la celda actual hasta la última celda no vacía hacia la derecha. Selection.End(xlToRight).Select ' Selecciona desde la celda indicada hasta la última celda no vacía hacia abajo. Range("AF10").End(xlDown).Select ' Selecciona desde la celda actual hasta la última celda no vacía hacia la izquierda. Selection.End(xlToLeft).Select ' Selecciona desde la celda actual hasta la última celda no vacía hacia arriba. Selection.End(xlUp).Select End Sub

Otra forma interesante de seleccionar es con el método Offset, que permite seleccionar un rango de acuerdo a unas coordenadas indicadas. Esta instrucción requiere que le indiquemos un origen y una cantidad de filas y columnas desde el origen (es muy útil para seleccionar rangos variables). La sintaxis es: Origen.Offset.(filas, columnas).select. Las filas y números se indican como números. Si estos son positivos el desplazamiento es hacia abajo - derecha respectivamente. Si son negativos el desplazamiento es hacia arriba - izquierda respectivamente. Veamos los siguiente ejemplos para entender mejor la selección con Offset: Sub Selecciona () On Error Resume Next ' Selecciona desde la celda actual hasta una celda (fila) hacia abajo. Selection.Offset(1, 0).Select ' La instrucción Selection hace que el origen sea la celda actual ' El 1 indica las filas a desplazarce hacia abajo ' El 0 indica las columnas a desplazarce a la derecha ' Hace lo mismo que la anterior. Poner 0 u omitirlo es lo mismo. Selection.Offset(1).Select ' Selecciona desde la celda actual, + una celda hacia abajo + una celda hacia la derecha. Selection.Offset(1, 1).Select 'Selecciona una columna y/o celda hacia la derecha desde la celda [A1] [A1].Offset(0, 1).Select ' Selecciona desde la celda actual hasta la misma celda selecionada, sin cambio alguno. Selection.Offset().Select ' Desde B1 selecciona una celda hacia arriba y otra a la izquierda [B2].Offset(-1, -1).Select ' Recuerda que al poner un signo negativo el movimiento cambia de dirección ' Si el negativo el movimiento es hacia abajo/derecha. Con el negativo es hacia arriba/iz quierda

' Si desde A1 intentamos seleccionar una celda hacia arriba y otra a la izquierda... [A1].Offset(-1, -1).Select ' Se produciría un error, porque como A1 es la primera celda, no podemos seleccionar ' una celda ni a la izquierda ni arriba de A1. De todas formas el error se ignora ya que ' hemos escrito On Error Resume Next al comienzo de la macro. ' Selecciona desde la celda actual hasta una celda hacia la izquierda (si fuera posible) Selection.Offset(-1).Select 'Selecciona desde la celda actual hasta una celda hacia la arriba (si fuera posible) Selection.Offset(, -1).Select ' Desde la celda actual, seleciona todo el cuadrante de celdas contiguas. Selection.CurrentRegion.Select ' Selecciona el cuadrante de celdas selecionadas en bloque una celda más hacia la derec ha y abajo. Selection.CurrentRegion.Offset(1, 1).Select End Sub Todas las acciones anteriores se pueden concatenar de tal manera que podríamos realizar lo siguiente: Sub Seleccion () On Error Resume Next [F7].End(xlDown).Offset(4).End(xlToRight).End(xlDown).Select ' Si F7 estuviera vacío y la columna F también, ' tras ejecutar [F7].End(xlDown). nos encontraríamos en la última fila (F65536) ' Pero no podríamos ir a [F7].End(xlDown).Offset(4) pues excel tiene 65536 filas y no 6 5536+X+4 End Sub Con la macro anterior iriamos desde la celda F7 hasta la última celda no vacía hacia abajo. Luego nos desplazaríamos 4 celdas desde esta nueva posición hacia abajo.

Luego iríamos hasta la última celda no vacía hacia la derecha desde esta nueva posición. Finalmente de nuevo hacia abajo desde esta nueva posición. También es posible la selección de rangos utilizando variables en filas y columnas, utilizando el objeto Cells. Esta forma es muy útil cuando queremos utilizar variables en la fila la columna. La sintaxis debe ser: cells(fila,columna) Sub Seleccion() ' Selección desde A1 hasta fila N y columna J (asumimos que N y J son variables) range(cells(1,1),cells(N,J)).select End Sub

Estos 3 líneas de código seleccionan el mismo rango de celdas: Sub Seleccionar () Range("A1:E5").Select [A1:E5].Select Range(Cells(1, 1), Cells(5, 5)).Select End Sub

LIC. Manuel Eduardo Gabino Quevedo. magavique@hotmail.com

Sign up to vote on this title
UsefulNot useful