Puede descargar el fichero: UserForm.xlsm
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.
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.
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.
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
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.
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.
En el desplegable de la derecha podemos elegir diferentes eventos.
El UserForm2 es el siguiente.
El código del UserForm2 se muestra en la siguiente imagen.
El UserForm3 es el siguiente.
El código del UserForm3 se muestra en la siguiente imagen.
muy buena la explicacion, basica para dar inicio a la introduccion a los userform, muuuuuuy buena
ResponderEliminarGracias Ingeniero por el aporte, de una utilidad invaluable. Esta es la base para hacer tablas mas complejas...muy buen inicio..
ResponderEliminarSoy principiante en los userfomr, me gustaria que me ayudaran a contactar a mi correo robiervalencia@gmail.com para aclarar algunas dudas, mi skype ramavaro Gracias
ResponderEliminarMuy 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: rafa1122000@hotmail.com ;
ResponderEliminarrafa1122000@gmail.com y bhmasociados@cantv.net
Esperando tu respuesta
Rafael
Adjunto te dejo la programación para evitar que se repitan los nombres de las personas. Esto debes pegarlo justo en el USERFORM2 ( Abajo de Nombre = TextBox1 ) :
EliminarDim eMail As String
Nombre = TextBox1
Z = Cells(Rows.Count, 2).End(xlUp).Row
Range("B6").Select
For k = 1 To Z - 6
Range("B6").Select
ActiveCell.Offset(k, 0).Select
If ActiveCell.Value = Nombre Then
MsgBox ("El nombre se repite")
End If
Next k
Departamento = TextBox2
Extension = TextBox3
eMail = TextBox4
Para evitar repetidos consulta este post:
ResponderEliminarImpedir repetidos
Buen día Ingeniero
ResponderEliminarExcelente 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
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.
ResponderEliminarse puede ? y como lo ago?
seria de gran ayuda gracias
Primero debes crear un userform con un botón para buscar. Dentro del botón colocas el siguiente código:
EliminarPrivate Sub CommandButton1_Click()
Dim cont As Integer
Dim colum As Integer
buscar = InputBox("Ingrese el texto a buscar:")
colum = InputBox("Ingrese el número de columna donde buscar:")
Z = Cells(Rows.Count, 2).End(xlUp).Row
cont = 0
Range("B6").Select
For k = 1 To Z - 6
Cells(6, colum).Select
ActiveCell.Offset(k, 0).Select
If ActiveCell.Value = buscar Then
cont = cont + 1
MsgBox "Se encontraron " & cont & " coincidencias."
TextBox1 = buscar
End If
Next k
End Sub
Este comentario ha sido eliminado por el autor.
EliminarHola Sr. Adolfo Buenas tardes.. me llamo Eli.. tengo un codigo para busqueda que no logro que de un buen resultado.. quiza me puedan ayudar..
ResponderEliminar---------------------------------
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
End If
End Sub
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 !!
ResponderEliminarno 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..
ResponderEliminarBuenas Tardes Ing.Arnulfo,
ResponderEliminarexelente ejemplo, pero como le puedo hacer para que los datos me los inserte a SQL 2005. Seria de gran ayuda grax!
como puedo hacer que un cuadro de lista , dependa de un cuadro combinado, es decir, al seleccionar ej: un nombre en el combobox de una persona, en el cuadro de lista aparesca su respectiva información, sea esta direccion, telefono, etc.
ResponderEliminarGracias!
Buenos Días, gracias por la explicación, me ha ayudado mucho. Quisiera pedirle un favor, necesito crear un formulario donde una vez introducidos todos sus datos me dirija a un determinado archivo que ya está creado, es decir, yo tengo una serie de documentos en pdf y necesito encontrarlos de forma rápida, creo que a través de un formulario de datos y con un hipervinculo podría resultar. Gracias de antemano
ResponderEliminarAdolfo, hace unas semanas sigo fielmente tu blog para un sistema de remuneraciones que estoy haciendo. Te felicito!!
ResponderEliminarSabes, a mi me sale un error que segun he visto en foros de MS, es muy recurrente y se debe a falta de fm20.dll... Todo lo que he leido al respecto, es al problema de que no esta tal dll... pero yo si lo tengo en System32... Tengo W7 y Office 2010, todas sus actualziaciones al dia y ya no se que hacer... Si me redirigieras a un enlace donde poder solucionar, o tu tuvieras la solucion... Te lo agradeceria muchisimo!!
Muy buena aportacion, me gusta mucho el Blog ya que estoy aprendiendo mucho de excel.. me gustaria tu ayuda quiero aprender a realizar formularios para rellenar pero no se como hacer para imprimirlos en paginas que ya tienen datos.. osea solo lo rellenado que se imprima si me puedes ayudar o dar un link donde pueda ver como hacer te lo agradeceria mucho..
ResponderEliminarSr. Adolfo,
ResponderEliminarmuchas gracias por este Blog es de gran utilidad.
Tengo una duda, si ya tengo mas e 3000 contactos en excel y quiero introducirlos a traves de un User Form, hay alguna forma de hacerlo automaticamente?
O deben ser 1 a 1?
Sino, que sugiere? Access?
SAludos desde Africa,
Erika
Muchisimas gracias!. Me sirvió de mucho para generar datos en inventarios.
ResponderEliminarSaludos master!
Excelente aporte. En lo personal estoy interesado en utilizar algún procedimiento parecido pero para PowerPoint.
ResponderEliminarEn otras palabras, ofrecer un PPT a un usuario para que al completar un formulario pueda luego insertarlo en una base de datos.
Me pregunto si las técnicas que comentas aquí pueden ser trasladadas a PowerPoint VBA.
Muy buena explicación, me ha servido de base para hacer mi propia macro. Me gustaría saber si se pudiera agregar un botón para "adjuntar un archivo" que al darle click aparezca una ventana en donde se puede buscar la ubicación de dicho archivo, después crear un botón para aceptar y que en la hoja de cálculo aparezca como un hipervínculo en una celda donde la macro vaciará el nombre de la persona que se registra. De antemano gracias por la atención prestada
ResponderEliminaruso 2010 funciona bien y la adapte un poco con controles pero no encuentro en controles y useform como agregar un box de dato numerico
ResponderEliminarhola...te agradeceria tu colaboracion.
ResponderEliminarbusco pasar de una pagina a otra con un combobox
busque en internet y encontre este Ej:
Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Select
End Sub
Private Sub UserForm_Activate()
Dim Hoja As Worksheet
For Each Hoja In ActiveWorkbook.Sheets
ComboBox1.AddItem Hoja.Name
Next Hoja
Set Hoja = Nothing
End Sub
funciona bien y se hubica en la hoja al darle click,pero el problema es que tengo un libro con muchas hojas y se me es dificil cambiarles el nombre de numero de hojas (HOJA1,HOJA2....)a las pestañas POR UN DETERMINADO NOMBRE O PRODUCTO.
Entonces organice la formula de esta forma, cambie esta parte y la puse asi:
ComboBox1.AddItem Hoja.range("z1")
porque?...en estas celdas de todas las hojas tengo nombres o productosy que con el combobox me aparecerian como una lista...y asi es ....y si sucede; aparece la lista pero biene lo malo;no se va a esa hoja determinada y al darle click aparece el error y se va por depuracion a esta parte de la formula:
Sheets(ComboBox1.Value).Select
mi pregunta; que parte de la formula esta mal enfocada que no selecciona la hoja y ocurre el error .gracias por su atencion
buen dia Ingeniero, su explicacion me aclaro muchas dudas para crear mis primeros userforms, me plantee una pregunta, es posible que este userform lo manejen hasta 4 o mas personas a la vez, pero que toda la informacion que introduzcan vaya a un libro diferente a donde esta la userform y si es asi podria iluminarme en como hacerlo?
ResponderEliminarEstimado Eduardo.
ResponderEliminarExcel no es una aplicación que funcione bien como multiusuario. Para ello es recomendable utilizar Access que si es multiusuario.
Aunque lo realmente aconsejable es la programación de un Formulario Web utilizando alguno de los lenguajes de programación clásicos que permiten crear aplicaciones en Web, como son: PHP, JAVA, ASP.
Por ejemplo, se podría hacer una aplicación en PHP y con base de datos MySQL que luego se podría tratar con Excel. Esto es lo realmente recomendable, así podría crear una aplicación realmente profesional multiusuario y deslocalizada.
Un saludo.
Muchas gracias Adolfo por este instructivisimo aporte
ResponderEliminarSaludos
Excelente información. Como se podría actualizar la información que ya se ha guardado por medio de un userform.
ResponderEliminarIng. Muy buena explicacion y muy buen aporte para todos los que quieren seguir aprendiendo, le agradezco su apoyo.
ResponderEliminarBUENAS TARDES ESTIMADO ADOLFO
ResponderEliminarUNA CONSULTA. EL FORMULARIO FUNCIONA BIEN, PERO COMO YA TENGO MAS DE 5MIL FILAS, CADA VEZ QUE INGRESO, LEE DESDE EL INICIO, HASTA EL FINAL Y DEMORA UN POCO. COMO HACER PARA QUE VAYA DIRECTO A LA ULTIMA FILA SIN ESE RECORRIDO
SALUDOS Y MUCHAS GRACIAS
JACK
Buenas noches, excelente tutorial.Tengo una consulta, tengo un formulario en excel , el cual quiero llenar mediante un userForm; el formulario de excel tiene CheckBox y quisiera saber como hago para tachar ese CheckBox mediante el UserForm.
ResponderEliminargracias
Buenas tardes, excelente tutorial. Agradezco me indiques como hacer para que el nuevo registro se guarde no debajo del anterior, sino que quede de primero en la lista. Gracias
ResponderEliminarSí para crear una base de datos es realmente conveniente. Gracias por compartir información y video. Porque mi profesor de ciencias de la computación me dio una tarea similar. Además, hice una presentación sobre bases de datos utilizando mejores Plantillas de PowerPoint en poweredtemplate.com . Pero recuerdo poca información. De hecho, planeo estudiar la programación con más detalle.
ResponderEliminarHola quisiera saber si me puede ayudar xon lo siguiente.
ResponderEliminarDespliego dos userform y cuando relleno los datos de ambos userform, en el segundo tengo el boton guardar donde llame los datos de ambos userform pero solo registrar los del segundo. Los datos del primero no los toma en cuenta. Como puedo decirle al boton guardar ubicado en el segundo userform, que me almacene los datos de ambos userform
Tengo un problema, me lo marca en el UserForm3, al momento de presionar el boton, en mi casa "guardar", no me pasa los datos escritos a Excel, aparece señalando la Linea Worksheets("Base").Active, NO SOPORTA ESA METODO, es lo que dice, espero me puedas ayudar
ResponderEliminarPuede una userform alimentar dos bases de datos??
ResponderEliminar