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

Formularios inteligentes

Hoy vamos a ver una de esas cosas que podemos hacer con excel, y que tanto le gusta a esos usuarios que se mandan cadenas, ficheros de power point, y chorradas por el estilo. La utilidad de lo que hoy os presento, es un poco discutible, pero sirve para ver las aplicaciones que le podemos dar a un Userform (un formulario de usuario).

En esta ocasión, os presento un fichero de excel, que al abrirse, ejecuta un Userform y se lo presenta al usuario. Sí, quizás pienses que es un poco oportunista el título de este artículo, porque no hay formularios inteligentes, y quizás fuese más apropiado el uso del término "interactivo", para describir más correctamente el comportamiento del Userform, pero he preferido darle ese título, para que leáis más detenidamente lo que os presento.

La imagen que vemos a continuación es lo que se mostrará al usuario, en el momento de abrir el fichero en cuestión:


La gente normal -entre ellos tú-, jamás pulsaría sobre el botón que pone "Sí, es cierto, me escaqueo siempre", porque nunca pierde el tiempo navegando por internet desde la oficina :-)

Tú, como eres un empleado eficiente, pincharías sobre el botón "Que va, soy muy trabajador, mucho, mucho, mucho".

Pero, …¿qué pasaría si cada vez que acercásemos el puntero del mouse al botón que pone "Que va, soy muy trabajador, mucho, mucho, mucho", éste se desplazase a otra zona del formulario?. ¿Qué pasaría si al acercarnos a ese nuevo emplazamiento, el botón volviera donde estaba inicialmente?. Así a bote pronto, se me ocurre que podemos hacer alguna entre estas tres cosas:

1.- Dejar el ordenador encendido eternamente, por si un día el botón se cansa, y decide no moverse.

2.- Intentar cliquear sobre el botón, tantas veces y tan rápidamente como puedas, porque tu paciencia es infinita y tus reflejos son impresionantes. Quizás acabes un día, haciéndole clic al botón.

3.- Pulsar el botón "Sí, es cierto, me escaqueo siempre".

Te aconsejo que no pruebes ni la opción 1, ni la 2, pero si las pruebas, me gustaría que dejases un comentario contándonos esa maravillosa y paranoica experiencia.

Como la opción 3 es la más racional, solo nos quedará cliquear sobre el botón "Sí, es cierto, me escaqueo siempre", y ¡¡¡alehop!!!, nos aparecerá un bonito mensaje a través de un MsgBox. Para conseguir todo esto, lo primero que tenemos que hacer, es crear el formulario (desde el menú Insertar, y eligiendo la opción Userform), con el texto, y los botones que habéis visto en la imagen anterior. Seguidamente cliquearemos sobre el botón de la izquierda, que tiene por nombre Boton1 (el del mensaje "Sí, es cierto, me escaqueo siempre"), y pegaremos este código:


Private Sub Boton1_Click()
Formulario1.Hide
MsgBox (Chr(13) + " Bueno, te dejo, pero antes te hago un regalo... " _
+ Chr(13) + " Te abro 10 libros nuevos ¿vale?. " _
+ Chr(13) + Chr(13) + " Ya que no tienes mucho trabajo, esto es para " _
+ Chr(13) + " que te entretengas en cerrarlos. " _
+ Chr(13) + Chr(13) + " (Pasa por mi despacho, que te daré el finiquito) " _
+ Chr(13) + " Fdo: TU JEFE " _
+ Chr(13) + Chr(13)), vbOKOnly, " "
For i = 1 To 10
Workbooks.Add
Range("B2").Select
ActiveCell = "HALA, A CERRAR EL LIBRITO DE LAS NARICES..."
Next
End Sub

Seguidamente pegaremos este otro código a continuación. Lo que hace este código, es imposibilitar que el usuario cierre el Userform, cliqueando sobre la crucecita de cierre que aparece junto al título del formulario, arriba a la derecha:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If ModoCerrar <> 1 Then Cancel = 1
End Sub

Pegaremos a continuación este otro código, que hace que el botón que aparece a la derecha en el formulario, es decir, el botón llamado Boton2 (el del mensaje que pone "Que va, soy muy trabajador, mucho, mucho, mucho"), se desplace hacia arriba o hacia abajo, cada vez que nos acerquemos a él:

Private Sub Boton2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Boton2.Top = 125 And Boton2.Left = 155 Then
Boton2.Move 155, 15
Else
Boton2.Move 155, 125
End If
End Sub

Finalmente, dentro de ThisWorkbook pegaremos este código que lanza el Userform, al que le he puesto por nombre Formulario1, cada vez que abrimos el fichero:

Private Sub Workbook_Open()
Formulario1.Show
End Sub

De tal forma que este último código lo tendremos como muestra la siguiente imagen:


Desde aquí podéis descargar el fichero de excel, con el ejemplo que os presento, y por supuesto, con todo el código de este artículo.



7 comentarios:

Anónimo dijo...

Hola Javier. Te escribo desde Galicia Calidade. Me encantan tus artículos de excel. Absolutamente brillante. Hay muchos de ellos que me son de gran utilidad.
Te propongo un reto: en su día encotré una macro para excel que importaba un documento txt a formato excel. Lo bueno de la macro es que en una celda determinada había que escribir la ruta y el nombre del archivo txt que tenía que transformar a xls. Ejemplo:escribias en una celda la siguiente ruta C:\Users\Usuario\Documents\archivo.txt

La macro abría ese archivo y lo convertía a xls

Me sería de gran utilidad esa macro.

Te animo a seguir "inventando" macros.

un saludo cordial

José Luis

Javier Marco dijo...

Gracias por tu comentario.

Mira este artículo sobre como leer un fichero de texto plano.

El tema de como obtener una ruta alternativa, en lugar de utilizar la misma ruta que tenga el fichero excel, es muy sencillo de obtener. Te propongo que investigues un poco. Si no consigues solucionarlo, veremos que se puede hacer.

Salu2

Luciano dijo...

Muchas gracias por los articulosdetu página. Etoy empezando en Officce y me son de gradísma utilidad.
Luciano

Javier Marco dijo...

Muchas gracias por tu comentario.

Un saludo.

Alex Gustavo Chiguay Pérez dijo...

Hola Javier Marco, enrealidad tu blog es muy interesante, felicitaciones.

Quería preguntarte si tienes algo sobre un problema que tengo que resolver en excel. el problema consiste en lo siguiente:

tengo una fila con unos cuantos miles de registros, dentro de cada celda tengo datos como los siguiente

en una celda tengo esto Mant.Semanal ISO 9001

en otra celda tengo algo como esto
Mant.Quincenal ISO 14001

y te doy el ultimo ejemplo
Man.Plan/4Sem/ISO9001/14001(Ana.pHagua )

entonces lo que se me ah asignado es crear en una fila de al lado de esos datos un campo llamado NUMERO DE SEMANAS, el cual va a depender de dicho campo que te mencione anteriormente ejemplo de los 3 ejemplos que te di deberian quedar asi..

[DESCRIPCION] [Nro DE SEMANAS]

[Mant.Semanal ISO 9001] [1]
[Mant.Quincenal ISO 14001] [2]
[Man.Plan/4Sem/ISO9001/14001 [1](Ana.pHagua )]

ENTONCES, la consulta es la siguiente como, puedo dar la orden por medio de una macro en VB o por medio de una funcion en excel para crear la columna NUMERO DE SEMANAS.

Por lo que entiendo tengo que preguntar por la fila DESCRIPCION y preguntar que si dentro de la celda esta la frase Sem o Semanal segun sea el caso le asigne un 1 al campo NUMERO DE SEMANAS y si dice Quin ó Quincenal debo asignarle un 2 en la columna NUMERO DE SEMANAS... tienes idea de como puedo hacer eso?, si sabes te lo agradecería, Mi correo es ifmutc@gmail.com ,

suerte y nuevamente felicitaciones por tú pág. Web.

Javier Marco dijo...

Suponiendo que en la celda A1 tengas esto:

A1 = Mant.Semanal ISO 9001

Pon esta fórmula en B1:

B1 = =SI(ESERROR(HALLAR("sem";MINUSC(A1)));SI(ESERROR(HALLAR("quincenal";MINUSC(A1)));"no disponible";2);1)

El tema de "(Ana.pHagua)" no me ha quedado muy claro, pero con esta idea que te he dado, puedes investigar un poco.

Salu2

Diego Flores Yarlequé dijo...

YO LE DI TAB Y PRESIONE ENTER XD, PERO ESTA MUY BUENO