crear un formulario (varias fuentes)

130
Crear un formulario (UserForm) en Excel I. Hace mucho tiempo que estoy buscando el momento para poder subir al blog una explicación de como crear un UserForm (o sea un formulario) desde el Editor de VBA de Excel, esto es , vamos a generar un formulario personalizado. Lo primero es tener claro cómo será este formulario, y para no complicar demasiado el asunto, he decidido que nuestro formulario tendrá dos ComboBox (también conocido como Cuadro combinado) y un TextBox (o Cuadro de texto), así como un CommandButton (o Botón de comando), además de algunas Labels (o Etiquetas). La idea, para no dispersarme demasiado es crear la estructura de un Formulario en el que aparezca junto a una etiqueta un Cuadro combinado, y debajo de estos una nueva etiqueta junto a un Cuadro de texto, acabando el formulario con un Botón de comando que ejecute una acción. Quedará algo así: La idea es que mediante uno de los ComboBox podamos elegir una de las hojas del libro activo, mientras que con el segundo Combobox seleccionemos de un listado dado uno de sus elementos, para que una vez añadido un valor en el TextBox, al presionar el CommandButton copie dicho valor en la hoja correspondiente y en el lugar asociado al elemento del segundo Combobox Veamos cual es nuestro Libro de trabajo, sobre el cual va a funcionar nuestro Userform. En este Libro existen tres hojas ('España', 'México' y 'Colombia'),y una más ('Consolidado'), donde se Consolidan las anteriores; cada hoja (cada país) tiene un listado de clientes único para todas ellas, que corresponden a un número de unidades de un determinado producto y colocadas en las mismas referencias: haz click en la imagen Como ya conocemos nuestro Libro de trabajo, podemos empezar a crear el formulario, para ello abriremos el Editor de VBA presionando Alt+F11, y buscaremos el Menú Insertar > UserForm:

Upload: oz-diaz-b

Post on 02-Aug-2015

374 views

Category:

Documents


17 download

TRANSCRIPT

Page 1: Crear Un Formulario (Varias Fuentes)

Crear un formulario (UserForm) en Excel I.

Hace mucho tiempo que estoy buscando el momento para poder subir al blog una explicación de como crear un UserForm (o sea un formulario) desde el Editor de VBA

de Excel, esto es , vamos a generar un formulario personalizado.Lo primero es tener claro cómo será este formulario, y para no complicar demasiado el asunto, he decidido que nuestro formulario tendrá dos ComboBox (también conocido

como Cuadro combinado) y un TextBox (o Cuadro de texto), así como un CommandButton (o Botón de comando), además de algunas Labels (o Etiquetas).La idea, para no dispersarme demasiado es crear la estructura de un Formulario en el que aparezca junto a una etiqueta un Cuadro combinado, y debajo de estos una nueva etiqueta junto a un Cuadro de texto, acabando el formulario con un Botón de comando

que ejecute una acción. Quedará algo así:

La idea es que mediante uno de los ComboBox podamos elegir una de las hojas del libro activo, mientras que con el segundo Combobox seleccionemos de un listado dado uno de sus elementos, para que una vez añadido un valor en el TextBox, al

presionar el CommandButton copie dicho valor en la hoja correspondiente y en el lugar asociado al elemento del segundo Combobox

Veamos cual es nuestro Libro de trabajo, sobre el cual va a funcionar nuestro Userform. En este Libro existen tres hojas ('España', 'México' y 'Colombia'),y una más

('Consolidado'), donde se Consolidan las anteriores; cada hoja (cada país) tiene un listado de clientes único para todas ellas, que corresponden a un número de unidades

de un determinado producto y colocadas en las mismas referencias:

haz click en la imagen

Como ya conocemos nuestro Libro de trabajo, podemos empezar a crear el formulario, para ello abriremos el Editor de VBA presionando Alt+F11, y buscaremos el Menú

Insertar > UserForm:

Page 2: Crear Un Formulario (Varias Fuentes)

Al insertar el UserForm se abrirá una ventana con los Controles que podemos insertar en nuestro formulario, para esto sólo es necesario hacer click sobre el Control

elegido (para nosotros 'Etiqueta','Cuadro de texto','Cuadro combinado' y 'Botón de comando', e ir agregándolos en el espacio del formulario. Nos aprovecharemos del

punteado (del 'grid') para alinear lo mejor posible, en primera instancia, los distintos controles añadidos, hasta conseguir:

La primera parte está lista, aunque la podemos (y debemos) personalizar más, ya que las distintas etiquetas y botones serían mucho más descriptivas si, en lugar de 'label1', 'label2', 'label2' o 'CommandButton1', aparecieran nombres algo más identificativos a

lo que se refiere ('País', 'Cliente', 'Unidades' o 'Insertar').Estas modificaciones las conseguiremos buscando la ventana de Propiedades de cada

una de ellas, en concreto la Propiedad Caption:

Page 3: Crear Un Formulario (Varias Fuentes)

Una vez cambiada la propiedad Caption para 'label1', 'label2', 'label2' y 'CommandButton1' nuestro formulario tendría este aspecto:

Ya podemos dar por finalizado la primera parte de creación de nuestro formulario, el aspecto es el que queríamos... claro, que ahora queda lo más importante, darle

poder!!!.Para asignarle alguna funcionalidad a este formulario (y que haga lo que queríamos), tendremos que añadir cierto código VBA a cada uno de los Controles añadidos, en

concreto a los dos ComboBox, al TextBox y al CommandButton, para ello haremos doble click sobre cada uno de ellos, lo que nos abrirá una ventana de código donde

poder incluir nuestras instrucciones y procedimientos...Lo que dejaré para la siguiente entrada.

En una entrada pasada, llamada Ejemplo de formulario de captura en Excel exponía un ejemplo con un formulario creado en el IDE de Visual Basic para aplicaciones (vba) y que nos permitía capturar datos para una tabla de Excel.

Beneficios de los formularios diseñados ??

1. Puedes crear cuantos objetos desees, desde Texboxes hasta OptionButtons.2. Tú defines las validaciones, evitando que se ingresen tipos de texto no deseados.3. Adecúas el diseño a tu gusto.4. Se considera una aplicación, ya que utilizas programación en vba.

Desventajas de los formularios diseñados ??

Realmente no existen desventajas. La complejidad radica en el nivel de validación que el programador desee darle.

Solución para no programadores ??

Page 4: Crear Un Formulario (Varias Fuentes)

Si eres un usuario de nivel intermedio a avanzado, pero aún no entras en el mundo de la programación vba, pero requieres una solución alterna, la solución es utilizar el Formulario que ofrece Excel.

En versiones anteriores a Excel 2007 el Formulario se podía lanzar desde el menú Herramientas > Datos. En la versión 2010 debemos añadir el acceso a la barra de acceso rápido: En dicha barra damos click derecho y elegimos Personalizar la barra de herramientas de acceso rápido. En los comandos disponibles elegimos Formulario… y presionamos Agregar >>.

La condición para poder utilizar Formulario es que tengamos una tabla de Excel, y para lanzarlo debemos estar posicionados en cualquier celda de la tabla. El título de cada columna será el nombre de cada campo que mostrará el formulario.

Tabla de ejemplo

Formulario

Basta con presionar el botón Nuevo para que los campos del formulario se vacíen y podamos ingresar los datos. Después presionamos Enter para guardar los datos.

Page 5: Crear Un Formulario (Varias Fuentes)

Para alimentar con datos, un combobox, tenemos varias opciones:

a) Llenar el combo con los datos de determinado rango, y cuyas filas son siempre las mismas (por

ejemplo, con los datos del rango E1:E10, con los datos de B12:B15, etc.). En este caso, sabremos que

nuestro rango siempre tiene 10 filas, o 4 filas, o las que sean, pero sabremos que siempre es una

cantidad fija en invariable.

b) Llenar el combo con los datos de un rango que puede crecer o decrecer, es decir, que en un

momento dado el combo puede tener 3 elementos, y al cabo de cinco segundos puede tener 20

elementos. En este caso, estamos hablando de que nuestro combobox se alimenta de un rango

dinámico.

Para insertar un combobox directamente en nuestra hoja de cálculo, sin tener que insertarlo

en un UserForm, haremos lo siguiente: Desde excel, seleccionaremos Ver, a continuación Barras de

herramientas, y seguidamente Cuadro de controles, tal y como aparece en la figura de la izquierda.

Seleccionaremos el control llamado Cuadro combinado (acercando el ratón a cada control, nos

aparecerá el nombre de cada uno de ellos). Una vez seleccionado, dibujaremos el combobox en la hoja

de cálculo, dándole el tamaño y posición que deseemos. Arriba a la izquierda, en la barra de fórmulas,

nos aparecerá su nombre, …por defecto ComboBoxY, donde Y es un número correlativo, de tal forma

que si es nuestro primer combobox, se llamará ComboBox1, si es el 2º, se llamará ComboBox2, y así

sucesivamente.

Para el primer caso, es decir, si queremos llenar el combobox con los datos de un rango fijo, entonces lo

tenemos bien fácil. Imaginemos que tenemos un rango con datos que va de I8 a I10, y queremos que

Page 6: Crear Un Formulario (Varias Fuentes)

esos valores almacenados en esas celdas (en las 3 celdas: I8, I9, e I10), sean los que aparezcan en

nuestro combobox. Supongamos que estamos trabajando con un combobox que se llama ComboBox3.

En ese caso, el código que podríamos utilizar sería este (estoy suponiendo que el combobox no está

insertado dentro de un UserForm, porque en ese caso, el código sería algo distinto, ya que utilizaríamos

RowSource, en lugar de usar ListFillRange), y desde la pantalla para VBA, lo pegaríamos en la hoja1,

que es donde tenemos nuestro combobox, y no en un módulo:

Private Sub ComboBox3_GotFocus()

'Este código se ejecutará cada vez que

'nos situemos sobre el combobox

ComboBox3.ListFillRange = "I8:I10"

ComboBox.RowSource

End Sub

Si por el contrario, el rango que alimenta el combobox es dinámico, deberemos añadir los elementos al

combobox, mediante el método AddItem.

Supongamos por ejemplo que tenemos un libro con 3 hojas y queremos que en nuestro combobox nos

aparezcan los nombres de esas tres hojas. En ese caso, el código del combobox (en este caso, nuestro

ComboBox1) sería el siguiente (estamos haciendo un combobox directamente sobre nuestra hoja de

cálculo, y no insertado dentro de un formulario), y que tendríamos que pegar desde VBA, en la hoja1,

que es donde tenemos nuestro combobox, y no en un módulo:

Private Sub ComboBox1_GotFocus()

'Esto se producirá cuando nos

'situemos sobre el combobox1

'********* Llenamos el combobox1 *********

'antes quitaremos todo lo que haya en el combobox1

ComboBox1.Clear

'Vamos a llenar dinámicamente el combobox

'con los nombres de las hojas

For i = 1 To Sheets.Count

'Añadimos los nombres de las hojas al combobox

ComboBox1.AddItem Sheets(i).Name

Next

End Sub

Page 7: Crear Un Formulario (Varias Fuentes)

Con ese código, recorremos los nombres de las hojas, y se cargarán en el combobox, cada vez que

éste reciba el foco (cada vez que nos situemos sobre él).

Si deseamos que se ejecute cierta acción, cada vez que elijamos un elemento de la lista de ese

ComboBox2, añadiremos el código que proceda, también dentro de la hoja1. En nuestro caso, cada

elemento corresponde a una hoja de cálculo del libro, y eso será lo que nos aparezca en el desplegable

del combobox. Nosotros mostraremos un mensaje, aunque podríamos haber hecho cualquier cosa: ir a

la hoja en cuestión, eliminar la hoja, copiarla, etc:

Private Sub ComboBox1_Click()

'Mostramos un mensaje

MsgBox ("Has hecho clic sobre: " & ComboBox1.List(ComboBox1.ListIndex))

End Sub

Si lo que deseamos es llenar dinámicamente un combobox a través de los datos que hay en un rango

de celdas continuo, entonces haremos lo siguiente (suponemos que nuestro combobox se llama

ComboBox2, y que está insertado directamente en la hoja de cálculo, y no en un formulario), pegándolo

en la hoja1 que es donde tenemos nuestro combobox:

Private Sub combobox2_gotfocus()

'Ocultamos el procedimiento

Application.ScreenUpdating = False

'fichamos la celda donde estamos, para volver a ella

celda = ActiveCell.Address

'Esto se producirá cuando nos

'situemos sobre el combobox2

'********* Llenamos el combobox2 *********

'antes quitaremos todo lo que haya en el combobox2

ComboBox2.Clear

'Vamos a llenar dinámicamente el combobox

'con los datos de la celda F8 en adelante

'(siempre que los datos sean continuos)

Range("F8").Select

Do While Not IsEmpty(ActiveCell)

'Añadimos los nombres de las hojas al combobox

ComboBox2.AddItem ActiveCell

Page 8: Crear Un Formulario (Varias Fuentes)

'bajamos una fila

ActiveCell.Offset(1, 0).Select

Loop

'volvemos donde estábamos

Range(celda).Select

'Mostramos el procedimiento

Application.ScreenUpdating = True

End Sub

Si deseamos que se ejecute cierta acción, cada vez que elijamos un elemento de la lista de ese

ComboBox3, añadiremos el código que proceda, también dentro de la hoja1. En nuestro caso, cada

elemento corresponde a los datos que hay desde F8 en adelante (rango continuo de datos), y eso será

lo que nos aparezca en el desplegable del combobox. Nosotros mostraremos un mensaje, aunque

podríamos haber hecho cualquier otra cosa:

Private Sub ComboBox2_Click()

'Mostramos un mensaje

MsgBox ("Has hecho clic sobre: " & ComboBox1.List(ComboBox2.ListIndex))

End Sub

A modo de resumen, hoy hemos visto varias cosas nuevas:

a) Cómo crear un combobox, sin necesidad de insertarlo dentro de un UserForm.b) Cómo llenar un combobox de forma dinámica, sin tener que tocar el código cada vez que cambien las dimensiones del rango de datos que lo alimentan.

Page 9: Crear Un Formulario (Varias Fuentes)

Vamos a crear un UserForm, que es un formulario que nos permitirá

pedir al usuario que introduzca una serie de datos para ir creando una tabla

en Excel, en forma de base de datos.

Supongamos que se trata de la empresa UniLink, Co. Ltd.

Su departamento de personal está creando una pequeña base de datos

sobre Excel. Se trata de una tabla con 4 campos: Nombre, Departamento,

Extensión y eMail.

Disponemos de un botón incrustado que lanza el proceso y llama al

Formulario de entrada de datos.

La macro asociada al botón es la siguiente.

Vamos al Editor de Visual Basic y pedimos insertar un UserForm, para ello

utilizamos el menú Insertar que se encuentra en el propio Editor de Visual

Basic, y luego pulsamos sobre UserForm.

Page 10: Crear Un Formulario (Varias Fuentes)

Esto genera el UserForm1, que aparecerá como una zona rectangular sobre

la que posteriormente iremos introduciendo diferentes elementos del

Cuadro de herramientas.

Seguidamente se muestra el Cuadro de Herramientas.

Page 11: Crear Un Formulario (Varias Fuentes)

Después de trabajar un rato sobre nuestro primer UserForm quedará así:

Al ejecutar el UserForm1 veremos lo siguiente.

Disponemos de la ventana de propiedades para ir cambiando algunas,

como por ejemplo el rótulo que aparece en la cabecera del UserForm1.

Hemos denominado al formulario 'Ficha personal'. Esto se hace modificando

la propiedad Caption.

Page 12: Crear Un Formulario (Varias Fuentes)

Otra ventana importante es la ventana del Proyecto. Finalmente llegaremos

a manejar tres formularios, que se pueden ver en la imagen siguiente

como:

UserForm1

UserForm2

UserForm3

Page 13: Crear Un Formulario (Varias Fuentes)

Pulsando con el botón derecho del ratón sobre el UserForm1 podemos pedir

que se vea el objeto (el propio UserForm1) o que se vea el código asociado

a sus botones y demás herramientas de control.

Si pedimos Ver código del UserForm1 obtendremos la siguiente ventana.

Page 14: Crear Un Formulario (Varias Fuentes)

Aquí se programan todos los botones y etiquetas que utilizamos en el

UserForm1.

En el desplegable de arriba, a la izquierda podemos elegir diferentes

elementos como se ve en la siguiente imagen.

Page 16: Crear Un Formulario (Varias Fuentes)

El código del UserForm2 se muestra en la siguiente imagen.

Page 18: Crear Un Formulario (Varias Fuentes)

El código del UserForm3 se muestra en la siguiente imagen.

Page 20: Crear Un Formulario (Varias Fuentes)

muy buena la explicacion, basica para dar inicio a la introduccion a

los userform, muuuuuuy buena

16 de junio de 2011 15:34

Oscar Efraindijo...

Gracias Ingeniero por el aporte, de una utilidad invaluable. Esta es

la base para hacer tablas mas complejas...muy buen inicio..

16 de junio de 2011 17:23

robidijo...

Soy principiante en los userfomr, me gustaria que me ayudaran a

contactar a mi correo [email protected] para aclarar

algunas dudas, mi skype ramavaro Gracias

21 de febrero de 2012 21:11

rafaeljosedijo...

Muy buena la explicacion pero tengo una pregunta para ti Adolfo,

que creo que fue el que publico este blog, como se hace con este

formulario para no introducir datos repetidos, cualquier informacion

me la puedes hacer llegar a cualquiera de mis correos, que son los

siguientes: [email protected] ;

[email protected] y [email protected]

Esperando tu respuesta

Rafael

20 de abril de 2012 21:18

<img

src="http://2.bp.blogspot.com/-0_igxYj6iAM/Tso5ltk7PvI/AAAAAA

AAEDc/RMDyfam2JMM/s45/DSCN1984_4.JPG" width="35"

height="35" class="photo" alt="">

Adolfo Apariciodijo...

Page 21: Crear Un Formulario (Varias Fuentes)

Para evitar repetidos consulta este post:

Impedir repetidos

21 de abril de 2012 07:47

juanfiallodijo...

Buen día Ingeniero

Excelente uso de userform y una explicacion por demás agradable

y muy entendible.

Tengo una inquietud al respecto:

si quisiera enviar la informacion a la hoja "basededatos" y a otro

más por decir "registromovimientos", ¿como sería la macro en este

caso específico?

Muchas gracias por tu valiosos aporte

Juan Fiallo

9 de mayo de 2012 16:20

<img

src="//lh3.googleusercontent.com/-2iOuTXdGBDk/AAAAAAAAAAI/

AAAAAAAAAAk/aUopaKW5Y10/s512-c/photo.jpg" width="35"

height="35" class="photo" alt="">

eder navarrodijo...

buenos dias ing, muy buena publicacion, mi pregunta. como busco

un dato dentro de mi base de datos y que me lo muestre en un

userform, luego que lo busque imprimirlo.

se puede ? y como lo ago?

seria de gran ayuda gracias

12 de agosto de 2012 17:45

Eliparckdijo...

Page 22: Crear Un Formulario (Varias Fuentes)

Hola Sr. Adolfo Buenas tardes.. me llamo Eli.. tengo un codigo para

busqueda que no logro que de un buen resultado.. quiza me

puedan ayudar..

---------------------------------

Es un formulario donde inserto numero de DNI y lo busca.. hasta

ahora lo encuentra.. pero no se porque en lugar de devolverlo en el

label que le indico.. me borra los datos.. o los vuelve a "0"...

quisiera porfavor me pudieran decir en que me equivoco... y poder

corregirme..

CODIGO:

Private Sub IBUSCAR_Click()

Dim RESPUESTADNI As Single

Dim RESPUESTANOMBRES As Double

Dim RESPUESTAFNAC As Double

Dim RESPUESTASISFOH As Double

Dim n As Range

Set n = Cells.Find(what:=txtFIND, MatchCase:=False)

If n Is Nothing Then

MsgBox "La Persona no se encuentra registrada en el Sistema",

vbExclamation

Else

n = RESPUESTADNI

n.Offset(0, 1) = RESPUESTANOMBRES

n.Offset(0, 4) = RESPUESTAFNAC

n.Offset(0, 6) = RESPUESTASISFOH

resDNI.Caption = RESPUESTADNI

resAPELLIDOS.Caption = RESPUESTANOMBRES

resFNAC.Caption = RESPUESTAFNAC

resSISFOH.Caption = RESPUESTASISFOH

Page 23: Crear Un Formulario (Varias Fuentes)

End If

End Sub

25 de agosto de 2012 00:38

Laura Vqzdijo...

Holaaa mucho gusto estaba viendo que buenaa la explicación y el

ejemplo pero de casualidad !! No Sabe O no tiene un ejemplo de

una base de datos de una Joyeria en VBA con Excell con la que me

pueda ayudar Gracias :D !!

13 de septiembre de 2012 04:20

Eliparckdijo...

no lograron responder mi pregunta.. gracias de todas formas por el

gran tutorial, logre aclarar mi duda, y conseguir que funcionara.. sin

embargo, mientras mas lo avanzo, mas pesado se vuelve el

archivo, y mas problemas me genera, y pues tuve que dejarlo,

porque en esa data, necesito estar guardando cambios todo el

tiempo y se me malograba el archivo.. gracias de todas formas..

buscare otra manera, quiza puro VB. o con PowerBuilder..

13 de septiembre de 2012 07:48

Publicar un comentario en la entrada

Publicar

Acceder

Page 24: Crear Un Formulario (Varias Fuentes)

Registrarse

Buscar

Explore

Documentos

Libros: ficción Libros: no ficción Salud y medicina Folletos o catálogos Documentos del gobierno Manuales y guías prácticas Revistas y diarios Recetas y menús Material académico + todas las categorías

Recientes Destacado

Personas

Autores Estudiantes Investigadores Editoriales Gobierno y entidades sin fines de lucro Empresas Músicos Artistas y diseñadores Profesores + todas las categorías

Los más seguidos Popular

×

You are viewing Scribd in Spanish. Change your language preference here.

Idioma:

Español

Download

14

Go BackComment

Link

Embed

Zoom

de 165

Readcast

0inShare

Page 25: Crear Un Formulario (Varias Fuentes)
Page 26: Crear Un Formulario (Varias Fuentes)

1º PARTE - Teoría y Programación de Macros(Nivel principiante - intermedio)

Introducción

Bienvenido al Manual de Macros de Exceluciones. Estás por comenzar una de las experiencias más fascinantesy atractivas de la Hoja de Cálculos Excel.Con las macros podrás sorprender y sorprenderte porque incrementarás las prestaciones y el potencial de Excelde forma ilimitada. El único límite que tendrás será tu imaginación.

Excel y Macros

La Hoja de Cálculos Excel es una de las herramientas más poderosas para el tratamiento de datos y su análisis.Una de las mayores ventajas que posee es la flexibilidad que ofrece y la rapidez con la que podemos construir plantillas y todo tipo de modelos, para diversos usos y aplicaciones.Sin embargo, si realmente quieres "exprimir todo el jugo" a Excel, deberás conocer y utilizar una de sus mayoresy más potentes herramientas: las macros.Si eres usuario principiante de la hoja Excel con este manual darás un salto cuántico y te convertirásrápidamente en todo un experto. Y si eres un usuario avanzado de Excel y ya tienes conocimientos previos demacros, este manual te servirá para refrescar algunos conceptos pero también te sorprenderás con nuevoscódigos y secciones especiales que hemos preparado para ti.

Una definición sencilla

Una buena forma de introducirnos al mundo de las macros es con una definición sencilla y directa.

Macro:

es un conjunto de instrucciones de código (programado) que permiten realizar una tarea determinadacomo así también expandir e incrementar las prestaciones de Excel. Las macros se escriben en lenguaje deprogramación VBA (Visual Basic for Applications). El Excel ya trae incorporado un editor de VBA por lo que lasmacros se programan dentro del mismo programa Excel.Mucha gente le tiene un poco de miedo a la palabra "programación". Bueno, si ese es tu caso no debespreocuparte. Hace unos años nosotros mismos no teníamos la más mínima idea de programación Excel. Pero labuena noticia es que con un buen manual (confiamos en que este lo es!) podrás aprender y "tomar vuelo"rápidamente en el mundo de las macros.Verás que es fácil, divertido y que puedes expandir al infinito los límites de Excel

Utilidad de una macro

Anteriormente definimos a las macros como algo que nos permite expandir e incrementar las prestaciones de lahoja 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 tareas y procesos que involucran muchos pasos2. Creación de nuevas funciones a medida (aparte de las que ya posee Excel).3.

Page 27: Crear Un Formulario (Varias Fuentes)

Creación de nuevos comandos, complementos y menús.4. Creación de completas aplicaciones a medida.Como queda en claro, con las macros podemos automatizar y crear. Veamos un poco más en detalle estas 4áreas donde aplicaremos las macros.Automatización de procesos: supongamos que todos los días debemos trabajar en nuestro libro Excel en el cualdebemos seleccionar un rango, centrarlo, cambiarle la fuente, poner la fuente en cursiva, aplicarle negrita yfinalmente aplicarle bordes a toda la selección. Estas 6 acciones las hacemos manualmente y no parecenmuchas, ¿pero que tal si hay que hacer esto en repetidas ocasiones y todos los días? Una macro nos permiteejecutar los 6 pasos automáticamente, tan solo presionando un botón o una tecla. Las tareas ideales paraautomatizar son aquellas que se hacen de forma repetida e involucran muchos pasos, por ejemplo: imprimir informes, configurar la vista de la hoja, actualizar datos de tablas dinámicas, etc...Creación de funciones a medida: las funciones y fórmulas Excel son quizás la esencia de la hoja de cálculos (sino se pudieran utilizar funciones y fórmulas no habría cálculos!). Excel trae incorporada unas 330 funcionesestándar las cuales se pueden utilizar en forma aislada o en forma combinada (anidadas). Sin embargo suelesuceder que justo la función que necesitamos no existe. Nuevamente, las macros vienen a nuestra salvación.Podemos programar funciones a medida que hagan exactamente lo que nosotros queremos. Y esas funcionesse comportarán igual que las de Excel (aparecerán en el menú de funciones en la categoría que nosotrosindiquemos, tendrán sus respectivos argumentos, etc.)Creación de nuevos comandos, complementos y menús: Excel trae una gran cantidad de comandos y menúspredefinidos que nos asisten para las operaciones más habituales. Las macros nos permiten crear nuestrospropios comandos y menús personalizados, e incorporarlos al Excel. La utilidad de los mismos depende tan solode nuestras necesidades. Los complementos Excel también están creados con macros. Si ves en el menúHerramientas > Complementos verás una lista de los que tienes instalado en tu Excel. Los mismos suelen ser distribuidos de forma gratuita o también se compran. Su utilidad reside en agregar alguna funcionalidad extra alExcel.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. Ellímite solo es tu imaginación. Una aplicación Excel consiste en algo más que una simple plantilla con datos yfórmulas. Una aplicación Excel es un verdadero programa de software con una serie de características que lohacen utilizable por cualquier usuario sin que el mismo tenga que entender la lógica "Exceliana" que hay por detrás.

Objetos, Propiedades y Métodos (OPM)

Cuando hablamos de macros hablamos de Objetos, Propiedades y Métodos (OPM). Estos son los 3 conceptosgenerales más importantes que debes conocer a la hora de programar las macros. De momentos solo tedaremos una sencilla definición y luego iremos profundizando más en ellos.Hay un ejemplo muy práctico para comprender lo que son los Objetos, Propiedades y Métodos (OPM).Supongamos que tenemos una canasta con frutas. ¿Cuales serían los OPM de la misma?Objetos: los objetos de la canasta de frutas serían las mismas frutas (manzanas, naranjas, peras…).Propiedades: las propiedades serían las características de las frutas (color, olor, sabor, textura…).

Métodos: finalmente los métodos son las acciones que podríamos ejercer sobre las frutas (comprarlas,venderlas, comerlas, almacenarlas, limpiarlas, quitarles la piel,…).Pasemos ahora a ver un sencillo ejemplo de algunos OPM de Excel.Objetos: prácticamente cada cosa que veas en Excel es un objeto. Ejemplos de objetos son: un libro Excel, unahoja, un rango, una celda, un menú, un gráfico, una tabla dinámica, un cuadro de diálogo, las etiquetas de hojas,las columnas, las filas, etc. En fin, cada partecita de Excel es un objeto. Un objeto es algo que puedes ver eidentificar con un nombre.Propiedades: las propiedades son las características de los objetos. Por ejemplo, para el objeto "celda" algunasde sus propiedades serían: alto, ancho, color, bloqueada o desbloqueada, vacía, con un número o con unafórmula, etc. Por ejemplo para el objeto "hoja" algunas de sus propiedades serían: visible u oculta, con o sinlíneas de división, con o sin barras de desplazamiento vertical y horizontal, etc.Métodos: un método es una acción que podemos realizar sobre el objeto o una de sus propiedades. Por ejemplosobre el objeto "hoja" podemos: activar, mover, copiar o borrar.De momento estas definiciones son suficientes para empezar a entender algunos conceptos. Recuérdalas bienporque las usaremos en todo el manual.En la medida que adquieras mayores conocimientos sobre como programar macros irás manejando yconociendo cada vez más objetos, con sus propiedades y sus métodos. En definitiva, de eso se trata programar una macro: conocer el nombre del objeto, conocer el nombre de alguna propiedad del mismo que quierasmodificar y también conocer el nombre de algún método que desees aplicarle.

Lenguaje VBA

Page 28: Crear Un Formulario (Varias Fuentes)

Recuerda que la programación de macros se hace a través del lenguaje VBA (Visual Basic for Applications)desde el editor VBA que trae incorporado Excel. Este tipo de programación también se conoce como"Programación Orientada a Objetos" (OOP, Objects Oriented Programming). La Programación orientada aObjetos nos permite trabajar sobre los objetos propios de Excel como así también crear nuestros propios objetos.Esto se relaciona con lo que te comentábamos en la sección anterior sobre Objetos, Propiedades y Métodos.Hablar de macros, lenguaje VBA y OPM es lo mismo. El lenguaje VBA es muy fácil de entender y siempre gira entorno a seleccionar los objetos, cambiar sus propiedades y/o ejecutarles distintos métodos. La únicaparticularidad es que el lenguaje VBA solo está en inglés. Sin embargo, y para que no te desalientes, conocemosmuchísimos programadores de macros que prácticamente no saben inglés! Esto es así porque solo hay queconocer la palabra en inglés para cada objeto, propiedad y método. Veamos un sencillo ejemplo de algunosobjetos de Excel y su denominación en inglés, el idioma utilizado por las macros:Ejemplos de Objetos VBA (entre paréntesis su significado en español)Cell (celda)Range (rango)Worksheet (hoja)Workbook (libro)Ejemplos de Propiedades VBA (entre paréntesis su significado en español)Value (valor)Color (color)Format (formato)Ejemplos de Métodos VBA (entre paréntesis su significado en español)Copy (copiar)Protect (proteger)Delete (borrar)

En la medida que avances con la lectura de este manual te irás familiarizando con la denominación de losdistintos objetos, propiedades y métodos. El lenguaje VBA tiene miles de OPM, y existe una forma muy prácticade conocerlos todos que es con la grabadora de macros, tema que trataremos más adelante.Aprender macros es mucho más fácil de lo que tu te imaginas. Es cierto que hay macros muy complicadas querequieren un conocimiento muy avanzado. Pero es un lenguaje fácil y muy intuitivo. Además Excel posee unagrabadora de macros que las escribe de forma automática. Luego nosotros podemos retocarlas a gusto. Teaseguramos que en cuanto termines este manual estarás escribiendo tus propias macros y te sorprenderás lofácil que es seguir aprendiendo y profundizando tus conocimientos. Nosotros te daremos las herramientas paraque lo consigas!

Como comenzar

Antes de comenzar a programar macros es necesario que conozcas la barra de herramientas VBA y las distintasformas de acceder al editor de macros, que es la herramienta donde escribirás el código de las mismas.En las secciones siguientes te enseñaremos ambos conceptos.Barra de Herramientas VBAEl primer paso para empezar a programar macros es familiarizarnos con las herramientas que nos ofrece Excelpara 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 lascombinaciones 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 elmenú Ver > Barras de Herramientas > Visual Basic. Verás como aparece una nueva barra de herramientas demacros. Puedes ubicar esta barra de herramientas donde te sea más cómodo.

Editor VBA

El Editor de Visual Basic es la aplicación que trae Excel desde donde se escriben y guardan las macros. Tienes 3formas de acceder al editor:A. Desde el menú Herramientas > Macros > Editor de Visual BasicB. Desde el botón Editor de Visual Basic de la Barra de Herramientas Visual Basic.C. 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)Consejo: cualquiera de las 3 formas te abrirá el editor de visual basic (nuestra forma preferida es la número 3,dado que es más rápido presionar ALT + F11 que abrir los menús desde el ratón).Una vez que hayas accedido al editor de visual basic verás algo similar a la figura siguiente (no importa si no loves estrictamente similar, eso dependerá de las ventanas que tengas visibles y ocultas).

Page 29: Crear Un Formulario (Varias Fuentes)

El editor contiene 3 ventanas principales: la Ventana Proyecto (parte izquierda superior), la Ventana de Código(parte derecha) y la Ventana Propiedades (parte izquierda inferior).La 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 ocomplemento Excel. Veamos el caso de VBAProject (Libro1). Simplemente significa que tienes abierto un libroExcel llamado Libro 1. Luego cuelgan 3 carpetas más: Hoja1 (Hoja1), ThisWorkbook y Modulo (no importa si vestodos estos elementos ahora, luego te enseñaremos como activarlos). Estas carpetas es donde habitan lasmacros. 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 nohemos escrito ninguna macro todavía veremos la hoja en blanco. Recuerda bien estas dos ventanas, ya que lasusaremos a continuación para escribir nuestra primera macro.

Page 30: Crear Un Formulario (Varias Fuentes)
Page 31: Crear Un Formulario (Varias Fuentes)

Como verás el Editor de VB tiene muchas ventanas. Pero de momento solo nos interesan las dos ventanas quete indicamos anteriormente: la Ventana Proyecto – VBA Project y la Ventana de Código donde se escribe elcódigo de las macros. La Ventana de Propiedades la dejaremos para más adelante porque de momento no nosinteresa.Recuerda: presionando las teclas ALT+F11 puedes ir desde Excel al Editor o desde el Editor al Excel de formaalterna (debes mantener presionada la tecla ALT y presionar F11 repetidas veces, verás como pasas de Excel aleditor y viceversa).Si estás en el editor y quieres regresar a la hoja Excel también puedes utilizar el ícono de Excel que se encuentraen el menú superior del editor (primer ícono de la izquierda, con la X de Excel).

Escribir una Macro

A la hora de crear una nueva macro existen 3 métodos.A. Escribirla manualmente

Page 32: Crear Un Formulario (Varias Fuentes)
Page 33: Crear Un Formulario (Varias Fuentes)
Page 34: Crear Un Formulario (Varias Fuentes)

B. Utilizar la grabadora de macrosC. Combinación de los 2 métodos anteriores(Grabarla y luego retocarla manualmente)En cada situación utilizarás un método distinto. Por ejemplo, las macros muy sencillas las puedes escribir manualmente porque tienen pocas líneas y ya las conoces. En otros casos la podrás crear con la grabadora demacros y olvidarte del código VBA. Sin embargo, en la medida que progreses con las macros verás que elmétodo más utilizado suele ser el número 3 mediante el cual primero grabarás y luego harás ajustes manualesen el código para hacerlo más eficiente y que se ejecute más rápido.En este capítulo vamos a ver como se escribe una macro manualmente (método 1)

Mi primera Macro

Vamos a escribir manualmente nuestra primera macro ahora!. Es una macro muy sencilla, pero te servirá paraorientarte en el Editor de Visual Basic y reconocer los pasos requeridos para hacer una macro.Objetivo de nuestra macroEscribir el valor 1.500 en la celda A1 de la hoja Excel.¿que significa esto? Que comenzaremos con una hoja Excel vacía y luego de ejecutar la macro verás queaparece el valor 1.500 en la celda A1. El valor lo pondrá automáticamente la macro cuando nosotros se loindiquemos.Suena demasiado simple, cierto? Sin embargo es suficiente como para comenzar y que

Page 35: Crear Un Formulario (Varias Fuentes)

aprendas generalidadesque luego aplicarás en todas tus macros. Como es una macro sencilla vamos a escribirla manualmente para quecomiences a empaparte del editor de macros y sus partes.

Escribir la macro

Bueno, es importante que recuerdes el objetivo: esta macro escribirá automáticamente el valor 1.500 en la celdaA1 de tu hoja Excel. Los pasos que debes seguir son los siguientes:1. Prepara el Editor de Visual Basic1.1 Crea un nuevo libro Excel y guárdalo con el nombre Libro 1.1.2 Abre el editor de Visual Basic con las teclas ALT+F11.1.3 Doble clic en VBAProject (Libro1) para ver las carpetas.1.4 Doble clic en Hoja1 (Hoja1) para empezar a escribir el código de la macro.

2. Escribiros la macro2.1 En la ventana de macros escribe textualmente el siguiente código:' Esta macro escribe el valor 1500 en la celda A1Sub MiPrimeraMacro()Range("A1").Value=1500End Sub2.2 Si la macro está bien copiada verás que la primera línea queda en color verde y la segunda y cuarta en azul.Estos colores los asigna automáticamente el editor y te lo explicaremos más adelante.De momento no te preocupes por el código escrito. Más adelante te enseñaremos a interpretarlo. Ahora que yatienes la macro escrita pasemos a la siguiente sección para ver como ejecutarla.

Ejecutar la macro

Si ya tienes escrita la macro en el editor, ahora podrás que ejecutarla, o sea hacer que funcione. Tienes 2 formasde 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 yluego presionas la tecla F5 la macro se ejecutará (para ver el resultado puedes volver a la hoja Excel conALT+F11).B. Ejecutar la macro desde Excel: otra forma de ejecutar la macro es desde el mismo Excel. Puedes volver a lahoja Excel con ALT+F11 e ir al menú Herramientas > Macros > Macro. Se abrirá un cuadro que contiene una listacon 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 exactamente lo quequeríamos hacer con nuestra macro, así que tarea cumplida. Hemos escrito un valor en una celda Excel desdeuna macro !

Page 36: Crear Un Formulario (Varias Fuentes)

Comprender la macro

Recuerda que el propósito de nuestra primera macro fue escribir el valor 1500 en la celda A1 de Excel. La macroya fue escrita y ejecutada en los pasos anteriores. Ahora vamos a analizar cada una de las líneas de su código.Recordemos como se veía nuestra macro escrita en el editor:* los colores del código los asignó automáticamente el editor)* la primera línea que dice Option Explicit la vamos a ignorar de momentoEsta macro tiene 4 líneas de código, por eso es tan sencilla (cuando termines este manual seguro podrás escribir macros de cientos o quizás miles de líneas de código!). Veamos que significa cada línea. Las explicaciones quevienen a continuación suelen aplicarse a todas las macros, así que

Page 37: Crear Un Formulario (Varias Fuentes)

es importante que las comprendas.1º línea de código: el comentario' Esta macro escribe el 1500 en la celda C10Sub MiPrimeraMacro()Range("A1").Value = 1500End Sub§ La primera línea de una macro suele ser un comentario que hacemos sobre la misma, donde podemos poner loque queramos.§ Los comentarios se pueden poner en cualquier línea y cantidad.§ En la medida que nuestras macros crecen los comentarios se vuelven muy útiles para nuestra propiareferencia.§ Un comentario siempre comienza por un signo '. Si tipeamos dicho signo seguido de un texto y luego damos alEnter, el editor detecta que es un comentario y lo pinta verde automáticamente.§ Un comentario no tiene efectos sobre la macro, es solo para nuestra referencia.Recuerda: los comentarios son muy útiles para comentar nuestras macros y siempre deben comenzar con elsigno '. Si has puesto bien dicho signo al comienzo de la línea, el editor detecta automáticamente que es uncomentario y lo pinta de verde luego de darle a Enter.2º línea de Código: el nombre de la macro' Esta macro escribe el 1500 en la celda C10Sub MiPrimeraMacro()Range("A1").Value = 1500End Sub§ Aquí es donde comienza realmente la macro.

§ Toda macro siempre comienza con la palabra Sub, luego un espacio, luego un nombre (sin espaciosintermedios) y finalmente los paréntesis (). Más adelante veremos algunas excepciones a esto.§ Este nombre luego lo utilizaremos para ejecutar la macro.§ Luego de escribir esta línea y darle a enter el Editor detectará que es el nombre de la macro y pondrá lapalabra Sub en color azul de forma automática.Recuerda: el nombre de la macro siempre comienza con la palabra Sub, luego un espacio, luego el nombre quequieras ponerle a tu macro (SIN espacios intermedios) y finalmente los paréntesis.3º línea de código: la instrucción de la macro' Esta macro escribe el 1500 en la celda C10Sub MiPrimeraMacro()Range("A1").Value = 1500End Sub§ Esta es la instrucción principal de nuestra macro (el corazón de la macro). Con este código logramos nuestroobjetivo (que la macro escriba el valor 1500 en la celda C10).§ ¿Recuerdas el comienzo del manual donde hablábamos de Objetos (partes de Excel), Propiedades(características) y Métodos (acciones)?. Aquí tenemos un ejemplo al respecto. Programar macros siempreconsiste en lo mismo: primero hacer referencia al objeto y luego asignarle una propiedad o método. En nuestroejemplo:Range("A1").Value = 1500Range("A1"). es el objetoValue es la propiedad= 1500 es el valor que le damos a la propiedad§ Esta línea de código se interpreta así: a la celda C10 de Excel asignarle el valor 1500.Recuerda: siempre debes hacer referencia a un objeto para luego asignarle propiedades o métodos.4º línea de código: el fin de la macro' Esta macro escribe el 1500 en la celda C10Sub MiPrimeraMacro()Range("A1").Value = 1500End Sub§ Una macro siempre termina con la instrucción End Sub.§ Luego de escribir esto y darle a Enter, el Editor detectará que es el fin de la macro y lo pondrá en color azul deforma automática.Recuerda: siempre debes finalizar tu macro con la instrucción End Sub.

Resumen

Nuestro objetivo fue crear una macro que escribiera el valor 1500 en la celda A1 de la Hoja1 de Excel. Como erauna macro sencilla decidimos escribir el código manualmente. Vamos a resumir todos los pasos que hicimoshasta 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+F113. 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 A1Sub MiPrimeraMacro()Range("A1").Value = 1500End SubFinalmente, todo quedó como se aprecia en la foto...5. Finalmente ejecutamos la macro desde el menú de Excel Herramientas > Macros > Macro y seleccionandoMiPrimeraMacro desde la lista de nombres y dando clic a Aceptar.

Page 38: Crear Un Formulario (Varias Fuentes)
Page 39: Crear Un Formulario (Varias Fuentes)

6. El resultado es que en la celda A1 se vuelve a escribir el valor 1500, que fue justamente lo que le indicamos ala macro que haga.Recuerda: en estos 5 pasos hemos visto rápidamente como escribir una macro sencilla y ejecutarla. En lassecciones siguientes iremos profundizando más estos temas, sobre todo el referente el código de la macro.

OPM de la macro

Recordemos nuevamente el código de nuestra primera macro:' Esta macro escribe el valor 1500 en la celda A1Sub MiPrimeraMacro()Range("A1").Value = 1500End SubAhora recordemos brevemente el significado de cada línea de código:1ª línea: es el comentario de la macro (siempre comienza con el signo ')2ª línea: es el nombre de la macro (siempre se comienza con Sub)3ª línea: es la instrucción principal de la macro4ª línea: es el fin de la macro (siempre termina con End Sub)La mayoría de las macros llevan una estructura similar, aunque hay algunas excepciones.El comentario que aparece al comienzo lo ponemos a gusto y sirve para recordarnos lo que queremos hacer conesa macro. El comentario siempre comienza con el signo ' y no afecta para nada a la macro. Es un simple texto.El nombre lo pondremos a gusto, anteponiendo la palabra Sub los paréntesis de apertura y cierre al final.Conviene dar un nombre que nos indique que hace la macro.La instrucción principal la veremos un par de párrafos más abajo. Este código siempre varía según lo que sequiera hacer con la macro en cuestión.El fin siempre es igual, con la frase End Sub.Así que solo nos queda explicar con más detalle la instrucción principal de la macro. En general, las líneas decódigo más importantes y donde debemos usar nuestros conocimientos de objetos, propiedades y métodos sonlas que se encuentran entre las instrucciones Sub y End Sub. Es allí donde realmente "se cocina" todo. Ese es elverdadero corazón de la macro.Al comienzo del manual te mencionábamos que las macros consisten en operar sobre un Objeto, ya seaalterando una de sus Propiedades o ejecutando un Método sobre el mismo.Recuerda: para aprender a programar

Page 40: Crear Un Formulario (Varias Fuentes)

macros debes aprender cuales son los objetos, propiedades y métodos deExcel. No olvides la definición de los mismos:Objeto- Es una parte de Excel

- Por ej. una celda de Excel, una hoja, un gráfico.Propiedad- Es una característica del objeto- Por ej. el valor de la celda, el nombre de una hoja, el color de un gráfico.Método > es una acción sobre el objeto > por ej. copiar la celda, borrar la hoja, agrandar el gráfico.Como te comentábamos al comienzo, la línea de código más importante de nuestra macros es:Range("A1").Value = 1500Ahora ya estamos en condiciones de identificar mejor los objetos, propiedades y métodos de la misma.Range("A1") es el objeto, recuerda que siempre que hacemos macros primero debemos indicar el objeto Excelsobre el que vamos a operar. En este caso usamos el objeto Range (Rango). El objeto Range es el que se utilizapara hacer referencia a una celda o rango Excel. Luego se escribe la referencia de la celda Excel (letra decolumna y número de fila) entre comillas y paréntesis. Ya le hemos indicado a la macro que deberá ocuparse dela celda A1 (objeto). Ahora debemos indicarle que hacer con ella (propiedad o método).Value = 1500 es la propiedad, que le asignaremos al objeto. Siempre empezamos por el objeto para luegoasignarle una propiedad o método. En este caso usamos la propiedad Value (Valor) que nos permite asignar unvalor al objeto range, anteponiendo un signo igual y luego el valor que deseamos.Esta macro es muy sencilla y no posee ningún método.Hasta aquí es suficiente. Hemos visto el ejemplo de un objeto y una de sus propiedades. En la medida que vayasavanzando con la lectura de este manual irás aprendiendo nuevos objetos, propiedades y métodos.

Grabar una Macro

A la hora de crear una nueva macro existen 3 métodos.A. Escribirla manualmenteB. Utilizar la grabadora de macrosC. Combinación de los 2 métodos anteriores(grabarla y luego retocarla manualmente)En cada situación utilizarás un método distinto. Por ejemplo, las macros muy sencillas las puedes escribir manualmente porque tienen pocas líneas y ya las conoces. En otros casos la podrás crear con la grabadora demacros y olvidarte del código VBA. Sin embargo, en la medida que progreses con las macros verás que elmétodo más utilizado suele ser el número 3 mediante el cual primero grabarás y luego harás ajustes manualesen el código para hacerlo más eficiente y que se ejecute más rápido.En el capítulo anterior vimos como se escribía una macro de forma manual. Ahora veremos como utilizar lagrabadora de macros. Como te mencionábamos antes, la ventaja de la grabadora es que prácticamente norequiere conocimientos de programación y código VBA. Simplemente encendemos la grabadora, ejecutamos lasacciones y listo. La grabadora genera el código automáticamente !

Mi primera Macro

Vamos a grabar nuestra primera macro ahora!. Es la misma macro que hicimos en el capítulo anterior, pero estavez la haremos con la grabadora de macros.

Objetivo de nuestra macroEscribir el valor 1.500 en la celda A1 de tu hoja Excel.¿que significa esto? Que comenzaremos con una hoja Excel vacía y luego de ejecutar la macro verás queaparece el valor 1.500 en la celda A1. El valor lo pondrá automáticamente la macro cuando nosotros se loindiquemos.Suena demasiado simple, cierto? Sin embargo es suficiente como para comprender la metodología defuncionamiento de la grabadora de macros.

Grabando la macro

Excel trae incorporada una grabadora de macros. La misma funciona de forma muy fácil. Encendemos lagrabadora, ejecutamos las acciones que nos interesan sobre la hoja Excel, paramos la grabadora y…listo!. Excelescribe 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éndolacon la grabadora de macros. Sigue los pasos a continuación:1. Vamos a grabar la macro1.1 Ve al menú Herramientas > Macros1.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 Borra donde dice Macro1 y escribe MiPrimeraMacro. Ese será el

Page 41: Crear Un Formulario (Varias Fuentes)

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. Cuando comienza a grabar la macro activa una nueva barra de macros como la que se muestra en la foto. Elbotó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 comola siguiente:* Podrás observar que el código que se grabó es distinto que el código que habíamos escrito cuando hicimos lamacro manualmente. Más adelante en este mismo capítulo analizaremos y explicaremos las diferencias.4. Vamos a probar la macro4.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 > Macros4.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.

Page 42: Crear Un Formulario (Varias Fuentes)

Resumen

Nuestro objetivo fue grabar una macro que escribiera el valor 1500 en la celda A1 de la Hoja1 de Excel. Lospasos que seguimos para utilizar la grabadora de macros fueron:1. Creamos un nuevo libro Excel y lo guardamos con el nombre Libro1.2. Desde el menú Herramientas > Macros seleccionamos la opción Grabar nueva macro y la macro comenzó agrabar.3. En la celda A1 del Libro 1 escribimos el valor 1500.4. Detuvimos la grabación desde el menú Herramientas > Macros > Detener grabación.

5. Borramos la celda A1 (quedó con el valor 1500 cuando grabamos la macro).6. Ejecutamos la macro desde el menú Herramientas > Macro > Macros. Seleccionamos de la listaMiPrimeraMacro y luego Aceptar.7. El resultado es que en la celda A1 se vuelve a escribir el valor 1500, que fue justamente lo que grabamos conla macro.Recuerda: al utilizar la grabadora no accedemos en ningún momento al editor de macros ni tenemos que escribir código. Todo lo hace automáticamente la grabadora.

Escrita vs. Grabada

Llegados a este punto, interesa ver las diferencias entre la macro escrita manualmente y la grabadaautomáticamente.¿Qué fue lo que hicimos hasta aquí? Hicimos una macro que escribió el valor 1500 en la celda A1 de la Hoja1 deExcel. Pero recuerda que hicimos esta macro 2 veces:A. la primera vez la escribimos manualmenteB. la segunda vez la grabamos directamente con la grabadora de macros.Denominemos Macro Escrita a la primera y Macro Grabada a la segunda para diferenciarlas. Aunque alejecutarlas el resultado final fue el mismo, hay algunas diferencias que debemos estudiar.A continuación veamos una tabla comparativa de ambos métodos utilizados para crear la macro que nospermitirá revisar el proceso y obtener unas valiosas conclusiones. Las diferencias son analizadas a continuación:Macro Escrita Macro Grabada1. Como la hicimos 1. Como la hicimos1.1 Creamos un Libro Excel llamado Libro1. 1.1 Utilizamos el mismo Libro1.xls1.2 Abrimos el editor de macros conALT+F11.1.2 Encendimos la grabadora de macrosdesde el menú Herramientas > Macro >Grabar nueva macro1.3 En VBAProject (Libro1) hicimos doble clicen Hoja1 (Hoja1)1.3 Nos posicionamos en la celda A1 de laHoja1 y escribimos el valor 1500.1.4 Escribimos el código de la macro.1.4 Detuvimos la grabación de la macro desdeel menú Herramientas > Macro > Detener grabación.2. El código de la macro 2. El código de la macro2.1 Con ALT+F11 accedemos al editor demacros.2.1 Con ALT+F11 accedemos al editor demacros.2.2 El código que escribimos manualmente fueel siguiente:2.2 El código que se grabó automáticamentefue el siguiente:Esta macro escribe el valor 1500 en la celdaA1 Sub MiPrimeraMacro()

Page 43: Crear Un Formulario (Varias Fuentes)

Sub MiPrimeraMacro()Range("A1").Value=1500 MiPrimeraMacro MacroEnd Sub Esta macro escribe el valor 1500 en la celda A1Range("A1").SelectActiveCell.FormulaR1C1 = "1500"Range("A2").SelectEnd SubRecuerda que este código quedó en Recuerda que este código quedó enVBAProject (Libro1) > Hoja1 (Hoja1) VBAProject (Libro1) > Módulo13. Ejecución de la macro 3. Ejecución de la macroPosicionados sobre cualquier línea del códigoanterior presionamos F5. Luego con ALT+F11volvimos a la hoja de Excel y comprobamosque en la celda A1 de la Hoja1 se escribió elvalor 1500.Para no confundirnos primero borramos el valor 1500 de la celda A1, Hoja1 (lo habíamosescrito para grabar la macro). Luegoejecutamos la macro desde el menúHerramientas > Macro > Macros.Seleccionamos de la lista MiPrimeraMacro yluego Aceptar. De esta forma se volvió aescribir el valor 1500 en la celda A1 de la Hoja1.En la sección siguiente analizamos el porqué de estas diferencias.

Diferencias

En nuestro ejemplo, tanto la Macro Escrita como la Macro Grabada logran la misma función de escribir el valor 1500 en la celda A1 de la Hoja1. Sin embargo, si te has fijado bien en los 3 puntos de la tabla de la secciónanterior verás que hay algunas diferencias. El análisis de las mismas nos permitirá ver las ventajas y desventajasde escribir una macro de forma manual o de grabarla con la grabadora de macros.Volvamos a poner las tablas comparativas, pero esta vez comentando las diferencias:Macro Escrita Macro Grabada1. Como la hicimos 1. Como la hicimosDesventaja: escribir una macro manualmenteimplica conocer los objetos y propiedades deExcel. En este caso teníamos que saber previamente que existía un objeto Range yuna propiedad Value, y también debíamossaber como era la sintaxis de los mismos >Range("A1").Value=1500. Para unprincipiante esto puede ser difícil de saber Ventaja: no es necesario conocer códigode programación. La grabadora lo escribeautomáticamente.2. El código de la macro 2. El código de la macroVentaja: cuando sabemos escribir macros,podemos hacer el código más eficiente yescribir solo las líneas que necesitamos.Recordemos el código que escribimosmanualmente:Desventaja: generalmente, cuando utilizamosla grabadora, el código que se escribeautomáticamente suele ser redundante yexcesivo. Recordemos el código que grabó lamacro:

Esta macro escribe 1500 en A1Sub

MiPrimeraMacro()Range("A1").Value=1500End SubSub MiPrimeraMacro()' Esta macro escribe 1500 en A1Range("A1").SelectActiveCell.FormulaR1C1 = "1500"Range("A2").SelectEnd SubLa macro está escrita de forma sintética. Leindicamos que en la celda A1 escriba el valor 1500. Solo nos llevó 1 línea de código (solocontamos las que están entre Sub y EndSub)La macro grabó nuestras acciones peroutilizó 3 líneas de código (solo contamos lasque están entre Sub y End Sub). Vemos queel código es más largo y que aparecennuevos objetos, propiedades y métodos. Lamacro se interpreta así:Primero seleccionar el rango A1. Luego en lacelda activa introducir una fórmula con elvalor 1500. Finalmente, como presionamosEnter, se posiciona en la celda siguiente, laA2.El objetivo fue logrado, pero la macro generómás código del necesario.El método de la macro grabada parece el preferible, porque lo hace todo de forma automática y nos evita tener que escribir un código que en esta etapa nos resulta desconocido. Sin embargo, en la sección siguiente veremosque el método a utilizar dependerá de cada situación particular...

Conclusión

En las 2 secciones anteriores vimos dos tablas comparativas de los 2 métodos que tenemos para crear unamacro:1. El método de escribir manualmente la macro2. El método de grabar la macro automáticamente.En la primera tabla se mostró el proceso de elaborar cada una y en la segunda tabla se mostraron lasdiferencias, con sus ventajas y desventajas.A modo de conclusión podemos decir que la diferencia fundamental está en el código generado. Aunque lasmacros grabadas son más sencillas porque no requieren conocer el código necesario (objetos, propiedades ymétodos) sin embargo la cantidad de código que generan suele ser más largo (más líneas).A pesar que el resultado final es el mismo, un código con más líneas siempre es menos deseable que un códigocon menos líneas. Esto es así porque un

Page 44: Crear Un Formulario (Varias Fuentes)

código largo es más difícil de controlar y de comprender y a la largapuede ser más propenso a que genere errores o ralentice la velocidad de ejecución de la macro.Recordemos los dos códigos generados (omitimos los comentarios del comienzo del código). Recuerda que loque nos interesa son las líneas entre Sub y End Sub. Ambas macros logran su cometido de escribir el valor 1500en la celda A1. Sin embargo fíjate que en la macro escrita solo utilizamos una línea de código mientras que lamacro grabada generó 3 líneas de código (solo consideramos las líneas entre Sub y End Sub).

Macro escrita

Sub MiPrimeraMacro()Range("A1").Value=1500End Sub

Como conocíamos el objeto y la propiedad fuimos directamente al grano. Al objeto Rango A1 le aplicamos lapropiedad Valor 1500. Solo una línea de código. Rápido y certero.

Macro grabada

Sub MiPrimeraMacro()Range("A1").SelectActiveCell.FormulaR1C1 = "1500"Range("A2").SelectEnd SubLa macro grabada grabó todas nuestras acciones en 3 líneas de código. Cuando seleccionamos el rango A1 segeneró la 1º línea de código, cuando escribimos el valor 1500 se generó la 2º línea de código y cuando dimos al"enter" luego de escribir el valor 1500 se generó la 3º línea de código.En la macro grabada verás un nuevo objeto, ActiveCell (celda activa) y una nueva propiedad del mismo,FormulaR1C1 (fórmula de la celda).Nuestra recomendación respecto a las macros escritas y grabadas ya te la dimos al comienzo del capítulo.Lo mejor es escribir las macros manualmente y utilizar la grabadora en aquellos casos donde no tenemos ni ideasobre cuál es el código que necesitamos o como es el nombre del objeto, propiedad o método.Lo usual es que si estás comenzando solo utilizarás la grabadora, y en la medida que vas conociendo el lenguajeVBA, con sus distintos objetos, propiedades y métodos ya te irás animando a escribir tus propias macros. Sinembargo, como los OPM son tantos, siempre se requiere de la grabadora para descubrirlos.A esta altura tu puedes pensar que todavía no tienes idea de ningún código. Sin embargo hemos preparado estemanual para hacerte la vida lo más fácil posible. La buena noticia es que este manual tiene una 2º parte con unagran cantidad de macros ya escritas.Así que nuestra recomendación final es que primero leas la 1º parte de este manual (la teoría), por lo menos unpar de veces, hasta que te encuentres cómodo con los conceptos. Luego ya podrás leer la 2º parte del manual,que tiene innumerable cantidad de macros ya escritas, comentadas y listas para que puedas copiar, pegar yutilizar en tus desarrollos Excel.Como instancia final, esperamos que con lo que has aprendido aquí junto con la ayuda de la grabadora demacros, ya puedas crear tus propios códigos, aparte de los que nosotros te facilitamos en la 2º parte del manual.

Ejemplos de Macros

¿Recuerdas el código que habíamos escrito para nuestra primera macro? El objetivo que perseguíamos eraescribir el valor 1500 en la celda A1 de la hoja1. Repasemos rápidamente todo lo que habíamos hecho paraescribir la macro: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 = 1500End Sub5. Finalmente ejecutamos la macro desde el menú de Excel Herramientas > Macros > Macro y luegoseleccionando MiPrimeraMacro desde la lista de nombres y dando clic a Aceptar.Recordemos nuevamente las reglas de escritura de la mayoría de las macros:1. La 1º línea de la macro es un comentario que no tiene efecto sobre la misma y que usamos para nuestrareferencia. Siempre comienza con el signo '. En nuestra macro:' Esta macro escribe el 1500 en la celda A12. La 2º línea de la macro es el nombre, que comienza con la palabra Sub, seguida del nombre que queramosponerle sin espacios intermedios y finalizando con 2 paréntesis de apertura y cierre (). En nuestra macro:Sub MiPrimeraMacro()3. La 3º línea era la instrucción principal que es donde nos referimos a los objetos, propiedades y métodos. Todoesto va escrito entre Sub y End Sub y podríamos tener muchas líneas de código si la macro fuera más compleja.Siempre se hace referencia al objeto y luego se le asignan propiedades o métodos.En nuestro caso el objeto es el rango A1 > Range("A1") y la propiedad que le asignamos fue el valor 1500 >Value=1500La línea de la macro quedó así:Range("A1").Value = 15004. La 4º línea representaba el final de la macro. Todas las macros se finalizan con la instrucción End Sub.También vimos que la macro se puede grabar automáticamente,

Page 45: Crear Un Formulario (Varias Fuentes)

con la grabadora de macros, pero quepreferimos escribirla para utilizar menos líneas de código y de paso aprender mejor los fundamentos del código.En la 2º parte de este manual están las macros más importantes que podrás necesitar, escritas, comentadas ylistas para que puedas copiar, pegar y adaptar en tus propios desarrollos. De todas formas, como adelanto,veremos algunas macros nuevas aquí como para ir calentado motores.

Macro 1

Escribamos manualmente una nueva macro ahora:1. Crea un nuevo libro Excel y guárdalo con el nombre Libro1.2. Accede al Editor de visual basic con las teclas ALT+F113. Inserta un nuevo Módulo desde el menú Insertar > Módulo4. Dentro del módulo escribe textualmente el siguiente código:' Esta macro muestra un texto en una ventana emergenteSub MostrarTexto ()Msgbox "Manual de Macros Exceluciones"End Sub

5. Puedes ejecutar esta macro rápidamente posicionándote en cualquiera de sus líneas de código y luegopresionando la tecla F5 para ver lo que sucede.También puedes ejecutarla volviendo a Excel con ALT+F11 y desde el menú Herramientas > Macros > Macro,eligiendo de la lista la macro MostrarTexto y luego Aceptar.6. Esta macro utiliza la instrucción Msgbox que sirve para abrir una ventana con la información que leindiquemos. Más adelante verás como puedes mostrar en esa ventana información de celdas Excel u otrosresultados. De momento solo hacemos que muestre el texto que indicamos entre comillas.Recuerda que esto es tan solo un adelanto. En la 2º parte de este manual están las macros más importantes quepodrás necesitar, escritas, comentadas y listas para que puedas copiar, pegar y adaptar en tus propiosdesarrollos.

Macro 2

Escribamos manualmente otra nueva macro ahora:1. Puedes utilizar el mismo Libro1 de la macro anterior.2. Accede al Editor de visual basic con las teclas ALT+F113. Puedes utilizar el mismo Módulo de la macro anterior 4. Dentro del módulo escribe textualmente el siguiente código:' Esta macro oculta las líneas de división de las celdasSub OcultarLineas()ActiveWindow.DisplayGridlines = FalseEnd Sub5. Puedes ejecutar esta macro rápidamente posicionándote en cualquiera de sus líneas de código y luegopresionando la tecla F5 para ver lo que sucede.También puedes ejecutarla volviendo a Excel con ALT+F11 y desde el menú Herramientas > Macros > Macro,eligiendo de la lista la macro OcultarLineas y luego Aceptar.6. Verás que la macro elimina las líneas de división de las celdas de la hoja activa (algo que también puedeshacer desde Excel, menú Herramientas > Opciones > pestaña Ver > casilla Líneas de división).Esta macro utiliza el objeto ActiveWindow (ventana activa).Luego le asigna la propiedad DisplayGridlines=False (mostrar líneas de división=falso)Si quisieras volver a ver las líneas de división puedes cambiar la propiedad False por True, tal que:ActiveWindow.DisplayGridlines = TrueRecuerda que esto es tan solo un adelanto. En la 2º parte de este manual están las macros más importantes quepodrás necesitar, escritas, comentadas y listas para que puedas copiar, pegar y adaptar en tus propiosdesarrollos.

Macro 3

Escribamos manualmente otra nueva macro ahora:

1. Puedes utilizar el mismo Libro1 de la macro anterior.2. Accede al Editor de visual basic con las teclas ALT+F113. La escribiremos en un objeto hoja, así que has doble clic en Hoja1 (Hoja1)4. Escribe textualmente el siguiente código:' Esta macro copia un rango a la celda activaSub CopiaRango()Range("A1:A5").Copy Destination:=ActiveCellEnd Sub5. Para probar esta macro vuelve a Excel con ALT+F11 y escribe algunos números o palabras a gusto en elrango A1:A5. Por ejemplo:5.1 Posiciónate en la celda C15.2 Desde el menú Herramientas > Macros > Macro, elige de la lista la macro CopiaRango y luego Aceptar.5.3 El resultado será que el rango A1:A5 se copiará a partir de la celda C1 que era la celda activa al ejecutar lamacro.6. Esta macro utiliza algunas OPM (objetos, propiedades y métodos) nuevos:Range ("A1:A5")El objeto Range ya lo conocíamos...CopyEste es un método (una acción)Destination:=ActiveCellEste es otro objeto. Destination se suele utilizar luego de un Copy y ActiveCell hace referencia a la celda activa.Recuerda que esto es tan solo un adelanto. En la 2º parte de este manual están las macros más importantes quepodrás necesitar, escritas, comentadas y listas para que puedas copiar, pegar y adaptar en tus propiosdesarrollos.

Page 46: Crear Un Formulario (Varias Fuentes)

El Editor de macros

Es importante reconocer bien las principales opciones y secciones que tiene el editor de macros (tambiénconocido como editor de Visual Basic), dado que será la herramienta que utilizaremos para escribir las macros.En esta sección veremos las distintas partes del editor y estudiaremos sus principales características.

Como acceder

El Editor de Visual Basic es la aplicación que trae Excel desde donde se escriben y guardan las macros. Tienes 3formas de acceder al editor:A. Desde el menú Herramientas > Macros > Editor de Visual BasicB. Desde el botón Editor de Visual Basic de la Barra de Herramientas Visual Basic (*)C. Desde el teclado (Teclas de Método Abreviado): ALT+F11(*) Recuerda que puedes habilitar esta barra desde el menú Ver > Barras de Herramientas > Visual Basic.Nuestra forma preferida de acceder es con ALT+F11. Si estás en Excel y presionas estas teclas se abrirá eleditor. Y al revés, si estás en el editor y presionas las mismas teclas volverás al Excel.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, dado que se pueden mostrar u ocultar. En las secciones siguientes teexplicaremos la utilidad de cada una de ellas.

Page 47: Crear Un Formulario (Varias Fuentes)

Ventana Proyecto

Page 48: Crear Un Formulario (Varias Fuentes)

Veamos una foto para ver como se ve la ventana de Proyecto. Si no la puedes visualizar puedes activarla desdeel menú Ver > Explorador de proyectos, dentro del editor de visual basic.En la ventana de Proyecto hay carpetas donde se guardarán y escribirán las macros. Hemos presionado el botónAlternar Carpetas para que se ordenen mejor los elementos, como se ve a continuación: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 tulibro Excel y lo de VBAProject podrás cambiarlo luego.En resumen VBAProject (Libro1) es la carpeta principal, asociada a un libro Excel determinado, dondeinsertaremos todo lo referido a las macros para dicho libro.En un segundo nivel tenemos las carpetas. Estas carpetas nos distinguen entre Objetos, Formularios y Módulos.Veamos cada una de ellas:1. ObjetosEn 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 unamacro aquí la misma solo afectará a la hoja en cuestión.2. FormulariosLos 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".

Page 49: Crear Un Formulario (Varias Fuentes)

3. MódulosLos módulos sirven para escribir macros a nivel genérico, sin estar relacionadas a la hoja o libro en particular. Sino 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 tantosmódulos como necesitemos. En los módulos podemos escribir macros que operan de forma genérica, sindistinguir entre hojas o libros.Haciendo doble clic izquierdo en cualquiera de estos objetos verás que se habilita la Ventana de Código de laizquierda (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 nombrede 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 lasección anterior, podremos ver sus propiedades:Algunos objetos tienen muchas propiedades (por ej. los Userforms) así que tenemos la opción de ordenar esosmismos de forma alfabética o por categoría. El objeto Módulo1 solo tiene la propiedad (Name) Módulo1. Siquisiéramos podríamos reemplazar el nombre de Módulo1 y asignar otro nombre a gusto.

Page 50: Crear Un Formulario (Varias Fuentes)

Consejo: en la medida que vamos insertando muchas macros en nuestro proyecto, conviene ir creando nuevosmó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 la2º parte de este manual.

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únObjeto de la Ventana Proyecto se activará a la derecha la Ventana de Código. Si no la puedes visualizar puedesactivarla 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 escrito3 macros:Esta ventana no tiene mayores complicaciones. Lo que interesa es más bien 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.

Ventana Inmediato

Veamos como se ve la Ventana de Inmediato. Si no la puedes visualizar puedes activarla desde el menú Ver >Ventana Inmediato.La ventana inmediato sirve para escribir, ejecutar y probar un código macro rápidamente, sin tener que armar toda la macro con la estructura que comentamos en secciones anteriores.Por ejemplo, si quisiéramos averiguar la cantidad de hojas que tiene un Libro podríamos escribir la siguientemacro en un módulo y ejecutarla:Sub ContarHojas()Dim N As LongN= thisworkbook.Sheets.CountMsgbox NEnd Sub

Page 51: Crear Un Formulario (Varias Fuentes)

De momento no importa los objetos, propiedades o métodos que hemos utilizado. Solo te queremos mostrar quees una macro de 5 líneas. Ahora supongamos que solo nos interesa saber el número de hojas del libro, pero noqueremos armar toda la macro, solo nos interesa obtener el resultado. Entonces, en la ventana inmediatopodemos escribir:? thisworkbook.Sheets.Count y al presionar Enter en la fila siguiente nos mostrará el número de hojas que poseeel libro. El signo? al comienzo significa que estamos buscando conocer el resultado de algo. El resultado final severí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. Alpresionar Enter, en la fila siguiente se mostrará la ruta del libro, por lo que en la Ventana Inmediato veremos algoasí, 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 tantoescribimos la macro sin el signo ?. Por ejemplo, si queremos que en la celda A1 aparezca el valor 100 lopodemos 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

Page 52: Crear Un Formulario (Varias Fuentes)

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 laspuedes utilizar en tus desarrollos (asignándolas a botones o formularios).

Page 53: Crear Un Formulario (Varias Fuentes)

Proteger el Código

Así como se pueden proteger los libros, las hojas y las celdas de Excel, también es posible proteger con unacontraseñ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 ventanacomo la de la siguiente:Para proteger tus macros sigue estos pasos:1. Tilda la casilla Bloquear proyecto para su visualización2. Escribe una Contraseña3. Vuelve e escribir tu contraseña en Confirmar contraseñaDe esta forma, cuando alguien acceda al editor, verá la ventana proyecto del libro pero no podrá ver los objetosdonde quedan escritas las macros (módulos, hojas y userforms). Si hace doble clic en el Proyecto aparecerá unaventana solicitando la clave.

Ejecución de Macros

En varias secciones de este manual te indicamos como se ejecuta una macro. En realidad hay muchas formasde hacerlo, así que te las explicaremos a todas.Dependiendo del caso te interesará ejecutar la macro desde un menú, desde un botón o incluso ejecutarlaautomáticamente cuando ocurran determinados eventos, como ser al abrir, cerrar o guardar el libro, activar odesactivar una hoja, etc. Este tipo de macros que se ejecutan automáticamente al ocurrir alguno de los eventosmencionados se explica en el capítulo "Macros de Eventos".

Page 54: Crear Un Formulario (Varias Fuentes)

Desde el código

La forma más rápida de ejecutar una macro es desde el mismo código. Cuando terminas de escribir una macropuedes posicionarte en cualquiera de sus líneas de código y presionar la tecla F5. Recuerda que puedes acceder al código de las macros desde el editor de macros, con las teclas ALT+F11.

Desde menu

Otra forma de ejecutar una macro es desde el menú Herramientas > Macro > Macros. Verás que se abre uncuadro como el siguiente:

Para ejecutar la macro:1. Elige el Nombre de la macro de la lista2. Clic en Ejecutar En la parte inferior figura una lista desplegable donde puedes elegir si quieres listar las macros de Todos loslibros abiertos, solo las de Este libro o las de PERSONAL.XLSPERSONAL.XLS es un libro Excel que se abre automáticamente cada vez que abres Excel. Este libropermanece oculto desde Excel, pero es posible verlo desde el editor de macros. Todas las macros que escribasen PERSONAL.XLS siempre estarán disponibles cada vez que habrás tus libros Excel. Es una opción muy útilpor si tienes macros que quieres utilizar en todos tus libros Excel (solo estarán disponibles en tu PC).

Desde teclado

Otra forma muy práctica de ejecutar una macro es desde el teclado. Esto también se conoce como teclas demétodo abreviado. Para configurar las teclas con las cuales ejecutar debes hacer los siguientes:1. Ir al menú Herramientas > Macro > Macros.2. Elegir el nombre de la macro de la lista y luego hacer clic en el botón Opciones.

Page 55: Crear Un Formulario (Varias Fuentes)
Page 56: Crear Un Formulario (Varias Fuentes)

3. Donde dice Tecla de método abreviado presiona la tecla MAYUSC y luego una letra. En nuestro ejemplo lamacro se ejecutará con Ctrl+Mayúsc+QRecuerda: la macro siempre se ejecuta con la tecla Ctrl+ la letra que tu escribas en la casilla. Sin embargo, haymuchas combinaciones de Ctrl+Letra que ya están ocupadas por Excel (Ctrl+C copiar, Ctrl+V pegar, Ctrl+Xguardar, etc) y no se aconsejamos que utilices dichas combinaciones. Por eso lo que se hace es presionar Mayúsc antes de la letra de tal forma que la macro se ejecutará con Ctrl+Mayús+Letra y de esta forma no alterar las teclas de método abreviado por defecto de Excel.

Desde objetos

Muchas veces, y sobre todo cuando desarrolles aplicaciones en Excel, te interesará asignar macros a objetosgráficos insertados en la hoja.Excel posee una gran cantidad de figuras y dibujos que puedes insertar en la hoja desde el menú Ver > Barra deHerramientas > Dibujo. Esto te habilita una barra como la 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...

Page 57: Crear Un Formulario (Varias Fuentes)
Page 58: Crear Un Formulario (Varias Fuentes)
Page 59: Crear Un Formulario (Varias Fuentes)

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ésluego Aceptar.4. Finalmente la figura quedará con la macro asignada, de tal forma que cada vez que hagas un clic encima de lafigura, se ejecutará la macro.

Desde botones

También es posible crear nuevos botones para la barra de herramientas de Excel y asignarle macros a losmismos. Para hacerlo sigue estos pasos:

Page 60: Crear Un Formulario (Varias Fuentes)
Page 61: Crear Un Formulario (Varias Fuentes)
Page 62: Crear Un Formulario (Varias Fuentes)

1. Ir al menú Ver> Barra de herramientas > Personalizar.1.1 Desde la pestaña Comandos, en la lista de Categorías, elegimos la opción Macros.1.2 A la derecha aparecerá una opción de Personalizar botón sobre la cual debemos hacer clic izquierdo y luegoarrastar y soltar ese botón a la barra de botones de Excel.2. Es importante que mantengas abierto el cuadro de Personalizar, porque si no no podrás editar el botón. Sihacemos clic izquierdo sobre el botón se desplegará se menú de opciones. Las opciones más importantes sonlas de Cambiar imagen del botón y la de Asignar macro. Esta última opción nos permitirá

Page 63: Crear Un Formulario (Varias Fuentes)

abrir el cuadro dediálogo con la lista de macros creadas para asignarle una macro determinada (visto en la sección anterior).

Page 64: Crear Un Formulario (Varias Fuentes)
Page 65: Crear Un Formulario (Varias Fuentes)
Page 66: Crear Un Formulario (Varias Fuentes)

Automáticamente

Las macros también se pueden ejecutar automáticamente. Por ejemplo, se pueden hacer macros que seejecuten cada cierto tiempo o que se ejecuten solas cada vez que el usuario hace algo como abrir, cerrar,guardar un libro, activar o desactivar una hoja, etc.Este tema se trata con más detalle en el capítulo "Macros de Eventos".

Macros de Eventos

Como decíamos en la sección anterior, las macros también se pueden ejecutar automáticamente. En este casose las denomina macros de evento, porque ante un determinado evento o acción realizada por el usuario, lamacro se ejecuta automáticamente.En las secciones siguientes repasaremos los principales eventos que pueden disparar una macroautomáticamente. Existen una gran cantidad de macros de evento así que solo estudiaremos las más utilizadas.

Eventos de libros

Los eventos de libros permiten disparar automáticamente una macro cuando suceden determinadas acciones anivel del libro Excel en cuestión, por ejemplo al abrirlo, guardarlo, cerrarlo, imprimirlo, etc.Instrucciones para insertar una macro de evento a nivel libro:1. Las macros de eventos se deben escribir en la carpeta ThisWorkbook del editor de macros.2. Luego en la primera lista desplegable de la ventana de macros elegimos la opción Workbook.

Page 67: Crear Un Formulario (Varias Fuentes)

3. Finalmente, en la lista desplegable de la derecha veremos todos los eventos de libro que podemos utilizar paradisparar nuestra macro.4. Por ejemplo, si haces clic en la opción Activate, verás que en la ventana de macros se escribeautomáticamente el siguiente código:Private Sub Workbook_Activate()End SubAl seleccionar una macro de evento el editor escribe automáticamente la primera y última línea de su código (nodebes modificar esto). Luego podrás escribir tu código macro entre esas líneas. En este caso, la macro queescribas se ejecutará cada vez que actives el libro Excel en cuestión. Por ejemplo, puedes hacer una macro quemuestre un mensaje de saludo cada vez que abres el libro:Private Sub Workbook_Activate ()Msgbox "Hola, Excel te saluda"End SubEntonces, cada vez que abras el libro, la macro se ejecutará automáticamente y verás el saludo:En el caso de las macros de evento, siempre aparece la palabra Private. Eso significa que esa macro no lapodrás ver en la lista de macros del menú Herramientas > Macro > Macros. Esto es así porque la macro no sepuede ejecutar manualmente, si no que se ejecuta automáticamente cuando ocurre el evento, en este casocuando se activa el

Page 68: Crear Un Formulario (Varias Fuentes)

libro Excel en cuestión.Existen más de 20 macros de evento a nivel libro. Puedes insertarlas siguiendo las instrucciones dadas alcomienzo. Las más importantes son:Private Sub Workbook_BeforeClose (Cancel As Boolean)' El código que escribas aquí se ejecutará automáticamente al cerrar el libroEnd SubPrivate Sub Workbook_BeforePrint(Cancel As Boolean)' El código que escribas aquí se ejecutará automáticamente al imprimir el libro

End SubPrivate Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)' El código que escribas aquí se ejecutará automáticamente al guardar el libroEnd SubPrivate Sub Workbook_Open()'El código que escribas aquí se ejecutará automáticamente al abrir el libroEnd Sub

Eventos de hojas

Los eventos de hojas permiten disparar automáticamente una macro cuando suceden determinadas acciones anivel de hojas Excel, por ejemplo al activarla, desactivarla, calcularla, etc.Instrucciones para insertar una macro de evento a nivel hoja:1. Las macros de eventos se deben escribir en la carpeta Hoja1(Nombre) del editor de macros. Fíjate que Hoja1identifica el número de hoja de Excel y (Nombre) será el nombre que tenga asignado dicha hoja en Excel. Por ejemplo, si en tu Excel la primera hoja se llama "Gastos", en el editor verías Hoja1(Gastos). En nuestro casotenemos

Page 69: Crear Un Formulario (Varias Fuentes)

Hoja1(Hoja1). Al hacer doble clic en dicha carpeta, la macro que escribamos solo afectará a dicha hoja.2. Luego en la primera lista desplegable de la ventana de macros elegimos la opción Worksheet.3. Finalmente, en la lista desplegable de la derecha veremos todos los eventos de hoja que podemos utilizar paradisparar nuestra macro automáticamente.

4. Por ejemplo, si haces clic en la opción Activate, verás que en la ventana de macros se escribe el siguientecódigo:Private Sub Worksheet_Activate()End SubAl seleccionar una macro de evento el editor escribe automáticamente la primera y última línea de su código (nodebes modificar esto). Luego podrás escribir tu código macro entre esas líneas. En este caso, la macro queescribas se ejecutará cada vez que actives la hoja Excel en cuestión. Por ejemplo, puedes hacer una macro quemuestre un mensaje de saludo cada vez que activas la hoja:Private Sub Worksheet_Activate()Msgbox "Hola, Excel te saluda"End SubEntonces, cada vez que actives la hoja, la macro se ejecutará automáticamente y verás el saludo:En el caso de las macros de evento, siempre aparece la palabra Private. Eso significa que esa macro no lapodrás ver en la lista de macros del menú Herramientas > Macro > Macros. Esto es así porque la macro no sepuede ejecutar manualmente, si no que se ejecuta automáticamente cuando ocurre el evento, en este casocuando se activa la hoja Excel en cuestión.Existen unas 9 macros de evento a nivel hoja. Puedes insertarlas siguiendo las instrucciones dadas al comienzo.Las más importantes son:Private

Page 70: Crear Un Formulario (Varias Fuentes)

Sub Worksheet_Activate ()' El código que escribas aquí se ejecutará automáticamente al activar la hojaEnd SubPrivate Sub Worksheet_Calculate()' El código que escribas aquí se ejecutará automáticamente al calcular la hojaEnd SubPrivate Sub Worksheet_Deactivate()

' El código que escribas aquí se ejecutará automáticamente al desactivar la hojaEnd SubPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)' El código que escribas aquí se ejecutará automáticamente al moverte entre las celdas de la hoja (cada vez queseleccionas y te posicionas en una nueva celda)End SubPrivate Sub Worksheet_Change(ByVal Target As Range)' El código que escribas aquí se ejecutará automáticamente al producirse un cambio en la hoja (por ejemplo alintroducir un dato en una celda, seleccionar una opción de una lista desplegable, etc.)End Sub

Formularios (Userforms)

Un Formulario (o su denominación en inglés Userform) se utiliza para crear un Cuadro de Diálogo donde elusuario 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 comoel 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 contildes), casillas de opciones (círculos con un punto dentro) y listas desplegables (lista con una flechita quedespliega distintas opciones).Los Userforms se utilizan mucho para crear aplicaciones Excel que luzcan de forma profesional y permitan alusuario introducir datos o elegir opciones de una forma guiada y más intuitiva.En este capítulo aprenderemos como construir nuestros propios Userforms !

Page 71: Crear Un Formulario (Varias Fuentes)

Crear un Userform

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 > Userform2.3 Como se ve en la fotografía, veremos que aparece un objeto Userform1 que cuelga de la carpeta Formularios3. 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 loscontroles que podremos agregar dentro del Userform. Simplemente hacemos clic izquierdo en el control deseadoy luego clic izquierdo en el 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 hacialas celdas de Excel respectivamente. También podemos asociar macros a los controles que agreguemos alUserform (todo esto lo veremos en secciones siguientes).Si te posicionas sobre los Controles del Cuadro de herramientas, verás que aparece su nombre. Simplementehacemos clic izquierdo en el control deseado y luego clic izquierdo en el Userform, en el sitio donde querramosagregar el control. En nuestro caso hemos agregado algunos controles de forma desordenada dentro delUserform.

Page 72: Crear Un Formulario (Varias Fuentes)
Page 73: Crear Un Formulario (Varias Fuentes)

Controles de un Userform

Como veíamos anteriormente, tenemos una serie de controles para agregar al Userform, que los podíamosvisualizar desde el menú Ver > Cuadro de Herramientas.Ahora explicaremos brevemente la utilidad de cada control. Los controles se explican en el mismo orden queaparecen 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: 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 delUserform. También podemos agregar títulos o descripciones al resto de comandos que agreguemos en elUserform.Textbox: sirve para que un usuario introduzca datos.Ejemplo: queremos que el usuario introduzca una fecha o un nombre (que luego llevaremos a alguna celda deExcel).ComboBox: 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: sirve para que un usuario rellene o elija varias opciones de una lista.Ejemplo: creamos una lista con Regiones o Ciudades y el usuario deberá elegir una o varias de ellas.CheckBox: 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.

Page 74: Crear Un Formulario (Varias Fuentes)
Page 75: Crear Un Formulario (Varias Fuentes)
Page 76: Crear Un Formulario (Varias Fuentes)

OptionButton: 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 sepuede seleccionar una de ellas. ToggleButton: 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: 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 tenemosun grupo de opciones tipo masculino/femenino los agrupamos dentro de un frame. Si luego tenemos otro grupode opciones del tipo Mayor de Edad / Menor de Edad los agrupamos dentro de otro Frame.CommandButton: 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: 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: 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: 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 mismosutilizando las flechas de desplazamiento.SpinButton: permite aumentar o disminuir valores.Ejemplo: tenemos una lista con tipos de interés y queremos que sean incrementados o disminuidos encantidades predeterminadas desde el SpinButton.Image: 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: 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 lasecció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 15controles que se pueden agregar. Los hemos agregado en el mismo orden en que aparecen en el Cuadro deHerramientas.

Page 77: Crear Un Formulario (Varias Fuentes)

Ejemplo paso a paso

Antes de crear un Userform debemos pensar bien cual será su objetivo y cuáles son los controles queutilizaremos.ObjetivoCrear 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 TextboxCommandButton: para proceder con el ingreso de datos o cancelar 1. Creamos la tabla en la hoja ExcelPrimero 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+F112.2 Seleccionamos Ver > Explorador de Proyectos para ver la lista de proyectos disponibles (los mismos severá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

Page 78: Crear Un Formulario (Varias Fuentes)

2.5 Aparecerá un nuevo Userform vacío junto con el Cuadro de Herramientas (si el mismo no aparece se puedeabrir desde el menú Ver > Cuadro de Herramientas)3. Nombramos el Userform3.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 enCaption, escribimos Datos Personales (encima de Userform1) y luego Enter. Ahora, la barra de título delUserform es más apropiada para nuestro propósito y para darle mejor información al

Page 79: Crear Un Formulario (Varias Fuentes)

usuario.4. Agregamos un Cuadro de TextoPara permitir que el usuario ingrese datos en el Userform agregamos un control TextBox, desde el Cuadro deHerramientas.

Page 80: Crear Un Formulario (Varias Fuentes)
Page 81: Crear Un Formulario (Varias Fuentes)
Page 82: Crear Un Formulario (Varias Fuentes)

4.1 Hacemos clic en el control de TextBox y luego hacemos clic en el Userform, en la parte donde queramosubicarlo.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 referirnosa é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 TextoPara ayudar al usuario a ingresar sus datos, debemos indicarle que es lo que debe introducir en el Cuadro deTexto del Paso anterior. Podemos agregar una etiqueta de texto que describa la información que se debeintroducir.5.1 En el Cuadro de Herramientas hacemos clic en el botón Label (etiqueta de texto).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 delCuadro de Texto para que no se superpongan. Se puede hacer clic en sus bordes (pequeños cuadraditos) yarrastrar 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.

Page 83: Crear Un Formulario (Varias Fuentes)
Page 84: Crear Un Formulario (Varias Fuentes)
Page 85: Crear Un Formulario (Varias Fuentes)
Page 86: Crear Un Formulario (Varias Fuentes)

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 restantesAgregamos los cuadros de texto y las etiquetas restantes (ya lo hicimos para el nombre así que repetimos paraEdad y Fecha de Nacimiento).Repetimos los pasos 4 y 5 y agregamos:* 1 TextBox cuyo (Name) sea UFEdad, con una etiqueta de texto (Label) Edad* 1 TextBox cuyo (Name) sea UFFecha, con una etiqueta de texto (Label) 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 TextBox2. Manteniendo pulsada la tecla MAYUS, selecciona los otros TextBox3. Vamos al menú Formato > Alinear > Izquierda4. Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el cuadro de herramientas.7. Agregamos los BotonesPara permitir que el usuario ejecute una acción, se pueden agregar botones de comando o CommandButons.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 CommandButton.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 dePropiedades, tipeamos UFAgregar y luego enter.7.4 Con el nuevo botón seleccionado hacemos doble clic en su propiedad Caption en la Ventana dePropiedades, tipeamos Agregar y luego enter.7.5 Hacemos clic en alguna parte vacía del Userform para seleccionarlo y mostrar el Cuadro de Herramientas.

Page 87: Crear Un Formulario (Varias Fuentes)

7.6 Repetimos los pasos anteriores para agregar otro CommandButton 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 CommandButtons, 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 el botón 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()'definimos las variablesDim iFila As LongDim ws As WorksheetSet ws = Worksheets(1) ' Encuentra la siguiente fila vacíaiFila = ws.Cells(Rows.Count, 1) _ .End(xlUp).Offset(1, 0).Row' Verifica que se ingrese un nombreIf Trim(Me.UFNombre.Value) = "" ThenMe.UFNombre.SetFocusMsgBox "Debe ingresar un nombre"Exit SubEnd If ' Copia los datos a la tabla Excelws.Cells(iFila, 1).Value = Me.UFNombre.Valuews.Cells(iFila, 2).Value = Me.UFEdad.Value

30009 =Ve&ntana30010 =&?En el siguiente ejemplo insertamos un nuevo control en el Menu Insertar, y le adjuntamos una macro sencillitapara cuando el control creado sea ejecutado y/o clicado a través del ratón o a través de teclado con el metodoabreviado de teclas "Conbinación de teclas":Sub AñadirControl_al_MenuXX()Dim MenuXX As CommandBarPopupDim nuevoControl As CommandBarButton' Elimina el Control si existiera:Call DeleteMenuControl' Encontrar el Menu Insertar:Set MenuXX = Application.CommandBars("Worksheet Menu Bar").FindControl(ID:=30005)' Buscamos por el Menu Insertar y en caso de que no existiera, EXIT' Lógicamente el menu "Insertar" debería estar siempre, pero nos aseguramos...If MenuXX Is Nothing ThenMsgBox "Parece que su Barra de Menu, no Contiene el Control Insertar", vbInformation, "ATENCION"Exit SubEnd If Set nuevoControl = MenuXX.Controls.Add( _ Type:=msoControlButton)' before:= en caso de que quisiéramos colocarlo no en el final, sino' antes que el control llamado "Com&entario"' Set nuevoControl = MenuXX.Controls.Add( _ Type:=msoControlButton, _ Before:=Application.CommandBars("Insert").Controls("Com&entario").Index)With nuevoControl.Caption = "Insertar Mensaje E&xceLuciones".BeginGroup = True.FaceId = 1589.OnAction = "MsgBox_Hola"End WithEnd SubSub DeleteMenuControl()On Error Resume NextApplication.CommandBars("Worksheet Menu Bar").FindControl(ID:=30005).Controls("Insertar MensajeE&xceLuciones").DeleteEnd Sub

Page 88: Crear Un Formulario (Varias Fuentes)

Sub MsgBox_Hola()MsgBox Chr(10) & "Un Feliz AÑO Nuevo!!!", _ vbInformation, _ "Exceluciones le desea:"End SubConviene recordar que si ejecutáramos esta macro y no borráramos el control creado al cerrar el libro, luego sifuéramos al menú Insertar e hiciéramos clic sobre el control "Insertar Mensaje E&xceLuciones", Excelautomáticamente abriría el libro que contiene la macro que hemos ordenado que se ejecute. Es por ello que losmenús nuevos y/o personalizados se aportan como complementos o bien se borran cuando el libro que los creóse cierra.También debemos recordar que podemos hacer eferencia a un menú por su nombre y/o por su identificativo (esdecir su ID). Los ID no variarán de país a país (versiones de Excel en distintos idiomas) mientras que losnombres puede que si ! .

Comandos

En este capítulo se explicarán algunos comandos útiles que suelen utilizarse con frecuencia en las macros.

Mensajes de alerta

Los mensajes de alerta son avisos que dispara Excel antes de realizar determinadas acciones. Por ejemplo, alintentar borrar una Hoja, nos aparece una aviso de confirmación. A nivel de macros, es importante tenerlospresentes, tal como vemos a continuación:Sub BorrarHoja()' Borramos una hojaActiveSheet.Delete' Pero esto requiere la confirmacion por parte del usuario...' Para evitar el mensaje de alerta, ya que Excel siempre nos pedirá confirmación,' bastará con utilizar la siguiente instrucción:Application.DisplayAlerts = False' Con lo cual ahora sí podremos borrar la hoja dada sin necesidad de confirmaciónActiveSheet.Delete' Finalmente dejamos a Excel en su estado original de mostrar los mensajesApplication.DisplayAlerts = TrueEnd SubEs importante recordar que el Application.DisplayAlerts=False siempre debe ir antes de la acción que requiereconfirmación. Al final de la macro conviene volver a asignarle la propiedad True.

Barra de estado

La barra de estado de Excel es la que figura en la parte inferior y suele mostrar distintos mensajes. Esta barra sepuede mostrar u ocultar desde el menú Ver > Barra de estado.

Usualmente la Barra de estado muestra la palabra Listo, tal como se ve a continuación:En otros casos, la misma cambia el mensaje mostrado, según la operación que estemos por realizar. Por ejemplo, si seleccionamos un rango y lo copiamos, la barra de estado daría una instrucción como la que se ve acontinuación:Es posible cambiar el mensaje de la Barra de estado mediante código VBA. A continuación se exponen algunasinstrucciones para saber como manipularla y modificarla:Sub BarraEstado()' Si queremos ver la barra de estado originalApplication.DisplayStatusBar = True' Si NO queremos verla bastará con:Application.DisplayStatusBar = False' Por defecto la Barra de estado siempre estará Visible, es decir:Application.DisplayStatusBar = True' Si queremos que la barra de estado muestre un mensage diferente bastará con:Application.DisplayStatusBar = "Hola que tal estas??"' Si queremos que la Barra de Estado este limpia, es decir sin mensaje alguno:Application.DisplayStatusBar = ""End Sub

Msgbox

Un Msgbox es simplemente una ventana que muestra un mensaje. Por ej., con la siguiente instrucciónmostraríamos un saludo:Sub Saludo()' Escribimos el mensaje entre comillasMsgbox "Hola, Excel te saluda!"

Page 89: Crear Un Formulario (Varias Fuentes)

End SubEl mesaje anterior se vería así en la hoja Excel:En este otro ejemplo, el mensaje lo tomamos de una celda Excel:Sub Saludo()' El mensaje mostrará el contenido de la celda A1Dim M as VariantM = range("A1").valueMsgbox MEnd SubTambién es posible dar formato y aplicar otras propiedades al Msgbox, tal como se ve explica continuación:Sub MacroMensajes()' Los mensajes que excel puede lanzar se rigen por:' Prompt:="Me llamo Pedro." Enseñaria el mensaje...' Buttons:= VbInformation, O bien' Buttons:= 64' con lo cual Buttons ----> Muestra el icono de mensaje de información.' Title:="Exceluciones:", el título que adjuntaríamos al mensajeMsgBox Prompt:="Me llamo Pedro.", Buttons:=vbInformation, Title:="Exceluciones:"End SubLa macro anterior mostraría un mensaje como el siguiente:Por defecto, un Msgbox siempre incluye el botón "Aceptar", el cual haría desaparecer el mensaje y continuaríaejecutando el código restante si lo hubiera. También podemos configurar para que en lugar del botón "Aceptar"

aparezca un botón de "Ok" y "Cancelar" y de acuerdo al que elija el usuario, la macro continuaría con un código uotro código. Esto lo realizamos agregando la instrucción vbOKCancel, tal como vemos a continuación:Sub Mensaje()Dim Respuesta As Integer Respuesta = MsgBox("Seleccione Aceptar o Cancelar", vbOKCancel)' verificamos si se presionó "Cancelar"If Respuesta = vbCancel ThenMsgBox "Macro caso Cancelar" ' Aquí continuaría la macro en caso de Cancelar End If ' si se presionó "Aceptar"If Respuesta = vbOK ThenMsgBox "Macro caso Aceptar" ' Aquí continuaría la macro en caso de Aceptar End If End SubEl Msgbox anterior se vería así:y al presionar "Aceptar" o "Cancelar" veríamos otro Msgbox.Si quisiéramos separar en varias líneas el mensaje, deberíamos hacerlo con la instrucción &Chr(13):Sub Mensaje()MsgBox "Este es un mensaje " & Chr(13) _ & "escrito en 2 líneas"End SubEl mensaje anterior se vería así:

Page 90: Crear Un Formulario (Varias Fuentes)

Inputbox

Un InputBox se utiliza cuando requerimos un input del Usuario (es decir, cuando esperamos que el usuariointroduzca un dato). Básicamente lo que hacemos es asignarle un valor a una variable, pero le damos el controlal usuario para que asigne dicho valor o dato a gusto.Dentro del InputBox utilizamos las siguientes instrucciones:Prompt: mensaje del InputBoxTitle: título del InputBoxDefault: valor por defecto al abrir el InputBox (si omitimos no aparecerá nada)Type: indica el tipo de dato a introducir (1 Número, 2 Texto, 4 True o False, 5 Rangos)Vamos ahora como queda el InputBox:Sub Nombre()' el dato que proporcionará el usuario quedará registrado por la Variable Respuesta. Como no sabemos que tipode dato es lo definimos como una variable de tipo Variant.Dim Nombre As VariantNombre = Application.InputBox(prompt:="Escriba su nombre", Title:="Colegio de Abogados", Default:="Pedro",Type:=2)Msgbox Nombre ' En lugar de este Msgbox continuaría el resto de la macro...End SubEl InputBox anterior se verá así:FinAquí finaliza la 2º Parte del Manual.

Buscar

Buscar historial:

Buscando…

Resultados00 de00

Page 91: Crear Un Formulario (Varias Fuentes)

00 resultados para resultado para

p.

Crear un Userform for Manual de Macros ExcelManual super completisimo de aplicado a la programación de visual basic en Excel.

Descargar o imprimir

Agregar a colección

70,9K

Reads

635

Readcasts

440

Embed Views

Published by

hunter2040

Seguir

Buscar

NOTA PrensaCtrl-F⌘F para buscar rápidamente en cualquier parte del documento.

Secciones

Page 92: Crear Un Formulario (Varias Fuentes)

Introducción Excel y Macros Una definición sencilla Utilidad de una macro Objetos, Propiedades y Métodos (OPM) Lenguaje VBA Como comenzar Editor VBA Escribir una Macro Mi primera Macro Escribir la macro Ejecutar la macro Comprender la macro Resumen OPM de la macro Grabar una Macro Grabando la macro Escrita vs. Grabada Diferencias Conclusión Macro escrita Macro grabada Ejemplos de Macros Macro 1 Macro 2 Macro 3 El Editor de macros Como acceder Ventana Proyecto Ventana Propiedades Ventana Código Ventana Inmediato Proteger el Código Ejecución de Macros Desde el código Desde menu Desde teclado Desde objetos Desde botones Automáticamente Macros de Eventos Eventos de libros Eventos de hojas Formularios (Userforms) Crear un Userform Controles de un Userform Ejemplo paso a paso Varios

Page 93: Crear Un Formulario (Varias Fuentes)

Ejecutar macro desde macro Depuración y errores Complementos (add-ins) Seguridad de macros Firma digital Macros privadas Acelerar el código Variables Definición Declaración Tipos Locales Públicas Estáticas Constantes Conversión Ejemplos Libros Abrir libros Guardar libros Borrar libros Crear libros Imprimir libros Calcular libros Proteger / Desproteger libros Hojas Agregar Seleccionar hojas Mover hojas Borrar hojas Ocultar / Mostrar hojas Nombrar Proteger / Desproteger hojas Imprimir Hojas Color de Etiquetas Ordenar hojas Rangos Selección de celdas Selección de rangos Selección de filas Selección de columnas Otras selecciones Insertar rangos Borrar rangos Copiar y pegar rangos Nombrar rangos Combinar rangos Ocultar / Mostrar rangos

Page 94: Crear Un Formulario (Varias Fuentes)

Proteger / Desproteger rangos Transponer rangos Ordenar rangos Imprimir rangos Restringir movimiento Scroll Bars Arrays Fijos Bidimensionales Redim Preserve Estructuras Do Loop For Next For Each Next While Wend Go To With End With If Then Select Case DoEvents On Error GoTo On Error Resume Next Built in Dialogs Barras de Herramientas Crear Toolbar PopUp Mostrar / Ocultar Toolbar Menús Crear menú Agregar Controles al menú Comandos Mensajes de alerta Barra de estado Msgbox Inputbox

Información y calificaciones

Categoría Manuales y guías prácticas

Calificación:

4.89796

5

false

false

Page 95: Crear Un Formulario (Varias Fuentes)

(49 Ratings)

Fecha de subida: 02/05/2009

Copyright: Attribution Non-commercial

Etiquetas:

excel

Other

manuals

macros

VBAMarcar documento como inapropiado

Relacionados

12 p.

Excel

elizabethochoa

252 Reads

0

Page 99: Crear Un Formulario (Varias Fuentes)

Debe tenersesión iniciada para dejar un comentario.

Enviar

Caracteres:400

Pablo_Torres_6710

LES AGRADEZCO SU BUENA DISPOSICION GRACIAS

reply06 / 15 / 2012

Roberto Suárez

Muy bueno, me sirvió de gran ayuda. Pero donde está la segunda parte? Un saludo

reply05 / 07 / 2012

deleted_fbuser_1321373945

Hola no se si podria descargar el manual de una manera gratuita ... lo necesito bastante es un material sumamente importante gracias ojala y accedan a mi peticion

reply10 / 21 / 2010

deleted_fbuser_1321363423_2

is reading Manual de Macros Excel.

reply10 / 02 / 2010

json

Page 101: Crear Un Formulario (Varias Fuentes)

Enviar

Caracteres:...

Deseo recibir las noticias de Scribd y otros mensajes ocasionales relacionados a mi cuenta.

Sobre

About Scribd Blog ¡Únase a nuestro equipo! Contact Us

Publicite con nosotros

Primeros pasos AdChoices

Soporte

Ayuda PUF Prensa

Socios

Editores Desarrolladores / API

http://w w w .scrib http://w w w .scrib

535213e651017b http://w w w .scrib default

535213e651017b

535213e651017b

Page 102: Crear Un Formulario (Varias Fuentes)

Legal

Condiciones Privacidad Copyright

© Copyright 2012 Scribd Inc.Idioma:

Español

scribd. scribd. scribd.

< div style="display: none;"><img src="http://pixel.quantserve.com/pixel/p-13DPpb-yg8ofc.gif" height="1" width="1" alt="Quantcast"/></div>

UserForm con botones maximizar y minimizar0

19 ago 2010

Excel VBA,Macros Excel

by avalencia

Hola ¿Cómo están?

Una pregunta muy frecuente entre los usuarios de Microsoft Excel que ya se aventuraron en usar

el Visual Basic para Aplicaciones (VBA) que viene con él y que han comenzado, a su vez, a usar

los formularios de usuarios de VBA (UserForm), es que como le agregan a este los “clásicos”

botones del Windows de maximizar y minimizar, ya que estos no los traen.

Lo primero es decir, que si se pueden agregar dichos botones, lo segundo será decir que no es

difícil y lo tercero será decir que aunque no es difícil hay que usar funciones de la API de

Windows, que a algunas y algunos les podría parecer un misterio.

Bueno, para empezar algunas definiciones rápidas:

1- API: Interfaz de programación de aplicaciones, que es un conjunto de funciones residentes en

bibliotecas que permiten que una aplicación se ejecute en un sistema operativo. Se utilizan para

realizar tareas cuando resulta difícil escribir procedimientos equivalentes con el código propio

del programa que se está usando.

2- FindWindow: Función del API de windows que nos Devuelve el “Handle” de la ventana que

coincida con la clase y nombre indicados

Page 103: Crear Un Formulario (Varias Fuentes)

3- GetWindowLong: Función del API de windows que obtiene las características de la ventana que

se le indica

4- SetWindowLong: Función del API de windows que modifica un atributo de la ventana

especificada

5- Thunderdframe: Nombre de la “clase” de los Userform del VBA de Excel (A partir del Excel

2000).

¿Y qué hacemos ahora? Pues, simplemente agregamos nuestro UserForm, vamos a él,

presionamos F7 para ver su modulo y agregar código, y pegamos lo que coloco a continuación:

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"

(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SetWindowLong Lib "user32" Alias

"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal

dwNewLong As Long) As Long

Private Declare Function GetWindowLong Lib "user32" Alias

"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Const WS_MINIMIZEBOX As Long = &H20000

Private Const WS_MAXIMIZEBOX As Long = &H10000

Private Const GWL_STYLE As Long = (-16)

Private Sub UserForm_Initialize()

Dim lngMyHandle As Long, lngCurrentStyle As Long, lngNewStyle As Long

'Obtenemos el "Handle" del Userform

lngMyHandle = FindWindow("THUNDERDFRAME", Me.Caption)

Page 104: Crear Un Formulario (Varias Fuentes)

'Obtenemos el estilo actual del UserForm

lngCurrentStyle = GetWindowLong(lngMyHandle, GWL_STYLE)

'Creamos un nuevo estilo de titulo con los botones deseados

lngNewStyle = lngCurrentStyle Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX

'Aplicamos las nuevas propiedades al UserForm

SetWindowLong lngMyHandle, GWL_STYLE, lngNewStyle

End Sub

El resultado una vez insertado el código es como el mostrado en la imagen anexa:

Page 105: Crear Un Formulario (Varias Fuentes)

Algo importante y que sirve para obtener mejores resultados, es colocar la propiedad

“ShowModal” de nuestro UserForm en “False”. Ahora si, disfruten de las nuevas propiedades de

su Userform.

Nota: Si no me equivoco, la primera vez que vi el uso de código para obtener este resultado, era

obra de Daniel Klann

Saludos y Éxito

El Equipo de EXCELLENTIAS.COM

Pegar contenido de Combobox

Experto Este código hace que cuando selecciones una opción del combo se copie ese dato a la celda A1 de la hoja en la que te encuentres. Private Sub ComboBox1_Change() Range("a1").Value = Me.ComboBox1.Text End Sub Usuario Bueno mil gracias por la ayuda pero ahora necesito escoger varios valores de la lista desplegable y copiarlos a celdas. Por ejemplo: Escoger dos o más países : argentina, españa y chile de la lista y que cada uno se copie a distintas celdas y así poder tener en mis tres celdas los tres países que escogí. Ahora solo escojo uno y me copia en una celda y escojo otro y se cambia o sino esojo uno y se repite en las tres celdas. Por ayúdeme, necesito urgente! Y muchísimas gracias!

Experto Hola aquí hay una posibilidad pruébalas y me avisas: Private Sub ComboBox1_Change() fila = 1 Do While True If IsEmpty(Cells(fila, 1)) Then Exit Do fila = fila + 1 ' Loop Cells(fila, 1).Value = Me.ComboBox1.Text End Sub

Private Sub ComboBox1_Click() 'Send the data to cell A28 'envía el dato a la celda A28

Page 106: Crear Un Formulario (Varias Fuentes)

Range ("A28"). Value = ComboBox1.Value Range("A28").Value = ComboBox1.Value 'Sends the data to the cell of another sheet A28 'envía el dato a la celda A28 de otra hoja Sheets ("tuHoja.") Range ("A28"). Value = ComboBox1.Value Sheets("tuHoja").Range("A28").Value = ComboBox1.Value End Sub End Sub

Concatenar

=A2&" vendió "&B2&" unidades." Combina el contenido anterior en una frase (Buchanan vendió 28 unidades)

=A3&" vendió "&TEXTO(B3,"0%")&" de las ventas totales."

Combina los elementos anteriores para construir una frase (Dodsworth vendió el 40% de las ventas totales)

=CONCATENAR(A2," vendió ",B2," unidades.")

Combina el contenido anterior en una frase (Buchanan vendió 28 unidades)

Private Sub ComboBox1_Click()

'Copia el nombre de la planta a la celda

Worksheets("Datos").Range("C5").Value = Me.ComboBox1.Text

End Sub

Private Sub ComboBox2_Click()

'Copia el día a la celda

Worksheets("PRO").Range("H2").Value = ComboBox2.Value

End Sub

Private Sub ComboBox3_Click()

'Copia el mes a la celda

Worksheets("PRO").Range("n2").Value = ComboBox3.Value

Page 107: Crear Un Formulario (Varias Fuentes)

End Sub

Private Sub ComboBox4_Click()

'Copia el año a la celda

Worksheets("PRO").Range("J2").Value = ComboBox4.Value

End Sub

Page 108: Crear Un Formulario (Varias Fuentes)