Crear Formulario Excel (ayuda a un principiante)

Gurús del excel, estoy trabajando en un formulario de ingreso de datos y mi intención es aprender todo sobre la herramientas de formularios.
El objetivo del formulario es entregar un código al usuario que lo ejecute y almacenar en otra hoja los datos ingresados.
Los Datos a ingresar por el usuario serán
-Fecha
-Nombre Responsable
-Empresa
-Área de Ventas
-Total Monto
-Periodo Facturación
-Servicio Cotizado
-Aréa de Ventas
Enumerare mis consultas, ya que son muchas .
1.- Lo primero es consultar como lograr que los datos se almacenen en otra hoja (distinta a la cual se mostrará el formulario)
2.- Respecto a la fecha. Me gustaría deshabilitar en el formulario la opción de modificar este "textbox" y que se detectará la fecha desde el ordenador.
3.- Para el campo "Área de Ventas" y "servicio cotizado" tengo la idea de aplicar "ComboBox" o como los conozco, listas desplegables, las cuales según sea la selección sera el dato que se guardara en mi "otra hoja". Mi consulta entonces es como creo esta "Lista desplegable" y como agrego los datos que deben estar disponibles.
4.- Por ultimo y lo más importante de este formulario, como puedo lograr que una vez activado el Botón Guardar aparezca un cuadro con el "codigo" otorgado .

1 respuesta

Respuesta
1
Como estas amigo, voy a tratar de responder todas tus inquietudes
Crea un formulario con 3 textbox, un combobox y un botón
Private Sub UserForm_Activate()
TextBox1.Text = Date ' AQUI LEES AUTOMATICAMENTE LA FECHA DEL SISTEMA
TextBox1.Enabled = False
ComboBox1. AddItem "Area de ventas 1" 'INGRESAS OPCIONES EN EL COMBO ComboBox1. AddItem "Area de ventas 2"
ComboBox1.AddItem "Area de ventas 3"
ComboBox1.AddItem "Area de ventas 4"
End Sub
Private Sub CommandButton1_Click()
' COPIAS LOS DATOS A LA HOJA2
Sheets("hoja2").Range("a2").Value = Sheets("hoja2").Range("a1").Value + 1
Sheets("hoja2").Range("c2").Value = TextBox2.Text
Sheets("hoja2").Range("d2").Value = TextBox3.Text
Sheets("hoja2").Range("e2").Value = ComboBox1.Value
' DAS MENSAJE CON NUMERO DE CODIGO
MsgBox "El codigo es: " & Sheets("hoja2").Range("a2").Value
End Sub
Espero que esto te sirva para comenzar tu proyecto, cualquier otra duda estamos a la orden
Muchas Gracias, la cosa ya se esta armando :D
Private Sub CommandButton1_Click()
Sheets("hoja2").Range("a2").Value = Sheets("hoja2").Range("a1").Value + 1
Sheets("hoja2").Range("B2").Value = TextBox1.Text
Sheets("hoja2").Range("c2").Value = TextBox2.Text
Sheets("hoja2").Range("d2").Value = TextBox3.Text
Sheets("hoja2").Range("e2").Value = TextBox4.Text
Sheets("hoja2").Range("f2").Value = ComboBox1.Value
Sheets("hoja2").Range("g2").Value = ComboBox2.Value
MsgBox "El codigo es: " & Sheets("hoja2").Range("a2").Value
End Sub
Private Sub UserForm_Activate()
TextBox1.Text = Date
TextBox1.Enabled = False
ComboBox1.AddItem "EQUIPO DE VENTAS"
ComboBox1.AddItem "EQUIPO DE MANTENCION"
ComboBox2.AddItem "MENSUAL"
ComboBox2.AddItem "UNICA"
End Sub
Ahora las dudas son :
1.- Una vez entregado el código el archivo se debe guardar y abrir el cuadro inicial en blanco.
2.- Así también una vez cerrado el cuadro la aplicacón automáticamente debe pasar la fila 3 y así sucesivamente para todas las veces que se guarden datos en la hoja 2, ya que según veo en la instrucción acá estaríamos pisando siempre sobre la fila 2.
Bacter, quedo atento a tus comentarios y desde ya muchas gracias.
Como estas, me imagine que ibas a necesitar que fuera grabando la información en nuevas filas, aquí te pongo una manera sencilla. Espero te sirva.
Private Sub CommandButton1_Click()
dim ultimo as integer
ultimo=buscar_ultimo
Sheets("hoja2").cells(ultimo,2).Value = Sheets("hoja2").cells(ultimo-1,2)..Value + 1
Sheets("hoja2")cells(ultimo,3).Value = TextBox1.Text
' sigues asi con los demas
MsgBox "El codigo es: " & Sheets("hoja2").Range("a2").Value
' para dejar el cuadro nuevamente en blanco
textbox2.text=""
textbox3.text=""
textbox4.text=""
combobox1.value=""
End Sub
Function buscar_ultimo() As Integer
Dim i As Integer
While (Sheets("hoja2").Cells(i, 1).Value <> "")
i = i + 1
Wend
buscar_ultimo = i
End Function
Bacter, siguiendo tus instrucciones ( o como yo lo entendí) ahora no logro ni siquiera que me grabe los datos.
Te dejo código. Desde ya gracias .
Private Sub CommandButton1_Click()
Dim ultimo As Integer
ultimo = buscar_ultimo
Sheets("hoja2").Cells(ultimo, 2).Value = Sheets("hoja2").Cells(ultimo - 1, 2).Value + 1
Sheets("hoja2").Cells(ultimo, 3).Value = TextBox1.Text
Sheets("hoja2").Cells(ultimo, 4).Value = TextBox2.Text
Sheets("hoja2").Cells(ultimo, 5).Value = TextBox3.Text
Sheets("hoja2").Cells(ultimo, 6).Value = TextBox4.Text
Sheets("hoja2").Cells(ultimo, 7).Value = ComboBox1.Value
Sheets("hoja2").Cells(ultimo, 8).Value = ComboBox2.Value
' sigues asi con los demas
MsgBox "El codigo es: " & Sheets("hoja2").Range("a2").Value
' para dejar el cuadro nuevamente en blanco
End Sub
_________________________________
Function buscar_ultimo() As Integer
Dim i As Integer
While (Sheets("hoja2").Cells(i, 1).Value <> "")
i = i + 1
Wend
buscar_ultimo = i
End Function
Si me di cuenta que me faltaron algunas lineas
Aquí te dejo el código probado.
Private Sub CommandButton1_Click()
Dim ultimo As Integer
ultimo = buscar_ultimo
Sheets("hoja2").Cells(ultimo, 1).Value = ultimo
Sheets("hoja2").Cells(ultimo, 2).Value = TextBox1.Text
Sheets("hoja2").Cells(ultimo, 3).Value = TextBox2.Text
Sheets("hoja2").Cells(ultimo, 4).Value = TextBox3.Text
Sheets("hoja2").Cells(ultimo, 5).Value = TextBox4.Text
Sheets("hoja2").Cells(ultimo, 6).Value = ComboBox1.Value
Sheets("hoja2").Cells(ultimo, 7).Value = ComboBox2.Value
MsgBox "El codigo es: " & ultimo
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
End Sub
Function buscar_ultimo() As Integer
Dim i As Integer
i = 1
While (Sheets("hoja2").Cells(i, 1).Value <> "")
i = i + 1
Wend
buscar_ultimo = i
End Function
Private Sub UserForm_Activate()
TextBox1.Text = Date
TextBox1.Enabled = False
ComboBox1. AddItem "EQUIPO DE VENTAS"
ComboBox1. AddItem "EQUIPO DE MANTENCION"
ComboBox2. AddItem "MENSUAL"
ComboBox2. AddItem "UNICA"
End Sub
Vaya bacter, eres una maquina! Te agradezco montones tu ayuda.
Te dejo un espejo de como va quedando el formulario hasta ahora.
private Sub CommandButton2_Click()
ActiveWorkbook.Close True
End Sub
Private Sub TextBox1_Change()
TextBox1.Value = UCase(TextBox1.Value)
End Sub
Private Sub TextBox2_Change()
TextBox2.Value = UCase(TextBox2.Value)
End Sub
Private Sub TextBox3_Change()
TextBox3.Value = UCase(TextBox3.Value)
End Sub
Private Sub TextBox4_Change()
If Not IsNumeric(TextBox4) Then
Dim mensaje As String
mensaje = MsgBox("Valor ingresado NO es Numerico" & Chr(13) & " Favor ingrese nuevamente")
TextBox4 = Empty
End If
End Sub
Private Sub CommandButton1_Click()
Dim ultimo As Integer
ultimo = buscar_ultimo
Sheets("hoja2").Cells(ultimo, 1).Value = ultimo
Sheets("hoja2").Cells(ultimo, 2).Value = TextBox1.Text
Sheets("hoja2").Cells(ultimo, 3).Value = TextBox2.Text
Sheets("hoja2").Cells(ultimo, 4).Value = TextBox3.Text
Sheets("hoja2").Cells(ultimo, 5).Value = TextBox4.Text
Sheets("hoja2").Cells(ultimo, 6).Value = ComboBox1.Value
Sheets("hoja2").Cells(ultimo, 7).Value = ComboBox2.Value
Sheets("hoja2").Cells(ultimo, 8).Value = ComboBox3.Value
MsgBox "El codigo es: " & ultimo
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
End Sub
Function buscar_ultimo() As Integer
Dim i As Integer
i = 1
While (Sheets("hoja2").Cells(i, 1).Value <> "")
i = i + 1
Wend
buscar_ultimo = i
End Function
Private Sub UserForm_Activate()
TextBox1.Text = Date
TextBox1.Enabled = False
ComboBox1.AddItem "EQUIPO DE VENTAS"
ComboBox1.AddItem "EQUIPO DE MANTENCION"
ComboBox2.AddItem "MENSUAL"
ComboBox2.AddItem "UNICA"
ComboBox3.AddItem "prod1"
ComboBox3.AddItem "prod2"
ComboBox3.AddItem "prod3"
ComboBox3.AddItem "prod4"
End Sub
pero me aparecen nuevas dudas ...
- Mi intención es crear otro userform que solamente tengo dos textbox uno con nobre y otro apellido, que identificara a los usuarios que intervengan en la aplicación . La inquietud se presenta al momento de "linkear" el botón aceptar de nuevo userform con el que trabajábamos inicialmente.
- También e investigado sin éxito la forma en que el formulario detecte si es que faltan datos por ingresar.
- Y por ultimo me gustaría saber si existe la posibilidad de que el código a entregar no empiece desde "1", sino de por ejemplo 20000 sin ser necesario que los datos se ingresen en la columna 20000 .
Function buscar_ultimo() As Integer
Dim i As Integer
i = 1
While (Sheets("hoja2").Cells(i, 1).Value <> "")
i = i + 1
Wend
buscar_ultimo = i
End Function
Profesor, quedo atento a sus comentario y como siempre agradezco su buena onda y disponibilidad para enseñarnos.
Estoy probando algo así... ( no funciona )
Private Sub CommandButton1_Click()
Dim ultimo As Integer
ultimo = buscar_ultimo
Sheets("hoja2").Cells(ultimo, 9).Value = ultimo
Sheets("hoja2").Cells(ultimo, 9).Value = TextBox1.Text
Sheets("hoja2").Cells(ultimo, 10).Value = TextBox2.Text
UserForm2.Show
End Sub
Private Sub CommandButton2_Click()
ActiveWorkbook.Close True
End Sub
Que bueno que te haya servido, para el control de campos vacíos agregue un if con dos condiciones (tu pones las que sean convenientes para ti) en ese caso puse que los textbox 1 y 2 no pueden tener menos de 3 caracteres.
Con respecto a mostrar el nuevo userform, con solo crear el nuevo form y la orden userform2. Show, el debería aparecer.
Para que el registro empiece desde 20000, dejo el contador de la misma manera y solo le sumo los 20000 a la hoja de ingresar el registro.
Private Sub CommandButton1_Click()
Dim ultimo As Integer
If Len(TextBox1.Text) < 3 Or Len(TextBox2.Text) < 3 Then
MsgBox " Falta completar algunos campos"
Else
ultimo = buscar_ultimo
Sheets("hoja2").Cells(ultimo, 1).Value = ultimo+20000
Sheets("hoja2").Cells(ultimo, 2).Value = TextBox1.Text
Sheets("hoja2").Cells(ultimo, 3).Value = TextBox2.Text
Sheets("hoja2").Cells(ultimo, 4).Value = TextBox3.Text
Sheets("hoja2").Cells(ultimo, 5).Value = TextBox4.Text
Sheets("hoja2").Cells(ultimo, 6).Value = ComboBox1.Value
Sheets("hoja2").Cells(ultimo, 7).Value = ComboBox2.Value
Sheets("hoja2").Cells(ultimo, 8).Value = ComboBox3.Value
MsgBox "El codigo es: " & ultimo+20000
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
userform1.hide
UserForm2.Show
end if
End Sub
Bacter, gracias por tu pronta respuesta pero me quedan ciertas dudas
- Si bien el código que me entregaste me funciona, este a pesar de que faltarían datos de igual forma entrega el código de respuesta.
If Len(TextBox1.Text) < 3 Or Len(TextBox2.Text) < 3 Then
MsgBox " Falta completar algunos campos"
Else
End If
Me presenta problemas en esta parte de la sintaxis... se deberá al cambio en la parte 'MsgBox "El código es: " & ¿ultimo+20000 '?
Function buscar_ultimo() As Integer
Dim i As Integer
i = 1
While (Sheets("DATOS").Cells(i, 1).Value <> "")
i = i + 1
Wend
buscar_ultimo = i
End Function
Como estas, yo lo corro y no me da problemas, pero si quieres escríbelo de esta manera
ultimo = ultimo + 20000
MsgBox "El codigo es: " & ultimo
Bacter, ¿estaré proponiendo bien la sintaxis?
Me arroja problemas con
UserForm1.Hide
UserForm2.Show


Private Sub CommandButton1_Click()
Dim ultimo As Integer
If Len(TextBox1.Text) < 3 Or Len(TextBox2.Text) < 3 Then
MsgBox " Falta completar algunos campos"
Else
ultimo = buscar_ultimo
Sheets("hoja2").Cells(ultimo, 1).Value = ultimo + 20000
Sheets("hoja2").Cells(ultimo, 2).Value = TextBox1.Text
Sheets("hoja2").Cells(ultimo, 3).Value = TextBox2.Text
Sheets("hoja2").Cells(ultimo, 4).Value = TextBox3.Text
Sheets("hoja2").Cells(ultimo, 5).Value = TextBox4.Text
Sheets("hoja2").Cells(ultimo, 6).Value = ComboBox1.Value
Sheets("hoja2").Cells(ultimo, 7).Value = ComboBox2.Value
Sheets("hoja2").Cells(ultimo, 8).Value = ComboBox3.Value
ultimo = ultimo + 20000
MsgBox "El codigo es: " & ultimo
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
ComboBox1.Value = ""
ComboBox2.Value = ""
UserForm1.Hide
UserForm2.Show
End If
End Sub
La sintaxsis esta bien, amenos que ese no sea el nombre de tus formularios.
Estaba al Revés PLOP!
Se generaba un inconveniente con el formulario de inicio así que deje solo un formulario.
AHora me gustaría agregar la capacidad a este formulario de enviar un mail al ser entregado el código ... ¿se puede?
Existen varias formas
Prueba las que te describe esta página y me comentas
http://www.rondebruin.nl/sendmail.htm

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas