Hojas de cálculo en Excel - página principal

Mi primer UserForm

Un UserForm es un formulario de usuario. ¿Y qué es un formulario de usuario?. Pues un objeto que se nos presenta en pantalla, como puede serlo una ventana emergente, un Inputbox, un Msgbox, etc., y que tiene como finalidad preguntarnos algo o mostrarnos alguna información. El usuario debe interactuar con ese formulario, normalmente pulsando algún botón, el de aceptar, rechazar, o cualquier otro que el programador haya incluido en el mismo.

Para incluir un UserForm, deberemos acceder al modo VBA (Alt+F11), y seleccionaremos en el menú Insertar la opción UserForm.

De esa forma obtendremos algo como esto:


Una vez hecho eso, podemos cambiarle el nombre al UserForm, porque por defecto nos habrá salido este nombre: UserForm1 (siempre y cuando sea el primer UserForm que hemos creado en el libro). Para cambiar el nombre, seleccionaremos en Propiedades (ver parte inferior izquierda de la imagen anterior), la propiedad Name, y donde pone UserForm1, le pondremos el nombre que deseemos, pero si es un nombre compuesto, deberá ir sin espacios (podemos usar el guión bajo por ejemplo).

En la imagen anterior podéis ver también el Cuadro de herramientas flotante. Podremos introducir texto, desplegables, imágenes, botones, y cualquier otro elemento que aparece en esa ventana flotante.

Vamos a hacer algo como esto:


Para introducir el texto que aparece en la imagen, deberemos seleccionar el botón con la A mayúsculas llamado Etiqueta (al acercar el puntero del ratón nos aparece el nombre), y que figura en el Cuadro de herramientas. Para cambiar el tamaño de la letra mostrada en el UserForm, una vez introducido el texto, debéis seleccionar la propiedad Font, …desde ahí podréis cambiar el tipo de letra y el tamaño. Para introducir el botón al que le hemos puesto el texto de Aceptar, seleccionaremos en el Cuadro de herramientas el botón llamado Botón de comando. Desde las propiedades del botón (ver la ventana llama precisamente así, Propiedades), y con el botón seleccionado, elegiremos la propiedad Caption, y a la derecha, donde pone CommandButton1, pondremos Aceptar, o cualquier otro texto que deseemos.

Ahora solo nos queda por ver como funciona el UserForm, para lo cual pulsaremos el botón que aparece debajo de las opciones de menú, llamado Ejecutar macro (el botón con la flecha azul).

Antes de guardar nuestro fichero de Excel, vamos a hacer un par de cosillas más. Pulsaremos el botón Aceptar que hemos creado, y nos aparecerá una pantalla como esta:


En esa pantalla que nos aparece, introduciremos este código:


Private Sub CommandButton1_Click()
'Ocultamos el formulario.
'Si le hemos cambiado el nombre, en lugar
'de UserForm1, le pondremos el que tenga.

UserForm1.Hide
End Sub

Ahora, si por ejemplo, queremos que cada vez que al abrir el fichero de Excel, se nos presente ese formulario, deberemos incluir este código en un módulo:

Sub auto_open()
'Llamamos al UserForm.
'Si le hemos cambiado el nombre, en lugar
'de UserForm1, le pondremos el que tenga.

UserForm1.Show
End sub

Para verlo funcionar, grabaremos el fichero, y lo cerraremos. Seguidamente abriremos de nuevo el fichero y nos aparecerá en pantalla el formulario (show). Si pulsamos sobre el botón de aceptar, se ocultará el UserForm (hide).



10 comentarios:

Neil dijo...

Sensacionalmente explicado,..., este codigo VBA valdría igualmente para Access... supongo ?

Saludos

Anónimo dijo...

hola javier de nuevo, vengo trabajando con formularios hace un tiempo, y en un caso especial, tengo un formulario de una macro en un libro compartido. Entre los diferentes usuarios que lo utilizan, hay alguna forma que se puedan mandar mensajes entre ellos mismos por formularios de excel?? como un messenger interno, o lo que mas se acerque a esa idea.

Este caso va por que unos analistas de creditos necesitan intercambiar bastante informacion en su dia dia, y en poder mandarse informacion instantanea seria muy util.
A la espera de tu respuesta
Atte.
Augusto

Javier Marco dijo...

Con excel, creo que es imposible. Se necesita una aplicación de comunicaciones, y excel no lo es.

JUAN LIBREROS dijo...

Hola Javier, tengo la siguiente duda: como hago para evitar que mi formulario se pueda mover? es decir que se pueda arrastrar desde la barra de título? algo aí de una opción "moveable" que había en la tabla de propiedades, pero no la vi en mi vba. debe haber un código para ello, no?

Javier Marco dijo...

Hola Juan.

Orueba esto:

Private Sub UserForm_Layout()
'situamos el Userform1 en la posición 300 x 200 pixels
UserForm1.Move 300, 200
End Sub

Saludos

miguelon dijo...

Hola Javier ! ¿Pueden relacionarse las celdas de una hoja con un userform? Me explico, puedo ordenar que en vez de que, por ejemplo, Label1 tenga un texto escrito manualmente, lo esté según el valor o texto de una celda?

Javier Marco dijo...

Por supuesto. Prueba con algo como esto:

Private Sub UserForm_Activate()
Label1 = Range("A1")
End Sub

Miguelon dijo...

Genial Javier! Aprovecho otra pregunta: ¿Cómo fijar el Userform?

Private Sub UserForm_Layout()
Me.Move 100, 100
End Sub

Eso lo tengo claro, pero quiero verticalmente 50, y horizontalmente CENTRADO... Te pongo a prueba ajajjaj. Mil gracias

GESTIONES CREDITICIAS ALGACA dijo...

hola, favor ayudarme en la creación de un macro que me permita crear un textbox que al introducirle un nombre de una lista existente en una hoja de excel llame o aparezca la hoja correspondiente a dicho nombre, dentro del mismo libro. adios gracias por la ayuda.

Anónimo dijo...

Hola amigo me gustaia que me brindes tu ayuda he creado un form en excel y al momnento de abrirlo se me ocultan mis demas libros ya abiertos crees que haya algun codigo vba para que mi form se abra independiente de mis demas libros ya abiertos. gracias de antemano por tu ayuda y espero tu respuesta ..